Compare commits

..
Author SHA1 Message Date
Laurens Valk 5437bd92c0 @pybricks/ide-docs v1.3.1 2021-04-12 11:18:28 +02:00
David Lechner 13d9aeea20 poetry: Bump RTD and theme versions.
This is mainly to pull in the requirement of docutils < 0.17 from
sphinx-rtd-theme. Just bumping to latest sphinx doc while we are at it.

Issue: https://github.com/pybricks/pybricks-api/issues/55
2021-04-12 11:17:30 +02:00
Laurens Valk 9594adae48 @pybricks/ide-docs v1.3.0 2021-04-12 11:08:51 +02:00
Laurens Valk 8dd171fc4c v3: Drop parameters Side and Button. 2021-04-12 11:05:26 +02:00
Laurens Valk 5effd921b4 v3: Drop Remote control. 2021-04-12 11:05:22 +02:00
Laurens Valk d503966862 v3: Drop geometry module. 2021-04-12 11:05:17 +02:00
Laurens Valk 7563b1c6cf v3: Drop Prime Hub and Inventor Hub. 2021-04-12 11:05:04 +02:00
Laurens Valk c9132b45db v3: Drop IMU documentation.
This is not officially supported yet, so drop from release docs.
2021-04-12 11:03:28 +02:00
Laurens Valk de13c01673 api/nxtdevices: Update color method.
This shares the implementation with the PUP color sensors, so update accordingly.
2021-04-10 15:31:29 +02:00
Laurens Valk ca96ee2fce examples: Update detectable colors API. 2021-04-10 15:31:28 +02:00
Laurens Valk 68f626f1ef doc/pupdevices: Update usage of color. 2021-04-10 15:31:28 +02:00
Laurens Valk 570fac30c5 api/parameters/Color: Fix color definitions.
Match the implementation.
2021-04-10 15:31:28 +02:00
Laurens Valk 1f0be98649 api/parameters/Color: Add missing color typing. 2021-04-10 15:31:27 +02:00
Laurens Valk e91590feec examples/pup/sensor: Fix use of lights.on.
The documentation says to use a list or tuple of brightness values.

https://github.com/pybricks/support/issues/273

Implementation fixed via https://github.com/pybricks/pybricks-micropython/commit/28b5413c2b41283a5c1ea3e8cccf4a2900dd7fc3
2021-04-09 15:44:08 +02:00
Laurens Valk 597b6d682f @pybricks/ide-docs v1.2.0 2021-04-09 12:31:37 +02:00
Laurens Valk 9c8d41efb8 doc/index: Update install note in IDE docs. 2021-04-09 12:21:47 +02:00
Laurens Valk a06e01c6de doc/start_pup/ev3: Drop installation guide.
These are now at https://pybricks.com/install/
2021-04-07 19:56:56 +02:00
David Lechner 186c46f52c api/pybricks/messaging: fix BluetoothMailboxServer close
As per standard Python socketserver, there is `server_close()` rather than `close()`.

Fixes #51
2021-04-07 19:42:33 +02:00
Laurens Valk 7679b8b47d examples/hubs/MoveHub: imu examples 2021-02-17 23:31:19 +01:00
Laurens Valk c14f1cf473 api/hubs/MoveHub: add basic imu
This is similar to the other hubs, but with reduced functionality.
2021-02-17 23:23:40 +01:00
Jerry Nicholls 6ce8336c26 doc/common/Motor: fix docstring for run_target
Changed "does" to "doesn't" for the target angle. The sign of the speed is irrelevant.
2021-02-15 19:12:41 +01:00
Laurens Valk c46b249c8c @pybricks/ide-docs v1.1.1 2021-02-14 19:32:52 +01:00
Laurens Valk 67008b67d8 doc/ide: include installation guide 2021-02-14 19:26:10 +01:00
Laurens Valk 9c1beef6b6 doc/parameters/Port: move doc to rst 2021-02-14 19:00:52 +01:00
Laurens Valk 5eb7a143fa doc/parameters/Stop: move doc to rst 2021-02-14 19:00:52 +01:00
Laurens Valk fc04059d86 doc/parameters/Button: move doc to rst 2021-02-14 19:00:45 +01:00
Laurens Valk 0082f0502a doc/parameters/Direction: move doc to rst 2021-02-14 18:44:25 +01:00
Laurens Valk e7dc4bb609 doc/parameters/Side: move doc to rst 2021-02-14 18:41:17 +01:00
Laurens Valk fb86e4bcef doc/parameters/Stop: fix typo 2021-02-14 16:21:37 +01:00
Laurens Valk 632908f59a doc/parameters: split out page per class 2021-02-14 16:06:23 +01:00
Laurens Valk 4a7fa12eaa config: add classlink directive
We have index pages for most modules now, which link to individual classes. It is helpful if these empty class headers are hyperlinks. This commit does just that.

For most sensors/devices so far this is not really necessary as the images are already hyperlinks. But this will become more useful as we start adding index pages like these for classes without images, such as parameters.
2021-02-14 15:39:39 +01:00
Jorge Pereira 109fcf19c1 examples/pup/motor: update motor_action_basic
Demo of run_angle had a typo
2021-02-14 13:54:58 +01:00
Laurens Valk 3229da030b doc/start_pup: update getting started instructions 2021-02-14 12:41:05 +01:00
Laurens Valk 4b052fa66d doc/pupdevices/motor: drop image alignment
Fixes https://github.com/pybricks/pybricks-api/issues/40
2021-02-12 11:10:51 +01:00
Laurens Valk 3c6ebd09bd doc/parameters/Color: add examples 2021-02-12 10:53:40 +01:00
Laurens Valk af1b84afe2 api/parameters/Color: drop name attribute 2021-02-12 10:16:43 +01:00
Laurens Valk 45dbd7db5a config: display border around white div
Makes it easier to see white box on white background.
2021-02-12 10:15:58 +01:00
Laurens Valk a7699d6546 api/common/Control: add load method 2021-02-10 18:49:51 +01:00
Laurens Valk 55c83cb026 api/common: add torque limit setter
Also document units of torque
2021-02-10 15:48:56 +01:00
David Lechner deb211bdb7 @pybricks/ide-docs v1.1.0 2021-01-28 12:31:19 -06:00
David Lechner 8a5e5c3fb4 doc/ide: styling to match Pybricks Code
We were injecting this from Pybricks code, but it caused the scroll bars
to flash when loading a page.
2021-01-28 12:31:19 -06:00
ZPhilo 2a1640f7dc examples/pup/hubs/hub_primehub: fix button
Corrected Bluetooth button name (from BT to BLUETOOTH)
2021-01-28 09:31:41 +01:00
Laurens Valk 535aac8144 config: fix missing automembers in sphinx upgrade
This setting was renamed and should now be a dictionary.

Fixes https://github.com/pybricks/pybricks-api/issues/45
2021-01-28 09:30:23 +01:00
David Lechner 00cc5ee44e poetry: move dev dependencies to dev section
Users who install this package from PyPi don't need all of the dev dependencies.
2021-01-26 11:46:32 -06:00
Laurens Valk f0b882b576 config: update to Sphinx 3.4 2021-01-26 09:18:13 +01:00
Laurens Valk 8ed45aecfb doc/nxtdevices: drop method link
For some reason, these are not working after upgrading to Sphinx 3.X, even though the same reference to conversion works just fine elsewhere.
2021-01-26 09:07:19 +01:00
David Lechner 77605e8701 github: add workflow for publishing ide-docs package 2021-01-26 08:30:48 +01:00
David Lechner b4c8242133 doc/ide: add node package
This will be used to publish the docs in a way that is easy for
pybricks-code to use.
2021-01-26 08:30:48 +01:00
David Lechner 06e01e5ac8 doc/ide: use sphinx.ext.imgmath
MathJax uses a CDN to to distribute the package. So in order to use the
docs offline, we would have to include our own copy. But it is a bit
large (50-ish MB), so it is easier to use sphinx.ext.imgmath instead
to generate svg images.

The situation might be different with MathJax v3, but that requires
Sphinx v4.
2021-01-26 08:30:48 +01:00
David Lechner ff22c32c24 doc/api/signaltypes: use ^{\circ} instead of ° in :math:
This works for both sphinx.ext.mathjax and sphinx.ext.imgmath.
2021-01-26 08:30:48 +01:00
David Lechner 95eb999493 doc/api/signaltypes: fix degree symbol overlapping
The degree symbol was a bit too close to the letters.
2021-01-26 08:30:48 +01:00
David Lechner 7d729a8e9e doc/ide: hide the "view source" link
Since these are meant to be offline docs and use a smaller screen area
we can omit this to keep things cleaner.
2021-01-26 08:30:48 +01:00
David Lechner c750a3cd88 doc/ide: hide prev/next buttons
In the IDE this is more of a reference and less of a book so going to
the next page doesn't make as much sense.
2021-01-26 08:30:48 +01:00
David Lechner adf6e03bc9 doc: open external links in a new window
This adds a hack to open external links in a new window. Requires Sphinx v1.8.
2021-01-26 08:30:48 +01:00
David Lechner 0466ce947f doc: override external link style on figure target
This works around https://github.com/readthedocs/sphinx_rtd_theme/pull/494#issuecomment-354063112
2021-01-26 08:30:48 +01:00
David Lechner 7abb670f66 doc/ide: hide footers
This information is duplicated in the IDE about dialog so we don't need
it in the docs.
2021-01-26 08:30:48 +01:00
Laurens Valk 55d7a8a254 examples/pup: acceleration and angular velocity 2021-01-20 16:02:36 +01:00
Laurens Valk e051455e23 examples/pup: add imu tilt examples 2021-01-20 14:55:27 +01:00
Laurens Valk 4b5b97bbb2 examples/pup: add imu up() example 2021-01-20 11:13:24 +01:00
Laurens Valk 1573508f75 examples/pup/primehub: auto rotate display 2021-01-20 11:05:09 +01:00
Laurens Valk 018b0d8b9d examples: simplify hub script generator
Instead of saying that some lines should be skipped, just say for which hubs the entire script will work.
2021-01-20 10:56:21 +01:00
Laurens Valk 47d7fa46d8 examples: drop common inventorhub scripts
The doc page has been merged into one page, with all examples using the PrimeHub class.
2021-01-20 10:40:26 +01:00
Laurens Valk 21e5400ff3 api/common/IMU: publish draft API 2021-01-19 15:09:06 +01:00
Laurens Valk bb77e0f413 doc/hubs: link inventorhub to primehub 2021-01-19 11:45:14 +01:00
Laurens Valk c5851a3569 doc/ide: add landing page images 2021-01-19 11:42:21 +01:00
Laurens Valk 93f27f61e7 doc/hubs: make naming consistent 2021-01-19 11:19:39 +01:00
Laurens Valk 7d40e07dfb doc/hubs: InventorHub and PrimeHub on same page
Make it a bit more explicit that they are the same.
2021-01-19 11:18:21 +01:00
Laurens Valk 5ab71de988 doc/ide: improve landing page
Add visuals to quickly get to hubs or pupdevices. These still need to be made into smaller more generic images, but these will do for now.
2021-01-18 16:34:10 +01:00
Laurens Valk d7254472f0 doc/ide: simplify landing page and menu
The embedded docs will only have the module documentation. Remove everything else.
2021-01-18 16:33:14 +01:00
Laurens Valk 245542ce4d doc/iodevices/PUPDevice: move compatibility note 2021-01-18 16:33:14 +01:00
Laurens Valk 31891d0970 doc/ide: Drop EV3 pages 2021-01-18 16:33:14 +01:00
Laurens Valk 3cc9ec157e doc/api: avoid more ev3 references 2021-01-18 16:33:05 +01:00
Laurens Valk 9aa00fac15 doc/parameters: generalize Direction info
Avoid links to EV3-specifics, because they may not be present in some builds.
2021-01-18 15:36:07 +01:00
Laurens Valk 2a2ba8c6aa config: build both targets on CI 2021-01-18 14:36:13 +01:00
Laurens Valk db4cbe66c1 all: update copyright year 2021-01-18 14:34:28 +01:00
Laurens Valk 087dab5ed1 doc/ide: add build target for Pybricks Code
poetry run make -C doc SOURCEDIR=ide html

This adds a build target for docs to integrate in Pybricks Code. This commit makes the build target produce an identical copy, by making each page reference its original rst file.

Now we can easily exclude certain components (such as EV3) as needed for Pybricks Code, and also change the main index / welcome page.
2021-01-18 12:50:27 +01:00
Laurens Valk 69c32e5c0d doc: fix image paths
Use full path just like all other images in the api docs
2021-01-18 12:42:15 +01:00
Laurens Valk 14ad697565 doc/start_ev3: use rst files instead of inc
Use standard sphinx conventions as much as possible.
2021-01-18 12:00:38 +01:00
Laurens Valk d2a6b07e0c doc/start_ev3: move download link 2021-01-18 11:52:49 +01:00
Laurens Valk 853b141153 doc/start_ev3: group as folder 2021-01-18 11:52:24 +01:00
Laurens Valk 12a6b49f97 doc/frames: drop unused file 2021-01-18 11:13:51 +01:00
Laurens Valk 06c1d00f22 config: drop contentui plugin
We are no longer using this
2021-01-13 16:54:18 +01:00
Laurens Valk 8c0d7a3904 doc/parameters: drop content tabs for sides 2021-01-13 16:54:18 +01:00
Laurens Valk 9b5590047d doc/parameters: drop content tabs for ports 2021-01-13 16:54:28 +01:00
Laurens Valk 46d9e3c119 doc/iodevices: refactor
Split all classes to their own file. This keeps things organized, and allows per-class comments about compatibility. Also flatten toggled examples.
2021-01-13 16:54:18 +01:00
Laurens Valk bb7c9adbb8 doc/start_pup: drop toggles 2021-01-13 15:55:08 +01:00
Laurens Valk 5f4ef05c6e doc/tools: move data logging to separate page
Expand the EV3 examples without toggles, and without making the tools page too long.
2021-01-13 15:44:39 +01:00
Laurens Valk 5bbbff2550 doc/messaging: expand examples
Drop use of toggle via plugin.
2021-01-13 15:13:51 +01:00
Laurens Valk 8f637c52cd doc/media: drop toggle ui 2021-01-13 14:25:08 +01:00
Laurens Valk f826e7641c doc/media: footnote instead of toggle for language
This is a way to make the language list non-distracting without the contentui plugin
2021-01-12 16:50:43 +01:00
Laurens Valk 400067c364 doc/hubs/ev3brick: use footnote instead of toggle
This is a way to make the language list non-distracting without the contentui plugin
2021-01-12 16:50:18 +01:00
Laurens Valk 92311b65fb examples/pup/hub_primehub: no need to call off()
The animation is now cleared automatically when invoking the pixel method, so there's no need to call this manually anymore.

See https://github.com/pybricks/support/issues/195
2021-01-12 16:32:20 +01:00
Laurens Valk 05ecf8bcb6 doc/hubs: show IMU on Prime and Technic Hub 2021-01-05 16:31:35 +01:00
Laurens Valk 1f991302e5 doc/common: fix unit of acceleration 2021-01-05 16:31:35 +01:00
Laurens Valk f3f0532f74 doc/hubs: move note about identical classes
Otherwise, it was shown after the newly added __init__ docstring, which was confusing.
2021-01-05 16:31:35 +01:00
Laurens Valk 3a9e5728c6 api/hubs: add axis initializers for IMU 2021-01-05 16:31:35 +01:00
Laurens Valk 2a97b62603 doc/hubs: add note about hub instance attributes 2021-01-05 16:31:35 +01:00
Laurens Valk 64146f5afa doc/geometry: axis and orientation conventions 2021-01-05 16:31:21 +01:00
Laurens Valk e52130b627 api/hubs/inventorhub: enable IMU
The minimal change to start reviewing and improving IMU api and docs.
2021-01-04 17:25:16 +01:00
Laurens Valk a2583944d9 api/geometry: move Axis from parameters
This location makes more sense. Also drop Axis.ANY = None, which is more confusing than helpful. Instead, use relevant docstring to explain what None will do.
2021-01-04 17:25:15 +01:00
Laurens Valk 4c6c149d4a doc/start_pup: update link to CI builds 2021-01-04 15:28:03 +01:00
Laurens Valk 9835ee9dbe doc/hubs/primehub: update button graphic
The graphic showed Button.BT but it is now Button.BLUETOOTH
2020-12-30 12:42:47 +01:00
Laurens Valk 755d0520a6 api/parameters/Button: pass buttons on init
This matches the implementation.
2020-12-30 12:39:06 +01:00
Laurens Valk 08c55218fa api/parameters/Button: add bluetooth button 2020-12-30 12:36:37 +01:00
Laurens Valk 352bff564c api/parameters/Button: add remote buttons
Also clean up how it is displayed by reading the attributes from the API instead of copying them.
2020-12-30 12:27:12 +01:00
Laurens Valk 313a51219a api/pupdevices/Remote: add address
After connecting (automatically), this address can be printed so next time you can connect directly without scanning.

This is useful if you have more than one remote.
2020-12-29 20:16:34 +01:00
Laurens Valk c2d2884794 api/pupdevices/Remote: publish draft api 2020-12-29 19:51:48 +01:00
Laurens Valk 32a47bcee0 doc/nxtdevices: do not collapse example
In the long run, this page needs to be split up just like pupdevices. At this time, the nxtdevices page has only one example, so we simply remove the toggle header.
2020-12-29 14:53:13 +01:00
Laurens Valk b5890437de doc/pupdevices/PFMotor: split examples
Now that each device is on its own page, we no longer need to collapse snippets to reduce page size. Now they can just all be at the bottom of the page. This also gives each a dedicated link which is easier when giving support.
2020-12-29 14:48:09 +01:00
Laurens Valk b0af924cfc doc/pupdevices/UltrasonicSensor: split examples
Now that each device is on its own page, we no longer need to collapse snippets to reduce page size. Now they can just all be at the bottom of the page. This also gives each a dedicated link which is easier when giving support.
2020-12-29 14:47:06 +01:00
Laurens Valk 915d445561 doc/pupdevices/TiltSensor: split examples
Now that each device is on its own page, we no longer need to collapse snippets to reduce page size. Now they can just all be at the bottom of the page. This also gives each a dedicated link which is easier when giving support.
2020-12-29 14:44:50 +01:00
Laurens Valk 070264647f doc/pupdevices/Light: split examples
Now that each device is on its own page, we no longer need to collapse snippets to reduce page size. Now they can just all be at the bottom of the page. This also gives each a dedicated link which is easier when giving support.
2020-12-29 14:43:08 +01:00
Laurens Valk ab1f58c2cc doc/pupdevices/InfraredSensor: split examples
Now that each device is on its own page, we no longer need to collapse snippets to reduce page size. Now they can just all be at the bottom of the page. This also gives each a dedicated link which is easier when giving support.
2020-12-29 14:42:11 +01:00
Laurens Valk d6bc72c3c1 doc/pupdevices/ForceSensor: split examples
Now that each device is on its own page, we no longer need to collapse snippets to reduce page size. Now they can just all be at the bottom of the page. This also gives each a dedicated link which is easier when giving support.
2020-12-29 14:41:06 +01:00
Laurens Valk 4e2aec6c35 doc/pupdevices/motor: split examples
Now that each device is on its own page, we no longer need to collapse snippets to reduce page size. Now they can just all be at the bottom of the page. This also gives each a dedicated link which is easier when giving support.
2020-12-29 14:35:07 +01:00
Laurens Valk 2375a1abcb doc/pupdevices/colorsensor: split examples
Now that each sensor is on its own page, we no longer need to collapse snippets to reduce page size. Now they can just all be at the bottom of the page. This also gives each a dedicated link which is easier when giving support.
2020-12-29 14:10:41 +01:00
Laurens Valk ab4da63029 doc/hubs: move examples to dedicated sections
Now that each hub is on its own page, we no longer need to collapse snippets to reduce page size. Now they can just all be at the bottom of the page. This also gives each a dedicated link which is easier when giving support.
2020-12-29 13:58:17 +01:00
Laurens Valk ab384b464b doc/pupdevices/colordistancesensor: split examples
Now that each sensor is on its own page, we no longer need to collapse snippets to reduce page size. Now they can just all be at the bottom of the page. This also gives each a dedicated link which is easier when giving support.
2020-12-29 12:08:29 +01:00
Laurens Valk d2de1089d6 doc/hubs/index: clean up thumbnail page 2020-12-29 11:50:55 +01:00
Laurens Valk b76b6cf835 doc/pupdevices: one page per sensor
This page was getting very long, so split it up for easier navigation (#33).
2020-12-29 11:47:27 +01:00
Laurens Valk a92eae867b typing/pupdevices: remove stray docstring 2020-12-29 09:32:11 +01:00
Laurens Valk 0a86e0a719 typing/common: fix Keypad return type
Follows 8a1716d5e2
2020-12-29 09:31:00 +01:00
Laurens Valk 7800ab05b2 typing/common: fix nonexistent scalar type 2020-12-29 09:29:47 +01:00
David Lechner 032d3786bf github: update target python versions 2020-12-28 18:47:11 -06:00
David Lechner db65f8d646 api: add type hints for v3
This updates the type hints for the current v3 API.
2020-12-28 18:47:11 -06:00
David Lechner 3a66b8e053 api: add type hints for v2
This adds PEP 561 style type hints for Pybricks v2 (just EV3).
2020-12-28 18:47:04 -06:00
Laurens Valk 8a1716d5e2 api/common/Keypad: change return type to tuple
This follows an implementation change that was made for performance reasons (https://github.com/pybricks/pybricks-micropython/commit/95741ac2f8f118396a517a38f4d0f7fb92136f82).
2020-12-23 11:45:37 +01:00
Laurens Valk abe4c1bc9a doc/common/Keypad: fix name
Keypad is one word, so the class is not spelled KeyPad.
2020-12-23 11:43:48 +01:00
Laurens Valk 84b882f8b8 api/hubs/InventorHub: add speaker instance 2020-12-18 13:35:19 +01:00
Laurens Valk c3fc818037 doc/common/Speaker: move note information back
We were hiding this under a toggle menu to reduce the page size of the hubs module. Now that each hub is on its own page, this is no longer necessary.

In turn, this makes it easier to document the same method for other hubs.
2020-12-18 13:32:18 +01:00
Laurens Valk 57ff8312f3 api/iodevices/PUPDevice: add info() method 2020-12-18 13:20:17 +01:00
Laurens Valk 68511bd3eb doc/iodevices: note on I2C/UART on Powered Up 2020-12-14 10:34:41 +01:00
Laurens Valk ba4fe80b50 doc/iodevices: add PUPDevice class 2020-12-14 10:27:23 +01:00
Laurens Valk b7d728a86e doc/iodevices: move LUMPDevice to EV3 only section
Also update graphic used for this device class.
2020-12-14 10:16:02 +01:00
Laurens Valk 1e751d6afc api/iodevices/LUMPDevice: drop write method
EV3 UART devices do not support writing.
2020-12-14 10:08:09 +01:00
Laurens Valk aaf98308f7 api/iodevices/PUPDevice: copy from LUMPDevice
Powered Up devices have many differences compared to EV3 UART devices, so it is better to split them to dedicated classes.

The biggest difference is that PUPDevice class will allow writing to sensors and toggling battery power to the device.
2020-12-14 10:07:13 +01:00
Laurens Valk 3e322165f5 doc/hubs: include light matrix display examples 2020-11-11 18:57:04 +01:00
Laurens Valk 1c201b5f8c examples/pup: generate light matrix examples 2020-11-11 18:56:38 +01:00
Laurens Valk abe1be18b2 examples/pup: add common light matrix display 2020-11-11 17:09:44 +01:00
Laurens Valk 983562f7b8 doc/hubs/inventorhub: document light, display, buttons 2020-11-06 15:59:02 +01:00
Laurens Valk 1c9d0dd86f api/hubs/PrimeHub: enable buttons 2020-11-06 15:55:48 +01:00
Laurens Valk 22a057d6e3 doc/common/LightGrid: existing pixels do not re-orient
This is currently a limitation of the implementation, and may be changed later on.
2020-11-06 15:22:00 +01:00
Laurens Valk e92fd1f05b doc/hubs/primehub: align button and display 2020-11-06 12:45:49 +01:00
Laurens Valk 9a45c6582c doc/hubs/PrimeHub: add labeled diagrams 2020-11-06 12:38:03 +01:00
Laurens Valk 3e3af62713 doc/start_ev3: drop absolute path reference 2020-11-06 12:33:21 +01:00
Laurens Valk c93875729a doc/hubs/PrimeHub: add hub diagrams
document lights, row/col index, buttons
2020-11-06 12:32:45 +01:00
Laurens Valk 3288591cc3 doc/parameters: Add ports E, F 2020-11-06 12:31:42 +01:00
Laurens Valk 8f21cea345 api/common: clean up Light Matrix
This renames the generic class from LightGrid to LightMatrix. The instance object is simply called display.

This makes user scripts easier to type and read.

This also cleans up most of the draft docstrings for this class and fixes a few argument typos.
2020-11-06 12:31:42 +01:00
Laurens Valk 4e9886dba8 api/geometry: add new module
This module will contain mathematical tools to deal with geometry and motion of robots. This includes a Matrix type for common matrix operations.
2020-11-06 12:31:42 +01:00
Laurens Valk cb91368b32 api/common/LightGrid: add orientation setter 2020-11-06 12:31:42 +01:00
Laurens Valk 17b1151490 doc/parameters/Side: clarify sides for screens 2020-11-06 12:31:42 +01:00
Laurens Valk 6083992914 doc/parameters: add diagrams to designate sides
This adds labeled images for each hub/sensor for which the side is relevant, so that there can be no confusion over which is the left/right, top/bottom, or front/back side.
2020-11-06 12:31:38 +01:00
Laurens Valk 70ed79076d api/parameters: add Side enum
This will be used to designate orientations of hubs/sensors/screens.
2020-11-04 10:19:35 +01:00
Laurens Valk 31f2e9b071 examples: update paths in docs 2020-11-04 10:17:33 +01:00
Laurens Valk b0ffb24a2e examples: import snippets from pybricks-projects
These code samples are rendered in the docs, so we include them here.

For the git history of these snippets, see:
https://github.com/pybricks/pybricks-projects/commits/f4914069aaacfd9ab1e0dd6f05524f62cfc56b29/snippets
2020-11-04 10:17:33 +01:00
Laurens Valk 30e87695ea pybricks-projects: remove submodule
This dependency was causing extra maintenance, which we can avoid by bringing the snippets into this repository.
2020-11-04 10:17:33 +01:00
Laurens Valk 429d5d4d0d doc/pupdevices: add gray large angular motor 2020-10-26 10:17:32 +01:00
Laurens Valk 7b23db5abd doc/start_pup: update outdated notes
The stable version of Google Chrome has the required BLE support, so we can remove the steps about the beta version.

Also update the note on Boost beta and light status.
2020-10-25 21:49:26 +01:00
Laurens Valk 5c8809f542 doc/start_pup: add powered up hubs image
Make it easier to see which hubs we support.
2020-10-25 21:42:13 +01:00
Laurens Valk 9bcbfd2512 doc/primehub: note to clarify classes are the same 2020-10-25 21:34:05 +01:00
Laurens Valk 1e7991f68d doc/inventorhub: expose hub in the docs 2020-10-25 21:31:05 +01:00
Laurens Valk b29dab4d6b doc/start_ev3: add link to stable 2.0 docs 2020-10-25 21:00:54 +01:00
Laurens Valk d2a5cb2d60 doc/hubs: make visual table of contents 2020-10-25 20:51:56 +01:00
Laurens Valk 7b090d56d8 doc/hubs: move hubs to dedicated pages
The hubs module page was getting too long, leading to much scrolling.
2020-10-25 20:37:51 +01:00
Laurens Valk bcf610a29e doc/index: regroup hubs by platform
Make it easier to pick the right installation guide.
2020-10-25 19:51:40 +01:00
Laurens Valk 55001644d2 doc/start_inventor: add placeholder quick start
This adds an empty page so we can link to it from the main page.
2020-10-25 19:49:18 +01:00
Laurens Valk eef4e9f672 api/hubs: add InventorHub
This is just the SPIKE Prime Hub with a different name and color.
2020-10-25 10:25:16 +01:00
Laurens Valk 3de7f92e8a pybricks-projects: update set examples 2020-10-23 19:32:32 +02:00
Laurens Valk d4c44a292c api: add PrimeHub 2020-10-09 22:50:49 +02:00
Laurens Valk 90bea73c11 doc/hubs: Add light examples 2020-10-09 22:46:35 +02:00
Laurens Valk a603c19d0e doc/hubs: expose color light functionality
This enables the blink and animate methods.

The examples are not yet included.
2020-10-09 19:58:35 +02:00
Laurens Valk c3eb31d348 doc/common: fix cross references 2020-10-09 19:58:35 +02:00
Laurens Valk 1b730836e4 api/pupdevices/Light: drop blink, animate
External single-color lights won't have this for now.
2020-10-09 19:58:35 +02:00
Laurens Valk 4c65e994a3 config: create funding file 2020-10-09 19:58:23 +02:00
Laurens Valk ede503f6fe config: rename CPlusHub to TechnicHub
This replaces the name in internal files.
2020-10-09 19:16:33 +02:00
Laurens Valk 24d35993e9 api: rename CPlusHub to TechnicHub
This reflects the newly adopted naming convention.

See https://github.com/pybricks/support/issues/119
2020-10-09 19:16:33 +02:00
Laurens Valk d6651fc3c5 api/pupdevices: replace color_map
This reclects the implementation update that changes how
color sensing is performed and interfaced with by the user.
2020-10-08 20:19:33 +02:00
Laurens Valk 6671e3def0 pybricks-projects: update color sensing examples 2020-10-08 19:25:04 +02:00
Laurens Valk 6662862b43 api/parameters: Color divide value
This is the inverse of scaling by a constant through multiplication.
2020-10-07 09:17:02 +02:00
Laurens Valk 500bac9929 api/parameters/Color: allow scaling to alter hue
This makes it easy for users to vary brightness of the default colors without having to create a whole new object.
2020-08-26 21:12:48 +02:00
Laurens Valk 5e6a8c8334 api/parameters/Color: name is None by default
This is more consistent with the rest of our API.
2020-08-26 21:12:38 +02:00
Laurens Valk 4f27a465c4 api/common/LightGrid: drop on() method
This method is inconsistent with the on methods for other light related classes so it is better to delete it.
2020-08-25 16:27:19 +02:00
Laurens Valk f490a3b2c2 api/common/LightArray: add blink and animate 2020-08-25 16:27:19 +02:00
Laurens Valk 9ae4955344 api/parameters/Color: no name by default
When no name is given, the color remains untitled
2020-08-25 16:27:19 +02:00
Laurens Valk b89da4b061 api/common/ColorLight: add blink and animate
These are the generalizations of the corresponding methods for single color lights.
2020-08-25 13:38:09 +02:00
Laurens Valk b974ead0dc api/common/ColorLight: drop hsv function
The on() method takes a color type, which is an HSV color, so a separate hsv method is not needed.

hub.light.on(Color.GREEN)
hub.light.on(Color(120))
hub.light.on(Color(h=120, s=100, 50))
2020-08-25 13:38:09 +02:00
Laurens Valk 0427436df6 doc/common/LightGrid: clarify how blink and pattern relate
blink is just a simpler animation
2020-08-25 13:38:09 +02:00
Laurens Valk 4319b2fad8 api/common/Light: add blink and animate 2020-08-25 13:38:09 +02:00
Laurens Valk 0fb150be19 api/common/LightGrid: add animate method 2020-08-25 13:37:54 +02:00
Laurens Valk 6d0984f5fc api/common/LightGrid: simplify image method
Now it just displays a Matrix/2D list. We can omit manipulations like clear=False. Composing can be done by simply adding two matrices instead.

We also drop the compressed format. Instead we could have a helper function that gives you a
matrix based on a list of integers in the now-deleted format.
2020-08-25 12:42:14 +02:00
Laurens Valk b708fe283c api/common/LightGrid: rename char argument
This follows a change in the unreleased implementation.
2020-08-25 12:42:14 +02:00
Laurens Valk 74d59b43ac api/common/LightGrid: revise text method
Specify on and off time for consistency with future blink method.

Adding some off time helps reading text with subsequent charachters that are the same. For example, now "Hello" reads H e l l o instead of Helo.

Also drop wait argument for now because it is not currently implemented and may never be.
2020-08-25 12:42:10 +02:00
Laurens Valk c6c14afca2 doc/parameters/Color: add colors to each class atribute
This makes it much easier to pick the right color.
2020-08-12 12:22:14 +02:00
Laurens Valk 282e34b9e0 config: add pybricks-color directive
This directive produces a small box with the color from the Pybricks API:

.. pybricks-color:: CYAN
2020-08-12 12:19:49 +02:00
Laurens Valk 1eb75e24e7 api/parameters/Color: generalize color type
First step towards making a color type with HSV representation.

Colors such as Color.RED or Color.BLUE continue to exist, but now you
can also define your own colors:

DARK_RED = Color(h=0, s=100, v=50)
2020-08-12 12:18:24 +02:00
Laurens Valk be8592f096 doc/pupdevices/PFMotor: Documentation and examples 2020-08-11 12:13:06 +02:00
Laurens Valk 4d88fbbbd2 api/pupdevices/PFMotor: DCMotor functionality
This replaces the on-off method in ColorDistanceSensor.remote()
with a PFMotor class that works just like the DCMotor class. This
provides much more functionality without having to invent a new API.
2020-08-11 12:05:53 +02:00
Laurens Valk 70ffbfa4f3 doc/parameters/Color: sort colors by hue/value 2020-08-10 11:39:56 +02:00
Laurens Valk c987bc2f80 api/parameters/Color: add CYAN, MAGENTA, GRAY 2020-08-10 11:34:58 +02:00
Laurens Valk 7b8a848c61 api/parameters/Color: remove BROWN
Brown has the same hue as orange, just with a lower value and/or
saturation,  so it does not need to have a separate Color instance.
It is also not supported by the color_map methods.

It was originally included in this list because the EV3 Color Sensor
can technically detect it. This is not reliable, however, as it is
also reports this value for orange objects at a slightly larger
distance. The implementation may be updated to return orange
in both cases. If the original values are required, the LUMPDevice
may be used to get the original color index.
2020-08-10 11:29:48 +02:00
Laurens Valk 0c5457a5f2 api/parameters/Color: rename PURPLE to VIOLET
The correct term for hue = 270 is violet.
Purple is just magenta with a lower brightness value.
2020-08-10 11:29:32 +02:00
Laurens Valk 6aa6059974 doc/pupdevices: add Motor action examples 2020-07-21 16:14:35 +02:00
Laurens Valk 98f247688e doc/pupdevices: add Motor measuring examples 2020-07-21 14:50:26 +02:00
Laurens Valk 51f9d916e0 doc/pupdevices: add Motor init examples 2020-07-21 14:50:26 +02:00
Laurens Valk 8a9386ffc5 doc/pupdevices: add DCMotor examples 2020-07-21 14:50:26 +02:00
Bert bcd44dad84 doc/start_pup: fix mixed http and https contents
Fixes #106.
2020-07-19 21:47:11 +02:00
Laurens Valk ac96985c71 doc/pupdevices/ForceSensor: add examples 2020-07-13 15:40:59 +02:00
Laurens Valk b98f487f3c doc/pupdevices/ColorSensor: add examples 2020-07-13 14:24:57 +02:00
Laurens Valk 42917f14ef doc/parameters: fix link to move hub
This is no longer a generic hub reference
2020-07-12 13:17:45 +02:00
Laurens Valk 938c62430f doc/hubs: remove content tabs
This caused links not to work to anything other than the default tab.
2020-07-12 13:11:38 +02:00
Laurens Valk 6132ae66da doc/pupdevices/ColorDistanceSensor: add examples 2020-07-11 19:40:00 +02:00
Laurens Valk a02c7023e5 doc/pupdevices/ColorDistanceSensor: group methods
We are already using a rubric for the lights, so add two more to better
group the many methods of this sensor.
2020-07-11 17:09:49 +02:00
Laurens Valk d15aa22131 doc/pupdevices/Light: and blink and fade examples 2020-07-11 13:00:28 +02:00
Laurens Valk 19009d1637 doc/pupdevices: InfraredSensor, TiltSensor example 2020-07-11 12:46:30 +02:00
Laurens Valk 4dbaf5f68e doc/pupdevices/UltrasonicSensor: math example 2020-07-10 13:06:22 +02:00
Laurens Valk af2b1c66c9 doc/pupdevices/UltrasonicSensor: add example 2020-07-10 12:42:20 +02:00
Laurens Valk 3488e1fb83 doc/pupdevices/UltrasonicSensor: document invalid
Document how invalid values are reported.
2020-07-10 12:32:52 +02:00
Laurens Valk f26d750fbf doc/ev3devices/InfraredSensor: document mode delay 2020-07-10 11:46:04 +02:00
Laurens Valk 6e6c8956b9 doc/start_pup: clean up custom firmware steps 2020-07-10 11:35:39 +02:00
Laurens Valk 80a426bc4f doc/start_pup: update instructions
- We no longer require a password
- We support more hubs
- Mention known key issues
- Simplify Chrome 85 discussion
- Add instructions to unplug cables prior to update
2020-07-10 11:21:12 +02:00
Laurens Valk 93da01c7ce api/pupdevices/ColorDistanceSensor: add hsv
The hsv and color_map methods are the same as for the SPIKE ColorSensor class, except for the surface kwarg.
2020-07-07 14:07:35 +02:00
Laurens Valk 55c4c86c23 api/_common: fix speaker file kwarg
In the implementation, the kwarg is called "file". Instead of fixing the implementation which is already released, we fix the docs.
2020-07-07 09:50:36 +02:00
Laurens Valk 82b16dc8de api/_common: fix DriveBase speed kwarg
In the implementation, the kwarg is called "speed". Instead of fixing the implementation which is already released, we fix the docs.
2020-07-07 09:50:30 +02:00
Laurens Valk 8078b6febb doc/_common/ColorLight: docstring clean up
This adds a (commented out) preview of the methods to the city hub light
2020-07-07 09:44:16 +02:00
Laurens Valk 8a43dc936a doc/signaltypes: add hue placeholder
We will have to add a helpful diagram, but having the placeholder allows us to link to it already.
2020-07-07 09:44:16 +02:00
Laurens Valk 7d1fbe9ce9 api/_common/Light: add reset to system behavior
This makes lights behave as they would if the user script did not use them at all.
2020-07-07 09:44:16 +02:00
Laurens Valk 38a1cf9712 api/_common/Light: drop repeat kwarg
The pattern will always repeat, for simplicity.
2020-07-07 09:44:16 +02:00
Laurens Valk 102039385a api/_common/ColorLight: add pattern
This adds the method equivalent to the recent addition of a single
color light. The only difference is that now a color is returned instead
of a single brightness. The provided color or HSV tuple will be stored
as RGB samples internally, as is already done for pbio light patterns.

In the simplest blinking form this could be:

hub.light.pattern(lambda t: Color.RED if t >= 1000 else None, 2000)

Or a fading, one-color sine:

def fade(time):
    v = sin(time/2000/pi)*50+50
    h = 360
    s = 100
    return (h, s, v)

hub.light.pattern(fade, 1000)
2020-07-07 09:44:16 +02:00
Laurens Valk e780a65007 api/_common/ColorLight: change rgb to hsv
This makes it much easier to have fine grained control
over colors and cycle through them easily (0--360).

This also makes it consistent with sensor APIs. Now you
can measure the color and plug it into this method.

We can make this change because none of
the implementations use this yet.

If we feel we miss out by dropping the RGB, it would be more fitting
to instead expose R, G, and B attributes which point to instances of
the Light class. However, this is using more memory for something that
isn't very useful.

We could also just provide generic color converters between rgb, hsv,
and perhaps hex html color strings, not tied to any particular light or
sensor.
2020-07-07 09:44:16 +02:00
Laurens Valk b8505ff218 api/_common/Light: introduce pattern
Currently, Pybricks has system patterns for builtin lights.
This adds a user method to set such a pattern.

For example, an indefinite sine pattern could be specified by

def fade(time):
    return sin(time/2000/pi)*50+50

hub.light.pattern(fade, 1000)

or a blinking pattern using

def blink(time):
    if time >= 1000:
        return 100
    else:
        return 0

hub.light.pattern(blink, 2000)

or briefly:

hub.light.pattern(lambda t: 100 if t >= 1000 else 0, 2000)

This combines the best of simplicity and efficiency: The user doesn't
have to calculate and provide an expensive list of floating points, but
provide a clean and adaptable method instead.
By sampling, we maintain a fixed length pattern which we can preallocate
for the hub lights, and the samples are calculated only once and the
callable may be garbage collected if given as lambda. Also, any
exceptions will be caught immediately during the one-off evaluation.
2020-07-07 09:44:16 +02:00
Laurens Valk 20fec6461a api/_common/LightGrid: make image more efficient
Usually, images are static, so they can be computed in advance instead of during runtime. This makes scripts smaller and much more memory efficient.

For example, now you can say:

HOUSE = 4685823

hub.grid.image(HOUSE)

since 4685823 =
```
0 0 1 0 0
0 1 1 1 0
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
```

We could also choose the binary format to allow for more generic screen sizes. If we allow a bit more space (2 words instead of 1), we could do 1 byte per row to allow screens up to 8x8. Right now, though, we choose 1 word < 31 bits which is a bit more efficient in MicroPython.

We can easily list numerous example in the docs or provide a simple visual calculator.

There is still a matrix method that takes a 2D matrix of intensities for full control during runtime, which is what the image() method was doing initially. This commit renames the old draft to matrix().
2020-07-07 09:44:16 +02:00
Laurens Valk d66e18b113 api/pupdevices: add TiltSensor
This class and its methods are subject to change when the complete
API for IMUs is introduced.
2020-07-01 13:33:36 +02:00
Laurens Valk 55fe666dac api/pupdevices: add InfraredSensor 2020-07-01 12:02:13 +02:00
David Lechner 3554814c86 config: add Pybricks favicon 2020-06-17 13:38:22 -05:00
David Lechner fd75e94824 config: drop python 3.5 in CI build
python 3.6 is required for certain features we are using.
2020-06-17 13:13:14 -05:00
David Lechner 70cc605b56 config: update version to 3.0
We are working on the v3.0 release now.
2020-06-17 13:04:06 -05:00
Laurens Valk 0779b8df16 doc/pupdevices: workaround to show class attribute
We are using an older version of Sphinx which does not support
autodoc of inherited class attributes yet. This works
around it by just referencing the EV3 attribute, which does work.
2020-06-14 15:39:04 +02:00
Laurens Valk ecc30c2d92 doc/start_pup: add imports to example
This reflects a firmware update that makes it more consistent with
pybricks-micropython for EV3. Making imports explicit is also more
Pythonic. This will make it clearer when some classes are not available
on some hubs.
2020-06-09 14:28:32 +02:00
Laurens Valk 80840396aa api/pupdevices: add Powered Up Light 2020-06-08 15:26:19 +02:00
David Lechner c536081dea doc/start_pup: fix line too long lint error 2020-06-06 13:47:28 -05:00
David Lechner 87a488e790 doc/start_pup: update chrome download link
A new dev build was released for all platforms yesterday with the required patches.
2020-06-06 11:15:41 -05:00
Laurens Valk 90647e25dd doc/start_pup: update chrome release schedule 2020-06-05 16:17:23 +02:00
Laurens Valk 01c6e29dd5 doc/start_pup: add note about password 2020-06-05 15:56:04 +02:00
Laurens Valk 1eac0972ac api/hubs: add CPlusHub 2020-06-05 15:56:04 +02:00
Laurens Valk ce087f5330 doc/index: fix pup link 2020-06-05 15:56:04 +02:00
Laurens Valk 9e06245860 doc/pup_start: basic run instructions 2020-06-05 15:56:04 +02:00
Laurens Valk 4b9cedb444 doc/start_pup: add install instructions 2020-06-05 15:56:04 +02:00
Laurens Valk a99c4328fc doc/start_pup: explain firmware restore 2020-06-05 15:56:04 +02:00
Laurens Valk 07b4b5b783 doc/start_pup: instructions for permanent program 2020-06-05 15:56:04 +02:00
Laurens Valk 13be26443b doc/start_pup: add firmware install video 2020-06-05 15:56:04 +02:00
Laurens Valk ce993900d1 api/pupdevices: update illuminate argument
match the implementation and simplify description
2020-05-27 13:58:30 +02:00
Laurens Valk f604dd321e api/pupdevices/UltrasonicSensor: drop silent
Like its EV3 counterpart, this does not work reliably enough, so remove.
2020-05-27 13:58:30 +02:00
Laurens Valk e0ac54ec0a api/pupdevices/ForceSensor: add methods 2020-05-27 13:58:30 +02:00
Laurens Valk 8273c00881 api/pupdevices/UltrasonicSensor: add methods
This is identical to the EV3 Ultrasonic Sensor methods.
2020-05-27 13:58:30 +02:00
Laurens Valk 4da7b456bb api/pupdevices: initial color sensor hsv api
Provide a simple yet powerful way to calibrate the color() method.
2020-05-27 13:58:30 +02:00
Laurens Valk 7498751ee3 doc/pupdevices: add diagrams with light indices
Make this clear once and for all.
This order comes from the sensor itself.
2020-05-27 13:58:30 +02:00
Laurens Valk a8b0306afe doc/pupdevices: flip ultrasonic sensor diagram 2020-05-27 13:58:30 +02:00
Laurens Valk 2dd133d5e5 api/pupdevices: add ForceSensor
Initial class without any methods for the SPIKE Force Sensor
2020-05-27 13:58:30 +02:00
Laurens Valk e67c048b18 api/pupdevices: add UltrasonicSensor
Initial class without any methods for the SPIKE Ultrasonic Sensor
2020-05-27 13:58:30 +02:00
Laurens Valk 10b6808037 api/pupdevices: add ColorSensor
Initial class without any methods for the SPIKE Color Sensor
2020-05-27 13:58:30 +02:00
Laurens Valk 2d3e85f531 api/_common.LightArray: merge on and array method
Make it simpler with only one method to turn the lights on.
2020-05-27 13:58:30 +02:00
379 changed files with 12084 additions and 2820 deletions
+2
View File
@@ -0,0 +1,2 @@
github: [pybricks]
+38
View File
@@ -0,0 +1,38 @@
name: Release @pybricks/ide-docs
on:
push:
tags:
- '@pybricks/ide-docs/**'
jobs:
publish_ide_docs:
runs-on: ubuntu-20.04
steps:
- name: Ubuntu packages
run: |
sudo apt-get update
sudo apt-get install -y dvisvgm preview-latex-style texlive texlive-fonts-extra texlive-latex-extra
- uses: actions/checkout@v2
with:
submodules: recursive
- name: Set up Python 3.8
uses: actions/setup-python@v1
with:
python-version: 3.8
- name: Install dependencies
run: |
pip install poetry
poetry run python -m pip install --upgrade pip
poetry run python -m pip install --upgrade setuptools
poetry install
- uses: actions/setup-node@v1
with:
node-version: '14.x'
registry-url: 'https://registry.npmjs.org'
- run: yarn build
working-directory: doc/ide
- run: yarn publish
working-directory: doc/ide
env:
NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }}
+9 -3
View File
@@ -8,7 +8,7 @@ on: [ push, pull_request ]
jobs:
build:
runs-on: ubuntu-latest
runs-on: ubuntu-20.04
strategy:
matrix:
python-version: [3.8, 3.9]
@@ -32,6 +32,12 @@ jobs:
- name: Build package
run: poetry build
- name: Lint docs
run: poetry run doc8 --extension .inc
- name: Build html docs
run: poetry run doc8
- name: Build html docs for Read the Docs
run: poetry run make -C doc html
- name: Instal IDE docs dependencies
run: |
sudo apt-get update
sudo apt-get install dvisvgm preview-latex-style texlive texlive-fonts-extra texlive-latex-extra
- name: Build html docs for Pybricks Code IDE
run: poetry run make -C doc html SOURCEDIR=ide
-3
View File
@@ -1,6 +1,3 @@
[submodule "pybricks-projects"]
path = pybricks-projects
url = https://github.com/pybricks/pybricks-projects
[submodule "media/ev3dev-media"]
path = media/ev3dev-media
url = https://github.com/ev3dev/ev3dev-media.git
+1 -1
View File
@@ -15,7 +15,7 @@ builtins
cdot
Celcius
cityhub
cplushub
technichub
de
dev
en
+1 -1
View File
@@ -1,6 +1,6 @@
MIT License
Copyright (c) 2018-2020 The Pybricks Authors
Copyright (c) 2018-2021 The Pybricks Authors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
+3 -2
View File
@@ -6,8 +6,8 @@
import os
# General information about the project.
project = 'pybricks-micropython'
copyright = '2018-2020 The Pybricks Authors'
project = 'pybricks'
copyright = '2018-2021 The Pybricks Authors'
author = ''
_TITLE = 'Pybricks Modules and Examples'
@@ -15,6 +15,7 @@ _DISCLAIMER = 'LEGO, the LEGO logo, MINDSTORMS and the MINDSTORMS EV3 logo are\
trademarks and/or copyrights of the LEGO Group of companies \
which does not sponsor, authorize or endorse this site.'
html_favicon = '../common/images/favicon.ico'
html_logo = '../common/images/pybricks-logo-rtd.png'
latex_logo = '../common/images/pybricks-logo-large.png'
+12 -9
View File
@@ -1,11 +1,14 @@
0 Name: pupmotors
0 Name: hubs.ldr
0 Author: Pybricks {laurens@pybricks.com}
0 !LICENSE MIT
1 15 -420 -56 -250 1 0 0 0 1 0 0 0 1 26910.dat
1 15 10 -80 140 1 0 0 0 1 0 0 0 1 28738.dat
1 71 -270 -40 630 1 0 0 0 1 0 0 0 1 22127.dat
1 15 200 -96 600 -1 0 0 0 1 0 0 0 -1 28739.dat
1 15 470 -16 -90 1 0 0 0 1 0 0 0 1 45601p02.dat
1 15 -800 -40 360 1 0 0 0 1 0 0 0 1 95646c01.dat
1 15 -1160 32 -310 1 0 0 0 1 0 0 0 1 53788c01.dat
1 71 -1340 -40 430 1 0 0 0 1 0 0 0 1 87576c01.dat
0 ROTATION CENTER 0 0 0 1 "Custom"
0 ROTATION CONFIG 0 0
1 15 -20 -56 320 1 0 0 0 1 0 0 0 1 26910.dat
1 15 -330 -80 110 0 0 1 0 1 0 -1 0 0 28738.dat
1 71 -310 -40 390 1 0 0 0 1 0 0 0 1 22127.dat
1 15 260 -16 90 1 0 0 0 1 0 0 0 1 45601p02.dat
1 3 440 -16 10 1 0 0 0 1 0 0 0 1 45601c01.dat
1 3 780 -16 -310 1 0 0 0 1 0 0 0 1 45601c01.dat
1 15 -930 -40 360 1 0 0 0 1 0 0 0 1 95646c01.dat
1 15 -1490 32 350 1 0 0 0 1 0 0 0 1 53788c01.dat
0
+11
View File
@@ -0,0 +1,11 @@
0 Name: hubsoverview.ldr
0 Author: Pybricks {laurens@pybricks.com}
0 !LICENSE MIT
0 ROTATION CENTER 0 0 0 1 "Custom"
0 ROTATION CONFIG 0 0
1 15 90 -56 300 1 0 0 0 1 0 0 0 1 26910.dat
1 15 -150 -80 300 1 0 0 0 1 0 0 0 1 28738.dat
1 71 -360 -40 120 -1 0 0 0 1 0 0 0 -1 22127.dat
1 15 -160 -16 -40 1 0 0 0 1 0 0 0 1 45601p02.dat
1 3 50 -16 -140 1 0 0 0 1 0 0 0 1 45601c01.dat
0
+40
View File
@@ -0,0 +1,40 @@
0 Name: imu.ldr
0 Author: Pybricks {laurens@pybricks.com}
0 !LICENSE MIT
0 ROTATION CENTER 0 0 0 1 "Custom"
0 ROTATION CONFIG 0 0
1 3 -80 -20 160 0 0 1 0 1 0 -1 0 0 45601c01.dat
1 322 0 20 70 1 0 0 0 1 0 0 0 1 39367p01.dat
1 322 -160 20 70 1 0 0 0 1 0 0 0 1 39367p01.dat
1 322 0 20 250 1 0 0 0 1 0 0 0 1 39367p01.dat
1 322 -160 20 250 1 0 0 0 1 0 0 0 1 39367p01.dat
0 WRITE Type in the comment
1 3 720 -80 170 0 0 -1 0 -1 0 -1 0 0 45601c01.dat
1 322 800 20 80 1 0 0 0 1 0 0 0 1 39367p01.dat
1 322 640 20 80 1 0 0 0 1 0 0 0 1 39367p01.dat
1 322 800 20 260 1 0 0 0 1 0 0 0 1 39367p01.dat
1 322 640 20 260 1 0 0 0 1 0 0 0 1 39367p01.dat
0 WRITE Type in the comment
1 3 720 -70 -630 0 1 0 0 0 -1 -1 0 0 45601c01.dat
1 322 770 20 -720 1 0 0 0 1 0 0 0 1 39367p01.dat
1 322 610 20 -720 1 0 0 0 1 0 0 0 1 39367p01.dat
1 322 770 20 -540 1 0 0 0 1 0 0 0 1 39367p01.dat
1 322 610 20 -540 1 0 0 0 1 0 0 0 1 39367p01.dat
0 WRITE Type in the comment
0 WRITE Type in the comment
0 MLCAD BTG Group name
1 71 -230 60 -780 0 0 1 -1 0 0 0 -1 0 55615.dat
0 MLCAD BTG Group name
1 4 -90 60 -800 0 0 1 -1 0 0 0 -1 0 32278.dat
0 MLCAD BTG Group name
1 2 -250 60 -640 0 1 0 -1 0 0 0 0 1 32278.dat
0 MLCAD BTG Group name
1 71 -230 40 -780 0 0 1 0 1 0 -1 0 0 55615.dat
0 MLCAD BTG Group name
1 1 -250 -100 -780 0 1 0 0 0 -1 -1 0 0 32278.dat
0 GROUP 5 Group name
1 15 -20 90 -570 0 0 -1 0 -1 0 -1 0 0 3811.dat
1 15 720 90 -570 0 0 -1 0 -1 0 -1 0 0 3811.dat
1 15 -30 90 190 0 0 -1 0 -1 0 -1 0 0 3811.dat
1 15 720 90 190 0 0 -1 0 -1 0 -1 0 0 3811.dat
0
Binary file not shown.

After

Width:  |  Height:  |  Size: 654 KiB

+412
View File
@@ -0,0 +1,412 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="svg2"
width="1250"
height="720"
viewBox="0 0 1250 720"
sodipodi:docname="imuexamples.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<image
sodipodi:absref="imuexamples.png"
xlink:href="imuexamples.png"
y="0"
x="0"
id="image872"
preserveAspectRatio="none"
height="720"
width="1250.0001"
style="stroke-width:3.19999957" />
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs6">
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker8272"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path8270"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="marker6790"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path6788"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker5128"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:collect="always">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path5126"
inkscape:connector-curvature="0" />
</marker>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath860">
<rect
style="fill:#6ab0de;fill-opacity:1;stroke:#6ab0de;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect862"
width="589.10107"
height="96.333336"
x="235.33333"
y="-236.00002" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath1040">
<rect
style="fill:#1e1e1e;fill-opacity:1;stroke:none;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect1042"
width="128.5101"
height="19.934668"
x="827.15656"
y="74.666672" />
</clipPath>
</defs>
<sodipodi:namedview
pagecolor="#fcfcfc"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:window-width="1853"
inkscape:window-height="1145"
id="namedview4"
showgrid="false"
inkscape:zoom="0.75000002"
inkscape:cx="643.10407"
inkscape:cy="459.26885"
inkscape:window-x="67"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
inkscape:snap-global="false" />
<rect
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1090"
width="88.926552"
height="42.092525"
x="415.71399"
y="513.96191" />
<rect
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1092"
width="88.926552"
height="4"
x="415.71399"
y="513.96191" />
<text
id="text1096"
y="544.38055"
x="423.85089"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="544.38055"
x="423.85089"
id="tspan1094"
sodipodi:role="line">Y: Left</tspan></text>
<rect
y="519.35236"
x="773.67474"
height="42.092525"
width="148.7303"
id="rect875"
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
y="519.35236"
x="773.67474"
height="4"
width="148.7303"
id="rect877"
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
x="783.47827"
y="549.93768"
id="text881"><tspan
sodipodi:role="line"
id="tspan879"
x="783.47827"
y="549.93768"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054">X: Forward</tspan></text>
<rect
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect883"
width="84.926552"
height="42.092525"
x="613.005"
y="435.9295" />
<rect
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect885"
width="84.926552"
height="4"
x="613.005"
y="435.9295" />
<text
id="text889"
y="466.51483"
x="626.14191"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="466.51483"
x="626.14191"
id="tspan887"
sodipodi:role="line">Z: Up</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path4694"
d="M 814.16733,68.128379 C 812.90144,125.87929 718.05656,283.01422 674.91202,173.29441"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<rect
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4696"
width="224.77599"
height="42.092525"
x="746.64636"
y="31.371185" />
<rect
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4698"
width="224.77599"
height="4"
x="746.64636"
y="31.371185" />
<text
id="text4702"
y="61.956482"
x="756.44995"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="61.956482"
x="756.44995"
id="tspan4700"
sodipodi:role="line">top_side = -Axis.Z</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 588.78088,131.62753 C 602.71447,261.13607 408.36126,182.49627 438.30137,83.694259"
id="path4704"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<rect
y="46.682903"
x="354.89914"
height="42.092525"
width="244.42542"
id="rect4684"
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
y="46.682903"
x="354.89914"
height="4"
width="244.42542"
id="rect4686"
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
x="364.70273"
y="77.268227"
id="text4690"><tspan
sodipodi:role="line"
id="tspan4688"
x="364.70273"
y="77.268227"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054">front_side = -Axis.X</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path4716"
d="m 980.70246,244.86037 c 22.58974,-82.56389 91.04754,17.95479 125.63244,-75.14241"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<rect
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4718"
width="232.75874"
height="42.092525"
x="1002.7154"
y="152.06769" />
<rect
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4720"
width="232.75874"
height="4"
x="1002.7154"
y="152.06769" />
<text
id="text4724"
y="182.65302"
x="1012.519"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="182.65302"
x="1012.519"
id="tspan4722"
sodipodi:role="line">front_side = Axis.Z</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path4736"
d="M 1032.9329,450.74191 C 947.09947,493.10021 907.59636,422.33393 942.18123,329.23673"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<rect
y="431.80176"
x="1020.7235"
height="42.092525"
width="223.09496"
id="rect4728"
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
y="431.80176"
x="1020.7235"
height="4"
width="223.09496"
id="rect4730"
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
x="1028.8771"
y="462.38702"
id="text4734"><tspan
sodipodi:role="line"
id="tspan4732"
x="1028.8771"
y="462.38702"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054">top_side = -Axis.X</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 281.59646,261.93718 c -22.58969,-82.56389 -41.04752,14.62146 -75.63239,-78.47574"
id="path4738"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<rect
y="167.09308"
x="109.27574"
height="42.092525"
width="215.38545"
id="rect4740"
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
y="167.09308"
x="109.27574"
height="4"
width="215.38545"
id="rect4742"
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
x="119.07937"
y="197.67841"
id="text4746"><tspan
sodipodi:role="line"
id="tspan4744"
x="119.07937"
y="197.67841"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054">top_side = Axis.Z</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path4758"
d="m 420.02759,339.6125 c 9.12433,-59.47413 -33.03745,-120.40753 -79.74207,-81.45106"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<rect
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4750"
width="234.44266"
height="42.092525"
x="404.79791"
y="314.1073" />
<rect
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4752"
width="234.44266"
height="4"
x="404.79791"
y="314.1073" />
<text
id="text4756"
y="344.69263"
x="414.6015"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="344.69263"
x="414.6015"
id="tspan4754"
sodipodi:role="line">front_side = Axis.X</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5128)"
d="M 601.65481,535.63708 V 437.18765"
id="path5118"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
inkscape:connector-curvature="0"
id="path6786"
d="M 736.87546,624.06352 822.93347,573.9822"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker6790)" />
<path
style="fill:none;stroke:#000000;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker8272)"
d="M 528.06103,622.66606 432.1922,566.71727"
id="path8268"
inkscape:connector-curvature="0" />
</svg>

After

Width:  |  Height:  |  Size: 18 KiB

+12
View File
@@ -0,0 +1,12 @@
0 Name: orientation.ldr
0 Author: Pybricks {laurens@pybricks.com}
0 !LICENSE MIT
0 ROTATION CENTER 0 0 0 1 "Custom"
0 ROTATION CONFIG 0 0
1 15 -160 -56 260 0 0 1 0 1 0 -1 0 0 26910.dat
1 71 -430 -40 520 0 0 -1 0 1 0 1 0 0 22127.dat
1 15 140 -16 30 0 0 1 0 1 0 -1 0 0 45601p02.dat
1 3 430 -16 -180 0 0 1 0 1 0 -1 0 0 45601c01.dat
1 0 724 -90 -378 0 0 -1 0 -1 0 -1 0 0 u9218c01.dat
1 15 760 -100 -378 1 0 0 0 1 0 0 0 1 20841.dat
0
Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

@@ -0,0 +1,269 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="svg2"
width="600"
height="450"
viewBox="0 0 600 450"
sodipodi:docname="orientation_inventorhub.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs6">
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath860">
<rect
style="fill:#6ab0de;fill-opacity:1;stroke:#6ab0de;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect862"
width="589.10107"
height="96.333336"
x="235.33333"
y="-236.00002" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath1040">
<rect
style="fill:#1e1e1e;fill-opacity:1;stroke:none;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect1042"
width="128.5101"
height="19.934668"
x="827.15656"
y="74.666672" />
</clipPath>
</defs>
<sodipodi:namedview
pagecolor="#fcfcfc"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:window-width="1853"
inkscape:window-height="1145"
id="namedview4"
showgrid="false"
inkscape:zoom="1.0606602"
inkscape:cx="333.28458"
inkscape:cy="169.50072"
inkscape:window-x="67"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
inkscape:snap-global="false" />
<rect
style="fill:#fcfcfc;fill-opacity:1;stroke:none;stroke-width:1.13385832;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1"
id="rect844"
width="600"
height="450"
x="0"
y="0" />
<image
sodipodi:absref="orientation_inventorhub.png"
xlink:href="orientation_inventorhub.png"
y="48.001614"
x="101.28084"
id="image999"
preserveAspectRatio="none"
height="338.39999"
width="360"
style="stroke-width:1.25" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 176.58676,175.20729 110.16176,79.35702 99.66667,-78 -102.66667,-76.666662 z"
id="path1112"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<rect
y="237.61398"
x="378.28824"
height="42.092525"
width="92.709976"
id="rect1046"
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
y="237.61398"
x="378.28824"
height="4"
width="92.709976"
id="rect1048"
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
x="388.25851"
y="268.19931"
id="text1052"><tspan
sodipodi:role="line"
id="tspan1050"
x="388.25851"
y="268.19931"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054">RIGHT</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path1056"
d="M 409.20157,108.45455 C 426.1171,112.8 410.02912,48.247438 452.86824,50.454538"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<rect
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1058"
width="99.939941"
height="42.092525"
x="450.50766"
y="27.638273" />
<rect
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1060"
width="99.939941"
height="4"
x="450.50766"
y="27.638273" />
<text
id="text1064"
y="58.223598"
x="460.47794"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="58.223598"
x="460.47794"
id="tspan1062"
sodipodi:role="line">FRONT</tspan></text>
<rect
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.24119687;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1068"
width="88.709984"
height="42.092525"
x="74.64743"
y="289.41293" />
<rect
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.24119687;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1070"
width="88.709984"
height="4"
x="74.64743"
y="289.41293" />
<text
id="text1074"
y="319.99826"
x="84.647736"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="319.99826"
x="84.647736"
id="tspan1072"
sodipodi:role="line">BACK</tspan></text>
<rect
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1078"
width="67.413025"
height="42.092525"
x="254.93002"
y="151.108" />
<rect
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1080"
width="67.413025"
height="4"
x="254.93002"
y="151.108" />
<text
id="text1084"
y="181.69333"
x="264.9003"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="181.69333"
x="264.9003"
id="tspan1082"
sodipodi:role="line">TOP</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 214.04234,123.11631 c -16.91553,4.34545 -0.82755,-60.207112 -43.66667,-58.000012"
id="path1088"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<rect
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1090"
width="80.376648"
height="42.092525"
x="96.597748"
y="43.11636" />
<rect
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1092"
width="80.376648"
height="4"
x="96.597748"
y="43.11636" />
<text
id="text1096"
y="73.701691"
x="106.40134"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="73.701691"
x="106.40134"
id="tspan1094"
sodipodi:role="line">LEFT</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 332.37499,402.3481 C 301.57806,421.60983 193.9783,440.31402 214.86196,371.07607"
id="path1100"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<rect
y="377.55441"
x="320.28799"
height="42.092525"
width="122.20998"
id="rect1102"
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.52250361;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
y="377.55441"
x="320.28799"
height="4"
width="122.20998"
id="rect1104"
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.52250361;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
x="330.9249"
y="408.13974"
id="text1108"><tspan
sodipodi:role="line"
id="tspan1106"
x="330.9249"
y="408.13974"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054">BOTTOM</tspan></text>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

@@ -0,0 +1,263 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="svg2"
width="600"
height="450"
viewBox="0 0 600 450"
sodipodi:docname="orientation_movehub.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs6">
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath860">
<rect
style="fill:#6ab0de;fill-opacity:1;stroke:#6ab0de;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect862"
width="589.10107"
height="96.333336"
x="235.33333"
y="-236.00002" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath1040">
<rect
style="fill:#1e1e1e;fill-opacity:1;stroke:none;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect1042"
width="128.5101"
height="19.934668"
x="827.15656"
y="74.666672" />
</clipPath>
</defs>
<sodipodi:namedview
pagecolor="#fcfcfc"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1172"
id="namedview4"
showgrid="false"
inkscape:zoom="1.5"
inkscape:cx="207.51304"
inkscape:cy="268.59606"
inkscape:window-x="1920"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
inkscape:snap-global="false" />
<rect
style="fill:#fcfcfc;fill-opacity:1;stroke:none;stroke-width:1.13385832;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1"
id="rect844"
width="600"
height="450"
x="0"
y="0" />
<image
sodipodi:absref="orientation_movehub.png"
xlink:href="orientation_movehub.png"
style="stroke-width:1.25"
width="463.20001"
height="402.39999"
preserveAspectRatio="none"
id="image1010"
x="15.085896"
y="11.234114" />
<rect
y="210.2413"
x="361.42303"
height="42.092525"
width="90.876648"
id="rect1198"
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
y="210.2413"
x="361.42303"
height="4"
width="90.876648"
id="rect1200"
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
x="370.06"
y="240.82661"
id="text1204"><tspan
sodipodi:role="line"
id="tspan1202"
x="370.06"
y="240.82661"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054">RIGHT</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path1208"
d="m 453.0864,92.872824 c 16.9155,4.34545 0.8275,-60.207095 43.6666,-57.999995"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<rect
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1210"
width="103.04331"
height="42.092525"
x="494.39255"
y="12.056505" />
<rect
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1212"
width="103.04331"
height="4"
x="494.39255"
y="12.056505" />
<text
id="text1216"
y="42.641838"
x="505.36276"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="42.641838"
x="505.36276"
id="tspan1214"
sodipodi:role="line">FRONT</tspan></text>
<rect
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.24119687;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1220"
width="88.709984"
height="42.092525"
x="9.1156197"
y="321.3736" />
<rect
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.24119687;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1222"
width="88.709984"
height="4"
x="9.1156197"
y="321.3736" />
<text
id="text1226"
y="351.95892"
x="21.119404"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="351.95892"
x="21.119404"
id="tspan1224"
sodipodi:role="line">BACK</tspan></text>
<rect
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1230"
width="67.413025"
height="42.092525"
x="185.39822"
y="160.40205" />
<rect
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1232"
width="67.413025"
height="4"
x="185.39822"
y="160.40205" />
<text
id="text1236"
y="190.98738"
x="195.36848"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="190.98738"
x="195.36848"
id="tspan1234"
sodipodi:role="line">TOP</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 213.14372,122.85522 c -16.91553,4.34545 -0.82755,-60.207091 -43.66667,-57.999991"
id="path1240"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<rect
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1242"
width="80.376648"
height="42.092525"
x="95.699127"
y="42.85524" />
<rect
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1244"
width="80.376648"
height="4"
x="95.699127"
y="42.85524" />
<text
id="text1248"
y="73.440567"
x="106.52438"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="73.440567"
x="106.52438"
id="tspan1246"
sodipodi:role="line">LEFT</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 223.05333,425.42158 C 192.2564,444.68328 84.656638,463.38748 105.5403,394.14948"
id="path1252"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<rect
y="400.62772"
x="210.96632"
height="42.092525"
width="122.8654"
id="rect1254"
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.52250361;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
y="400.62772"
x="210.96632"
height="4"
width="122.8654"
id="rect1256"
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.52250361;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
x="222.49867"
y="431.21304"
id="text1260"><tspan
sodipodi:role="line"
id="tspan1258"
x="222.49867"
y="431.21304"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054">BOTTOM</tspan></text>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

@@ -0,0 +1,269 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="svg2"
width="600"
height="450"
viewBox="0 0 600 450"
sodipodi:docname="orientation_primehub.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs6">
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath860">
<rect
style="fill:#6ab0de;fill-opacity:1;stroke:#6ab0de;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect862"
width="589.10107"
height="96.333336"
x="235.33333"
y="-236.00002" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath1040">
<rect
style="fill:#1e1e1e;fill-opacity:1;stroke:none;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect1042"
width="128.5101"
height="19.934668"
x="827.15656"
y="74.666672" />
</clipPath>
</defs>
<sodipodi:namedview
pagecolor="#fcfcfc"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1172"
id="namedview4"
showgrid="false"
inkscape:zoom="0.75000002"
inkscape:cx="728.73773"
inkscape:cy="159.45867"
inkscape:window-x="1920"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
inkscape:snap-global="false" />
<rect
style="fill:#fcfcfc;fill-opacity:1;stroke:none;stroke-width:1.13385832;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1"
id="rect844"
width="600"
height="450"
x="0"
y="0" />
<image
sodipodi:absref="orientation_primehub.png"
xlink:href="orientation_primehub.png"
y="48.382168"
x="100.66959"
id="image1021"
preserveAspectRatio="none"
height="338.39999"
width="358.39999"
style="stroke-width:1.25" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 176.58676,175.20729 110.16176,79.35702 99.66667,-78 -102.66667,-76.666662 z"
id="path1112"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<rect
y="237.61398"
x="378.28824"
height="42.092525"
width="92.709976"
id="rect1046"
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
y="237.61398"
x="378.28824"
height="4"
width="92.709976"
id="rect1048"
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
x="388.25851"
y="268.19931"
id="text1052"><tspan
sodipodi:role="line"
id="tspan1050"
x="388.25851"
y="268.19931"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054">RIGHT</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path1056"
d="M 409.20157,108.45455 C 426.1171,112.8 410.02912,48.247438 452.86824,50.454538"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<rect
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1058"
width="99.939941"
height="42.092525"
x="450.50766"
y="27.638273" />
<rect
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1060"
width="99.939941"
height="4"
x="450.50766"
y="27.638273" />
<text
id="text1064"
y="58.223598"
x="460.47794"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="58.223598"
x="460.47794"
id="tspan1062"
sodipodi:role="line">FRONT</tspan></text>
<rect
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.24119687;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1068"
width="88.709984"
height="42.092525"
x="74.64743"
y="289.41293" />
<rect
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.24119687;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1070"
width="88.709984"
height="4"
x="74.64743"
y="289.41293" />
<text
id="text1074"
y="319.99826"
x="84.647736"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="319.99826"
x="84.647736"
id="tspan1072"
sodipodi:role="line">BACK</tspan></text>
<rect
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1078"
width="67.413025"
height="42.092525"
x="254.93002"
y="151.108" />
<rect
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1080"
width="67.413025"
height="4"
x="254.93002"
y="151.108" />
<text
id="text1084"
y="181.69333"
x="264.9003"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="181.69333"
x="264.9003"
id="tspan1082"
sodipodi:role="line">TOP</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 214.04234,123.11631 c -16.91553,4.34545 -0.82755,-60.207112 -43.66667,-58.000012"
id="path1088"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<rect
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1090"
width="80.376648"
height="42.092525"
x="96.597748"
y="43.11636" />
<rect
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1092"
width="80.376648"
height="4"
x="96.597748"
y="43.11636" />
<text
id="text1096"
y="73.701691"
x="106.40134"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="73.701691"
x="106.40134"
id="tspan1094"
sodipodi:role="line">LEFT</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 332.37499,402.3481 C 301.57806,421.60983 193.9783,440.31402 214.86196,371.07607"
id="path1100"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<rect
y="377.55441"
x="320.28799"
height="42.092525"
width="122.20998"
id="rect1102"
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.52250361;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
y="377.55441"
x="320.28799"
height="4"
width="122.20998"
id="rect1104"
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.52250361;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
x="330.9249"
y="408.13974"
id="text1108"><tspan
sodipodi:role="line"
id="tspan1106"
x="330.9249"
y="408.13974"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054">BOTTOM</tspan></text>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

@@ -0,0 +1,263 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="svg2"
width="600"
height="450"
viewBox="0 0 600 450"
sodipodi:docname="orientation_technichub.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs6">
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath860">
<rect
style="fill:#6ab0de;fill-opacity:1;stroke:#6ab0de;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect862"
width="589.10107"
height="96.333336"
x="235.33333"
y="-236.00002" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath1040">
<rect
style="fill:#1e1e1e;fill-opacity:1;stroke:none;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect1042"
width="128.5101"
height="19.934668"
x="827.15656"
y="74.666672" />
</clipPath>
</defs>
<sodipodi:namedview
pagecolor="#fcfcfc"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1172"
id="namedview4"
showgrid="false"
inkscape:zoom="1.0606602"
inkscape:cx="288.44009"
inkscape:cy="242.25201"
inkscape:window-x="1920"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
inkscape:snap-global="false" />
<rect
style="fill:#fcfcfc;fill-opacity:1;stroke:none;stroke-width:1.13385832;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1"
id="rect844"
width="600"
height="450"
x="0"
y="0" />
<image
sodipodi:absref="orientation_technichub.png"
xlink:href="orientation_technichub.png"
style="stroke-width:1.25"
width="359.20001"
height="323.20001"
preserveAspectRatio="none"
id="image870"
x="95.0215"
y="66.343895" />
<rect
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect873"
width="94.047379"
height="42.092525"
x="369.40115"
y="235.02014" />
<rect
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect875"
width="94.047379"
height="4"
x="369.40115"
y="235.02014" />
<text
id="text879"
y="265.60547"
x="379.37143"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="265.60547"
x="379.37143"
id="tspan877"
sodipodi:role="line">RIGHT</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 397.89738,128.77907 c 16.91553,4.34545 0.82755,-60.207095 43.66667,-57.999995"
id="path889"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<rect
y="47.962753"
x="439.20349"
height="42.092525"
width="99.704239"
id="rect881"
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
y="47.962753"
x="439.20349"
height="4"
width="99.704239"
id="rect883"
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
x="449.17377"
y="78.54808"
id="text887"><tspan
sodipodi:role="line"
id="tspan885"
x="449.17377"
y="78.54808"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054">FRONT</tspan></text>
<rect
y="272.67694"
x="108.42245"
height="42.092525"
width="88.709984"
id="rect961"
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.24119687;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
y="272.67694"
x="108.42245"
height="4"
width="88.709984"
id="rect963"
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.24119687;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
x="123.72604"
y="303.26227"
id="text967"><tspan
sodipodi:role="line"
id="tspan965"
x="123.72604"
y="303.26227"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054">BACK</tspan></text>
<rect
y="157.47092"
x="232.60791"
height="42.092525"
width="67.413025"
id="rect4648"
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
y="157.47092"
x="232.60791"
height="4"
width="67.413025"
id="rect4650"
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
x="243.7567"
y="188.05624"
id="text4654"><tspan
sodipodi:role="line"
id="tspan4652"
x="243.7567"
y="188.05624"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054">TOP</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path987"
d="m 218.40482,122.94083 c -16.91553,4.34545 -0.82755,-60.207095 -43.66667,-57.999995"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<rect
y="42.940842"
x="100.96023"
height="42.092525"
width="80.376648"
id="rect932"
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
y="42.940842"
x="100.96023"
height="4"
width="80.376648"
id="rect934"
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
x="113.1997"
y="73.526169"
id="text938"><tspan
sodipodi:role="line"
id="tspan936"
x="113.1997"
y="73.526169"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054">LEFT</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path1114"
d="m 352.17398,396.21985 c -30.79693,19.2617 -138.39669,37.9659 -117.51303,-31.272"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<rect
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.52250361;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1116"
width="117.09069"
height="42.092525"
x="340.08701"
y="371.42603" />
<rect
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.52250361;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1118"
width="117.09069"
height="4"
x="340.08701"
y="371.42603" />
<text
id="text1122"
y="402.01135"
x="349.49805"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="402.01135"
x="349.49805"
id="tspan1120"
sodipodi:role="line">BOTTOM</tspan></text>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

@@ -0,0 +1,269 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="svg2"
width="600"
height="450"
viewBox="0 0 600 450"
sodipodi:docname="orientation_tiltsensor.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs6">
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath860">
<rect
style="fill:#6ab0de;fill-opacity:1;stroke:#6ab0de;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect862"
width="589.10107"
height="96.333336"
x="235.33333"
y="-236.00002" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath1040">
<rect
style="fill:#1e1e1e;fill-opacity:1;stroke:none;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect1042"
width="128.5101"
height="19.934668"
x="827.15656"
y="74.666672" />
</clipPath>
</defs>
<sodipodi:namedview
pagecolor="#fcfcfc"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1172"
id="namedview4"
showgrid="false"
inkscape:zoom="1.0606602"
inkscape:cx="329.73302"
inkscape:cy="132.75133"
inkscape:window-x="1920"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
inkscape:snap-global="false" />
<rect
style="fill:#fcfcfc;fill-opacity:1;stroke:none;stroke-width:1.13385832;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1"
id="rect844"
width="600"
height="450"
x="0"
y="0" />
<image
sodipodi:absref="orientation_tiltsensor.png"
xlink:href="orientation_tiltsensor.png"
y="98.870911"
x="99.318779"
id="image1043"
preserveAspectRatio="none"
height="278.62332"
width="264.25601"
style="stroke-width:1.94886804" />
<rect
y="151.37714"
x="349.25064"
height="42.092525"
width="88.709976"
id="rect1266"
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
y="151.37714"
x="349.25064"
height="4"
width="88.709976"
id="rect1268"
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
x="356.72086"
y="181.96249"
id="text1272"><tspan
sodipodi:role="line"
id="tspan1270"
x="356.72086"
y="181.96249"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054">RIGHT</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path1276"
d="m 352.16392,122.88432 c 16.9155,4.34545 0.8275,-60.207107 43.6666,-58.000007"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<rect
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1278"
width="96.876648"
height="42.092525"
x="393.46988"
y="42.068047" />
<rect
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1280"
width="96.876648"
height="4"
x="393.46988"
y="42.068047" />
<text
id="text1284"
y="72.653381"
x="401.27359"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="72.653381"
x="401.27359"
id="tspan1282"
sodipodi:role="line">FRONT</tspan></text>
<rect
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1298"
width="53.967594"
height="42.092525"
x="279.03238"
y="98.204475" />
<rect
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1300"
width="53.967594"
height="4"
x="279.03238"
y="98.204475" />
<text
id="text1304"
y="128.78979"
x="283.19595"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="128.78979"
x="283.19595"
id="tspan1302"
sodipodi:role="line">TOP</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 260.67132,140.21275 c -16.9155,4.34545 -0.8275,-60.207108 -43.6666,-58.000008"
id="path1308"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<rect
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1310"
width="75.544754"
height="42.092525"
x="148.05865"
y="60.212769" />
<rect
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1312"
width="75.544754"
height="4"
x="148.05865"
y="60.212769" />
<text
id="text1316"
y="90.798088"
x="156.17328"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="90.798088"
x="156.17328"
id="tspan1314"
sodipodi:role="line">LEFT</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 408.00402,238.77787 c -30.7969,19.26173 -138.2788,38.90873 -117.3951,-30.32922"
id="path1320"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<rect
y="213.98419"
x="395.91714"
height="42.092525"
width="119.87664"
id="rect1322"
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.52250361;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
y="213.98419"
x="395.91714"
height="4"
width="119.87664"
id="rect1324"
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.52250361;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
x="404.72061"
y="244.56952"
id="text1328"><tspan
sodipodi:role="line"
id="tspan1326"
x="404.72061"
y="244.56952"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054">BOTTOM</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path1332"
d="m 237.12342,170.915 c -20.5212,19.15467 -39.4653,3.18452 -66.9567,32.8243"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<rect
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.24119687;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1288"
width="88.709984"
height="42.092525"
x="103.77959"
y="169.67621" />
<rect
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.24119687;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1290"
width="88.709984"
height="4"
x="103.77959"
y="169.67621" />
<text
id="text1294"
y="200.26154"
x="115.41656"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="200.26154"
x="115.41656"
id="tspan1292"
sodipodi:role="line">BACK</tspan></text>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

+256
View File
@@ -0,0 +1,256 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="svg2"
width="450"
height="450"
viewBox="0 0 450 450"
sodipodi:docname="primehub_buttons.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs6">
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath860">
<rect
style="fill:#6ab0de;fill-opacity:1;stroke:#6ab0de;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect862"
width="589.10107"
height="96.333336"
x="235.33333"
y="-236.00002" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath1040">
<rect
style="fill:#1e1e1e;fill-opacity:1;stroke:none;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect1042"
width="128.5101"
height="19.934668"
x="827.15656"
y="74.666672" />
</clipPath>
</defs>
<sodipodi:namedview
pagecolor="#fcfcfc"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1172"
id="namedview4"
showgrid="false"
inkscape:zoom="1.0606602"
inkscape:cx="264.34169"
inkscape:cy="315.96311"
inkscape:window-x="1920"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
inkscape:snap-global="false"
showguides="false" />
<rect
style="fill:#fcfcfc;fill-opacity:1;stroke:none;stroke-width:1.13385832;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1"
id="rect844"
width="450"
height="450"
x="0"
y="0" />
<g
id="g970"
transform="translate(17.441551,-18.065971)">
<image
sodipodi:absref="primehubtop.png"
xlink:href="primehubtop.png"
y="28.855242"
x="78.985664"
id="image853"
preserveAspectRatio="none"
height="386.06873"
width="244.9046"
style="stroke-width:3.63406801" />
<circle
r="19.625"
cy="80.700775"
cx="272.00305"
id="path856"
style="fill:none;fill-opacity:1;stroke:#d0d0d0;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1" />
<circle
style="fill:none;fill-opacity:1;stroke:#f4f4f4;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1"
id="circle858"
cx="272.00305"
cy="80.700775"
r="21.5" />
<rect
y="133.10596"
x="108.8772"
height="183.39523"
width="184.14073"
id="rect964"
style="fill:#f4f4f4;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1" />
</g>
<circle
style="fill:#f4f4f4;fill-opacity:1;stroke:#dddddd;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1"
id="path860"
cx="218.73126"
cy="345.19565"
r="32.29121" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 276.1665,59.318793 228.55465,27.616844"
id="path1036"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<g
id="g846"
transform="translate(-26.959225)">
<rect
y="2.5080223"
x="44.959225"
height="42.092525"
width="244.56721"
id="rect1038"
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333344;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
y="2.5080223"
x="44.959225"
height="4"
width="244.56721"
id="rect1040"
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333344;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
x="52.096157"
y="33.093319"
id="text1044"><tspan
sodipodi:role="line"
id="tspan1042"
x="52.096157"
y="33.093319"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054">Button.BLUETOOTH</tspan></text>
</g>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 217.75258,250.87782 v 96.66666"
id="path1058"
inkscape:connector-curvature="0" />
<rect
y="241.26053"
x="123.07694"
height="42.092525"
width="194.36263"
id="rect1050"
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333344;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
y="241.26053"
x="123.07694"
height="4"
width="194.36263"
id="rect1052"
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333344;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
x="130.21388"
y="271.84586"
id="text1056"><tspan
sodipodi:role="line"
id="tspan1054"
x="130.21388"
y="271.84586"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054">Button.CENTER</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 166.52786,347.04816 -35.28065,69.10991"
id="path893"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<g
id="g852"
transform="translate(7.1281185)">
<rect
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333344;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1073"
width="159.69595"
height="42.092525"
x="10.871881"
y="404.98434" />
<rect
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333344;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1075"
width="159.69595"
height="4"
x="10.871881"
y="404.98434" />
<text
id="text1079"
y="435.56967"
x="18.008812"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="435.56967"
x="18.008812"
id="tspan1077"
sodipodi:role="line">Button.LEFT</tspan></text>
</g>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path1081"
d="m 273.24721,347.04816 35.28065,69.10991"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<rect
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333344;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1061"
width="172.36263"
height="42.092525"
x="261.2052"
y="404.98434" />
<rect
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333344;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1063"
width="172.36263"
height="4"
x="261.2052"
y="404.98434" />
<text
id="text1067"
y="435.56967"
x="268.34213"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="435.56967"
x="268.34213"
id="tspan1065"
sodipodi:role="line">Button.RIGHT</tspan></text>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

+424
View File
@@ -0,0 +1,424 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="svg2"
width="450"
height="400"
viewBox="0 0 450 400"
sodipodi:docname="primehub_display.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs6">
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath860">
<rect
style="fill:#6ab0de;fill-opacity:1;stroke:#6ab0de;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect862"
width="589.10107"
height="96.333336"
x="235.33333"
y="-236.00002" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath1040">
<rect
style="fill:#1e1e1e;fill-opacity:1;stroke:none;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect1042"
width="128.5101"
height="19.934668"
x="827.15656"
y="74.666672" />
</clipPath>
</defs>
<sodipodi:namedview
pagecolor="#fcfcfc"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1172"
id="namedview4"
showgrid="false"
inkscape:zoom="1.5"
inkscape:cx="380.9636"
inkscape:cy="114.1086"
inkscape:window-x="1920"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
inkscape:snap-global="false"
showguides="false" />
<rect
style="fill:#fcfcfc;fill-opacity:1;stroke:none;stroke-width:1.13385832;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1"
id="rect844"
width="450"
height="400"
x="0"
y="0" />
<g
id="g970"
transform="translate(17.20585,-24.225357)">
<image
sodipodi:absref="primehubtop.png"
xlink:href="primehubtop.png"
y="28.855242"
x="78.985664"
id="image853"
preserveAspectRatio="none"
height="386.06873"
width="244.9046"
style="stroke-width:3.63406801" />
<circle
r="19.625"
cy="80.700775"
cx="272.00305"
id="path856"
style="fill:none;fill-opacity:1;stroke:#d0d0d0;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1" />
<circle
style="fill:none;fill-opacity:1;stroke:#f4f4f4;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1"
id="circle858"
cx="272.00305"
cy="80.700775"
r="21.5" />
<rect
y="133.10596"
x="108.8772"
height="183.39523"
width="184.14073"
id="rect964"
style="fill:#f4f4f4;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1" />
</g>
<circle
style="fill:#f4f4f4;fill-opacity:1;stroke:#dddddd;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1"
id="path860"
cx="218.49556"
cy="339.03625"
r="32.29121" />
<rect
y="113.78788"
x="241.52562"
height="26.547276"
width="28.4128"
id="rect874"
style="fill:#ffec6c;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1" />
<rect
style="fill:#ffec6c;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1"
id="rect876"
width="28.4128"
height="26.547276"
x="241.52562"
y="149.18375" />
<rect
y="184.57956"
x="241.52562"
height="26.547276"
width="28.4128"
id="rect878"
style="fill:#ffec6c;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1" />
<rect
style="fill:#ffec6c;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1"
id="rect880"
width="28.4128"
height="26.547276"
x="241.52562"
y="219.97539" />
<rect
y="255.37122"
x="241.52562"
height="26.547276"
width="28.4128"
id="rect882"
style="fill:#ffec6c;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1" />
<rect
style="fill:#ffec6c;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1"
id="rect891"
width="28.4128"
height="26.547276"
x="278.60895"
y="113.78788" />
<rect
y="149.18375"
x="278.60895"
height="26.547276"
width="28.4128"
id="rect893"
style="fill:#ffec6c;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1" />
<rect
style="fill:#ffec6c;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1"
id="rect895"
width="28.4128"
height="26.547276"
x="278.60895"
y="184.57956" />
<rect
y="219.97539"
x="278.60895"
height="26.547276"
width="28.4128"
id="rect897"
style="fill:#ffec6c;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1" />
<rect
style="fill:#ffec6c;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1"
id="rect899"
width="28.4128"
height="26.547276"
x="278.60895"
y="255.37122" />
<rect
style="fill:#ffec6c;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1"
id="rect903"
width="28.4128"
height="26.547276"
x="130.27565"
y="113.78788" />
<rect
y="149.18375"
x="130.27565"
height="26.547276"
width="28.4128"
id="rect905"
style="fill:#ffec6c;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1" />
<rect
style="fill:#ffec6c;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1"
id="rect907"
width="28.4128"
height="26.547276"
x="130.27565"
y="184.57956" />
<rect
y="219.97539"
x="130.27565"
height="26.547276"
width="28.4128"
id="rect909"
style="fill:#ffec6c;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1" />
<rect
style="fill:#ffec6c;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1"
id="rect911"
width="28.4128"
height="26.547276"
x="130.27565"
y="255.37122" />
<rect
y="113.78788"
x="167.35896"
height="26.547276"
width="28.4128"
id="rect915"
style="fill:#ffec6c;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1" />
<rect
style="fill:#ffec6c;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1"
id="rect917"
width="28.4128"
height="26.547276"
x="167.35896"
y="149.18375" />
<rect
y="184.57956"
x="167.35896"
height="26.547276"
width="28.4128"
id="rect919"
style="fill:#ffec6c;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1" />
<rect
style="fill:#ffec6c;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1"
id="rect921"
width="28.4128"
height="26.547276"
x="167.35896"
y="219.97539" />
<rect
y="255.37122"
x="167.35896"
height="26.547276"
width="28.4128"
id="rect923"
style="fill:#ffec6c;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1" />
<rect
style="fill:#ffec6c;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1"
id="rect927"
width="28.4128"
height="26.547276"
x="204.44231"
y="113.78788" />
<rect
y="149.18375"
x="204.44231"
height="26.547276"
width="28.4128"
id="rect929"
style="fill:#ffec6c;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1" />
<rect
style="fill:#ffec6c;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1"
id="rect931"
width="28.4128"
height="26.547276"
x="204.44231"
y="184.57956" />
<rect
y="219.97539"
x="204.44231"
height="26.547276"
width="28.4128"
id="rect933"
style="fill:#ffec6c;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1" />
<rect
style="fill:#ffec6c;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1"
id="rect935"
width="28.4128"
height="26.547276"
x="204.44231"
y="255.37122" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 143.07085,125.96136 95.458999,94.259414"
id="path972"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<rect
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333344;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1058"
width="63.773277"
height="42.092525"
x="49.546856"
y="64.91291" />
<rect
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333344;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1060"
width="63.773277"
height="4"
x="49.546856"
y="64.91291" />
<text
id="text1064"
y="95.498222"
x="54.1838"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="95.498222"
x="54.1838"
id="tspan1062"
sodipodi:role="line">(0, 0)</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path974"
d="M 291.95856,125.96136 339.57041,94.259414"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<rect
y="64.91291"
x="320.7131"
height="42.092525"
width="63.773277"
id="rect976"
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333344;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
y="64.91291"
x="320.7131"
height="4"
width="63.773277"
id="rect978"
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333344;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
x="325.35004"
y="95.498222"
id="text982"><tspan
sodipodi:role="line"
id="tspan980"
x="325.35004"
y="95.498222"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054">(0, 4)</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 291.95856,270.25941 47.61185,31.70195"
id="path984"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<rect
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333344;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect986"
width="63.773277"
height="42.092525"
x="320.7131"
y="288.9325" />
<rect
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333344;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect988"
width="63.773277"
height="4"
x="320.7131"
y="288.9325" />
<text
id="text992"
y="319.51782"
x="325.35004"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="319.51782"
x="325.35004"
id="tspan990"
sodipodi:role="line">(4, 4)</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path1020"
d="M 143.07085,270.14558 95.458999,301.84753"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<rect
y="288.9325"
x="49.536201"
height="42.092525"
width="63.773277"
id="rect1012"
style="opacity:1;fill:#e7f2fa;fill-opacity:1;stroke:none;stroke-width:2.13333344;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:24.19441986px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
x="54.173134"
y="319.51782"
id="text1018"><tspan
sodipodi:role="line"
id="tspan1016"
x="54.173134"
y="319.51782"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054">(4, 0)</tspan></text>
<rect
y="288.93512"
x="49.546856"
height="4"
width="63.773277"
id="rect1022"
style="opacity:1;fill:#6ab0de;fill-opacity:1;stroke:none;stroke-width:2.13333344;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</svg>

After

Width:  |  Height:  |  Size: 18 KiB

+115
View File
@@ -0,0 +1,115 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="svg2"
width="450"
height="106"
viewBox="0 0 450 106"
sodipodi:docname="primehub_light.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs6">
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath860">
<rect
style="fill:#6ab0de;fill-opacity:1;stroke:#6ab0de;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect862"
width="589.10107"
height="96.333336"
x="235.33333"
y="-236.00002" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath1040">
<rect
style="fill:#1e1e1e;fill-opacity:1;stroke:none;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect1042"
width="128.5101"
height="19.934668"
x="827.15656"
y="74.666672" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath894">
<rect
style="fill:#d92626;fill-opacity:0.45762712;stroke:none;stroke-width:1.13385832;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1"
id="rect896"
width="298.05273"
height="138.83516"
x="69.762825"
y="296.87869" />
</clipPath>
</defs>
<sodipodi:namedview
pagecolor="#fcfcfc"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:window-width="1853"
inkscape:window-height="1145"
id="namedview4"
showgrid="false"
inkscape:zoom="0.70710678"
inkscape:cx="333.41863"
inkscape:cy="-328.9942"
inkscape:window-x="67"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
inkscape:snap-global="false"
showguides="false" />
<rect
style="fill:#fcfcfc;fill-opacity:1;stroke:none;stroke-width:1.13385844;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1"
id="rect844"
width="450"
height="106"
x="0"
y="0" />
<image
sodipodi:absref="primehubtop.png"
xlink:href="primehubtop.png"
style="stroke-width:3.63406801"
width="244.9046"
height="386.06873"
preserveAspectRatio="none"
id="image853"
x="96.427216"
y="16.477236"
clip-path="url(#clipPath894)"
transform="translate(-0.0475179,-296.61368)" />
<circle
style="fill:#3d83ff;fill-opacity:0.36312848;stroke:#2d95ff;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1"
id="path860"
cx="218.832"
cy="54.269928"
r="32.29121" />
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

@@ -0,0 +1,14 @@
0 Name: pupdevicesoverview.ldr
0 Author: Pybricks {laurens@pybricks.com}
0 !LICENSE MIT
0 ROTATION CENTER 0 0 0 1 "Custom"
0 ROTATION CONFIG 0 0
1 15 130 -280 500 0 1 0 -1 0 0 0 0 1 54675c01.dat
1 71 330 -280 300 0 1 0 -1 0 0 0 0 1 22169c01.dat
1 15 540 -280 220 1 0 0 0 1 0 0 0 1 21980c01.dat
1 15 560 -280 830 1 0 0 0 1 0 0 0 1 37316.dat
1 15 370 -280 990 -1 0 0 0 -1 0 0 0 1 37308c01.dat
1 15 750 -320 550 1 0 0 0 1 0 0 0 1 26912.dat
1 0 750 -310 586 -1 0 0 0 -1 0 0 0 1 u9218c01.dat
1 15 560 -266 808 -1 0 0 0 -1 0 0 0 1 u9218c01.dat
0
+10 -5
View File
@@ -1,8 +1,13 @@
0 Name: pupmotors
0 Name: pupmotors.ldr
0 Author: Pybricks {laurens@pybricks.com}
0 !LICENSE MIT
0 ROTATION CENTER 0 0 0 1 "Custom"
0 ROTATION CONFIG 0 0
1 15 430 -96 190 0 0 1 1 0 0 0 1 0 54675c01.dat
1 15 410 -72 30 0 0 1 1 0 0 0 1 0 54696c01.dat
1 71 230 -144 0 1 0 0 0 1 0 0 0 1 22169c01.dat
1 71 40 -216 0 1 0 0 0 1 0 0 0 1 22172c01.dat
1 15 -140 -320 80 1 0 0 0 1 0 0 0 1 26913c01.dat
1 15 430 -96 400 0 0 1 1 0 0 0 1 0 54675c01.dat
1 322 430 -72 30 0 0 1 1 0 0 0 1 0 54696c01.dat
1 71 430 -72 -180 0 0 1 1 0 0 0 1 0 54696c01.dat
1 71 190 -144 -180 1 0 0 0 1 0 0 0 1 22169c01.dat
1 71 -20 -216 -140 1 0 0 0 1 0 0 0 1 22172c01.dat
1 15 120 -320 160 1 0 0 0 1 0 0 0 1 26913c01.dat
0
Binary file not shown.

Before

Width:  |  Height:  |  Size: 576 KiB

After

Width:  |  Height:  |  Size: 866 KiB

+72 -16
View File
@@ -11,8 +11,8 @@
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="2000"
height="610"
viewBox="0 0 529.16666 161.39583"
height="1118"
viewBox="0 0 529.16666 295.80416"
version="1.1"
id="svg8"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
@@ -57,9 +57,9 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.49497475"
inkscape:cx="899.69341"
inkscape:cy="449.26412"
inkscape:zoom="0.35"
inkscape:cx="619.19211"
inkscape:cy="823.24691"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
@@ -87,18 +87,18 @@
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-135.60415)">
transform="translate(0,-1.1958167)">
<image
sodipodi:absref="pupmotors.png"
xlink:href="pupmotors.png"
y="135.60416"
x="-2.220446e-16"
id="image853"
width="529.16669"
height="295.80417"
preserveAspectRatio="none"
height="161.39583"
width="529.16669" />
id="image853"
x="-2.220446e-16"
y="1.1958181" />
<g
transform="matrix(1.9732825,0,0,1.9732825,-10.059646,-179.85595)"
transform="matrix(1.9732825,0,0,1.9732825,82.068314,-182.19652)"
id="g2717">
<g
transform="matrix(1,-0.27773651,0,1,59.387949,102.27922)"
@@ -123,7 +123,7 @@
</g>
<g
id="g2727"
transform="matrix(1.7059944,0,0,1.7059944,79.305221,-182.52003)">
transform="matrix(1.7059944,0,0,1.7059944,-18.326438,-250.00951)">
<g
style="fill:#2980b9;fill-opacity:1;stroke:#fffbfb;stroke-width:0.13229167;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="g2721"
@@ -147,7 +147,7 @@
sodipodi:nodetypes="ccccsc" />
</g>
<g
transform="matrix(1.7059944,0,0,1.7059944,125.04034,-119.77598)"
transform="matrix(1.7059944,0,0,1.7059944,40.772154,-187.53273)"
id="g2747">
<g
transform="matrix(1,-0.27773651,0,1,61.231459,102.02783)"
@@ -173,7 +173,7 @@
</g>
<g
id="g2757"
transform="matrix(1.9732825,0,0,1.9732825,-108.71143,-177.21012)">
transform="matrix(1.9732825,0,0,1.9732825,-63.81015,-178.54646)">
<g
style="fill:#2980b9;fill-opacity:1;stroke:#fffbfb;stroke-width:0.13229167;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="g2751"
@@ -196,7 +196,7 @@
style="fill:#2980b9;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
transform="matrix(1.9732825,0,0,1.9732825,-212.65488,-179.47797)"
transform="matrix(1.9732825,0,0,1.9732825,-192.3424,-182.95247)"
id="g2767">
<g
transform="matrix(1,-0.27773651,0,1,59.387949,102.27922)"
@@ -219,5 +219,61 @@
id="path2765"
inkscape:connector-curvature="0" />
</g>
<g
id="g874"
transform="matrix(1.9732825,0,0,1.9732825,-208.72093,-323.71573)">
<g
style="fill:#2980b9;fill-opacity:1;stroke:#fffbfb;stroke-width:0.13229167;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="g868"
transform="matrix(1,-0.27773651,0,1,59.387949,102.27922)">
<path
id="path866"
style="fill:#2980b9;fill-opacity:1;fill-rule:evenodd;stroke:#fffbfb;stroke-width:0.13229167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 107.60315,149.3339 -4.4195,12.01847 -4.419489,-12.01847 c 2.609269,1.92005 6.179199,1.90899 8.838989,0 z"
inkscape:connector-curvature="0" />
</g>
<path
inkscape:connector-curvature="0"
id="path870"
d="m 148.90956,215.29575 c -8.02867,2.89572 -14.60635,11.81219 -14.60635,19.93021 l 1.74541,-0.62952 c 0,-7.05178 5.7198,-14.86961 12.86094,-17.44522 7.14113,-2.57561 12.86094,1.11628 12.86094,8.16806 l 1.74541,-0.62952 c 0,-8.11802 -6.57768,-12.28973 -14.60635,-9.39401 z"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2980b9;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
id="path872"
d="m 161.70224,224.65346 1.85836,-0.53454 0.43431,0.40926 -0.98973,1.42822 c 0,0 -2.13398,-0.30486 -2.13398,-0.32574 0,-0.0209 0.83104,-0.9772 0.83104,-0.9772 z"
style="fill:#2980b9;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
transform="matrix(1.9732825,0,0,1.9732825,-134.6376,-374.36454)"
id="g884">
<g
transform="matrix(1,-0.27773651,0,1,59.387949,102.27922)"
id="g878"
style="fill:#2980b9;fill-opacity:1;stroke:#fffbfb;stroke-width:0.13229167;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
<path
inkscape:connector-curvature="0"
d="m 107.60315,149.3339 -4.4195,12.01847 -4.419489,-12.01847 c 2.609269,1.92005 6.179199,1.90899 8.838989,0 z"
style="fill:#2980b9;fill-opacity:1;fill-rule:evenodd;stroke:#fffbfb;stroke-width:0.13229167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path876" />
</g>
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2980b9;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 148.90956,215.29575 c -8.02867,2.89572 -14.60635,11.81219 -14.60635,19.93021 l 1.74541,-0.62952 c 0,-7.05178 5.7198,-14.86961 12.86094,-17.44522 7.14113,-2.57561 12.86094,1.11628 12.86094,8.16806 l 1.74541,-0.62952 c 0,-8.11802 -6.57768,-12.28973 -14.60635,-9.39401 z"
id="path880"
inkscape:connector-curvature="0" />
<path
style="fill:#2980b9;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 161.70224,224.65346 1.85836,-0.53454 0.43431,0.40926 -0.98973,1.42822 c 0,0 -2.13398,-0.30486 -2.13398,-0.32574 0,-0.0209 0.83104,-0.9772 0.83104,-0.9772 z"
id="path882"
inkscape:connector-curvature="0" />
</g>
<ellipse
style="fill:#454545;fill-opacity:1;stroke:none;stroke-width:0.68220371;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:75.59054565;stroke-opacity:1"
id="path886"
cx="158.78319"
cy="17.35313"
rx="1.295833"
ry="1.1623898"
transform="matrix(0.89702138,0.44198716,0,1,0,0)" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 22 KiB

+10 -1
View File
@@ -1,7 +1,8 @@
0 Name: pupmotors
0 Author: Pybricks {laurens@pybricks.com}
0 !LICENSE MIT
1 15 600 -280 240 -1 0 0 0 -1 0 0 0 1 37316c01.dat
0 !LDCAD GROUP_DEF [topLevel=true] [LID=0] [GID=9FDP9pj0O55] [name=Group 1] [center=0 0 0]
1 15 600 -280 180 1 0 0 0 1 0 0 0 1 37316.dat
1 15 60 -272 160 -1 0 0 0 -1 0 0 0 1 37312c01.dat
1 15 -400 -280 240 -1 0 0 0 -1 0 0 0 1 37308c01.dat
1 0 -400 -310 -374 -1 0 0 0 -1 0 0 0 1 u9218c01.dat
@@ -10,3 +11,11 @@
1 0 630 -310 -384 -1 0 0 0 -1 0 0 0 1 u9218c01.dat
1 15 60 -320 -430 0 0 1 0 1 0 -1 0 0 20844.dat
1 0 60 -310 -394 -1 0 0 0 -1 0 0 0 1 u9218c01.dat
1 15 600 -266 158 -1 0 0 0 -1 0 0 0 1 u9218c01.dat
1 15 1130 -280 240 1 0 0 0 1 0 0 0 1 37316.dat
1 15 1290 -280 220 1 0 0 0 1 0 0 0 1 37308.dat
1 0 690 -312 530 0 0 1 0 1 0 -1 0 0 22168.dat
0 !LDCAD GROUP_NXT [ids=0] [nrs=2]
1 71 704.852 -312 -628.188 -0.5 0 0.866 0 1 0 -0.866 0 -0.5 58123.dat
0 !LDCAD GROUP_NXT [ids=0] [nrs=-1]
1 71 972.1 -321.5 -814.7 0.5 0 -0.866 0 1 0 0.866 0 0.5 99499c01.dat
@@ -0,0 +1,221 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="svg2"
width="1000"
height="302"
viewBox="0 0 1000 302"
sodipodi:docname="sensor_color_lights.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs6" />
<sodipodi:namedview
pagecolor="#fcfcfc"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:window-width="1853"
inkscape:window-height="1145"
id="namedview4"
showgrid="false"
inkscape:zoom="0.76339286"
inkscape:cx="161.01621"
inkscape:cy="109.1048"
inkscape:window-x="67"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" />
<rect
style="fill:#f4f4f4;fill-opacity:1;stroke:#1b2933;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect828"
width="150.00003"
height="147"
x="717.60785"
y="55.592186"
rx="4.3997755"
ry="4.3997755" />
<image
width="448"
height="302"
preserveAspectRatio="none"
xlink:href="../images/sensor_color.png"
id="image10"
x="0"
y="0"
sodipodi:absref="../images/sensor_color.png"
style="fill:#fcfcfc;fill-opacity:1;stroke:#fcfcfc;stroke-opacity:1" />
<rect
ry="23.066439"
rx="23.066439"
y="79.498627"
x="743.64288"
height="99.187141"
width="97.929855"
id="rect830"
style="fill:#1b2a34;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<circle
style="fill:#e9e9e9;fill-opacity:1;stroke:none;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path832"
cx="792.60779"
cy="129.09219"
r="37.83313" />
<circle
style="fill:#1b2a34;fill-opacity:1;stroke:none;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle842"
cx="792.60779"
cy="129.09219"
r="0.26551938" />
<path
style="fill:none;stroke:#1b2a34;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 792.60149,129.04962 32.78644,18.92925"
id="path844"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path846"
d="m 792.60149,129.04962 -32.78644,18.92925"
style="fill:none;stroke:#1b2a34;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;stroke:#1b2a34;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 792.60149,129.04962 V 91.191114"
id="path848"
inkscape:connector-curvature="0" />
<circle
r="27.129555"
cy="129.09219"
cx="792.60779"
id="circle834"
style="fill:#1b2a34;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<circle
style="fill:#e9e9e9;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle836"
cx="792.60779"
cy="129.09219"
r="19.997108" />
<rect
style="fill:#fcc302;fill-opacity:1;stroke:none;stroke-width:1.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect850"
width="15.630781"
height="7.8153906"
x="784.67413"
y="157.12068"
rx="0"
ry="0" />
<rect
ry="0"
rx="0"
y="714.78345"
x="277.33652"
height="7.8153906"
width="15.630781"
id="rect852"
style="fill:#fcc302;fill-opacity:1;stroke:none;stroke-width:1.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="rotate(-60)" />
<rect
transform="matrix(-0.5,-0.8660254,-0.8660254,0.5,0,0)"
style="fill:#fcc302;fill-opacity:1;stroke:none;stroke-width:1.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect854"
width="15.630781"
height="7.8153906"
x="-515.15295"
y="-657.84869"
rx="0"
ry="0" />
<path
inkscape:connector-curvature="0"
id="path903"
d="M 820.32215,111.88423 904.46121,62.706941"
style="fill:none;stroke:#6ab0de;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<circle
r="19.024944"
cy="59.943871"
cx="908.17609"
id="circle897"
style="fill:#e7f2fa;fill-opacity:1;stroke:#6ab0de;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:28.75451088px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
x="900.87256"
y="69.039848"
id="text901"><tspan
sodipodi:role="line"
id="tspan899"
x="900.87256"
y="69.039848"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054">2</tspan></text>
<path
style="fill:none;stroke:#6ab0de;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 764.02762,111.88423 679.88856,62.706941"
id="path909"
inkscape:connector-curvature="0" />
<circle
style="fill:#e7f2fa;fill-opacity:1;stroke:#6ab0de;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle911"
cx="-676.17365"
cy="59.943871"
r="19.024944"
transform="scale(-1,1)" />
<text
id="text915"
y="69.039848"
x="667.81085"
style="font-style:normal;font-weight:normal;font-size:28.75451088px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="69.039848"
x="667.81085"
id="tspan913"
sodipodi:role="line">0</tspan></text>
<path
style="fill:none;stroke:#6ab0de;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 794.47953,161.16366 v 72.04678"
id="path919"
inkscape:connector-curvature="0" />
<g
id="g924"
transform="translate(-1.9683207,-11.115222)">
<circle
r="19.024944"
cy="257.1044"
cx="796.21179"
id="circle4656"
style="fill:#e7f2fa;fill-opacity:1;stroke:#6ab0de;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:28.75451088px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
x="790.29767"
y="266.20038"
id="text4660"><tspan
sodipodi:role="line"
id="tspan4658"
x="790.29767"
y="266.20038"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054">1</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.7 KiB

@@ -0,0 +1,165 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="svg2"
width="1100"
height="287"
viewBox="0 0 1100 287"
sodipodi:docname="sensor_ultrasonic_lights.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs6" />
<sodipodi:namedview
pagecolor="#fcfcfc"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:window-width="1853"
inkscape:window-height="1145"
id="namedview4"
showgrid="false"
inkscape:zoom="10.523077"
inkscape:cx="527.41549"
inkscape:cy="252.46821"
inkscape:window-x="67"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" />
<image
width="520"
height="287"
preserveAspectRatio="none"
xlink:href="../images/sensor_ultrasonic.png"
id="image10"
x="0"
y="0"
sodipodi:absref="../images/sensor_ultrasonic.png" />
<image
sodipodi:absref="../images/sensor_ultrasonic_front.png"
y="65.201767"
x="666.66376"
id="image941"
xlink:href="../images/sensor_ultrasonic_front.png"
preserveAspectRatio="none"
height="153.18715"
width="363.40701"
style="stroke-width:2.12158799" />
<path
inkscape:connector-curvature="0"
id="path1014"
d="M 741.37048,36.101381 V 108.14816"
style="fill:none;stroke:#6ab0de;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<circle
style="fill:#e7f2fa;fill-opacity:1;stroke:#6ab0de;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle911"
cx="-741.81281"
cy="31.839216"
r="19.024944"
transform="scale(-1,1)" />
<text
id="text915"
y="40.935192"
x="733.45001"
style="font-style:normal;font-weight:normal;font-size:28.75451088px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="40.935192"
x="733.45001"
id="tspan913"
sodipodi:role="line">0</tspan></text>
<path
style="fill:none;stroke:#6ab0de;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 954.7844,36.101381 V 108.14816"
id="path1016"
inkscape:connector-curvature="0" />
<circle
transform="scale(-1,1)"
r="19.024944"
cy="31.839216"
cx="-955.22675"
id="circle1018"
style="fill:#e7f2fa;fill-opacity:1;stroke:#6ab0de;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:28.75451088px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
x="948.84326"
y="41.203976"
id="text1022"><tspan
sodipodi:role="line"
id="tspan1020"
x="948.84326"
y="41.203976"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054">1</tspan></text>
<path
style="fill:none;stroke:#6ab0de;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 741.37048,249.09108 V 177.0443"
id="path1024"
inkscape:connector-curvature="0" />
<circle
transform="scale(-1)"
r="19.024944"
cy="-253.35324"
cx="-741.81281"
id="circle1026"
style="fill:#e7f2fa;fill-opacity:1;stroke:#6ab0de;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:28.75451088px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
x="733.45001"
y="261.74335"
id="text1030"><tspan
sodipodi:role="line"
id="tspan1028"
x="733.45001"
y="261.74335"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054">2</tspan></text>
<path
inkscape:connector-curvature="0"
id="path1032"
d="M 954.7844,249.09108 V 177.0443"
style="fill:none;stroke:#6ab0de;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<circle
style="fill:#e7f2fa;fill-opacity:1;stroke:#6ab0de;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle1034"
cx="-955.22675"
cy="-253.35324"
r="19.024944"
transform="scale(-1)" />
<text
id="text1038"
y="263.62482"
x="947.76813"
style="font-style:normal;font-weight:normal;font-size:28.75451088px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404140;fill-opacity:1;stroke:none;stroke-width:0.60486054"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Roboto Slab';-inkscape-font-specification:'Roboto Slab';fill:#404140;fill-opacity:1;stroke-width:0.60486054"
y="263.62482"
x="947.76813"
id="tspan1036"
sodipodi:role="line">3</tspan></text>
</svg>

After

Width:  |  Height:  |  Size: 6.6 KiB

+1 -1
View File
@@ -76,7 +76,7 @@
inkscape:current-layer="svg2"
showguides="false" />
<image
sodipodi:absref="/home/laurens/pybricks/git/pybricks-api/doc/api/diagram_source/terminal.png"
sodipodi:absref="terminal.png"
xlink:href="terminal.png"
width="967.99994"
height="402"

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

+5
View File
@@ -15,6 +15,7 @@ Motors
EV3-compatible motors. The arrows indicate the default positive direction.
.. autoclass:: pybricks.ev3devices.Motor
:noindex:
:no-members:
.. rubric:: Measuring
@@ -74,6 +75,10 @@ Color Sensor
Infrared Sensor and Beacon
^^^^^^^^^^^^^^^^^^^^^^^^^^
Each method of this class puts the sensor in a different *mode*. Switching
modes takes about one second on this sensor. To make sure that your program
runs quickly, use only of these methods in your program.
.. figure:: ../api/images/sensor_ev3_ir.png
:width: 60 %
-32
View File
@@ -1,32 +0,0 @@
Working with vectors
====================
Scalars and Vectors
~~~~~~~~~~~~~~~~~~~~~~~
.. _scalar:
scalar
--------------
TODO
.. _vector:
vector
--------------
TODO
Robot reference frame
~~~~~~~~~~~~~~~~~~~~~~~
.. _robotframe:
Robot reference frame
----------------------
TODO (explanation, diagram, etc)::
* X: To the right
* Y: forward
* Z: upward
-18
View File
@@ -1,18 +0,0 @@
:mod:`hubs <pybricks.hubs>` -- Programmable Hubs
================================================
.. module:: pybricks.hubs
.. _fig_hubs:
Select your programmable hub using the buttons below.
.. content-tabs::
.. tab-container:: ev3brick
:title: EV3 Brick
.. figure:: ../api/images/ev3brick.png
:height: 15 em
.. include:: hubs_ev3brick.inc
+51
View File
@@ -0,0 +1,51 @@
City Hub
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. figure:: ../../api/images/cityhub.png
:height: 15 em
.. autoclass:: pybricks.hubs.CityHub
:no-members:
.. rubric:: Using the hub status light
.. automethod:: pybricks.hubs::CityHub.light.on
.. automethod:: pybricks.hubs::CityHub.light.off
.. automethod:: pybricks.hubs::CityHub.light.blink
.. automethod:: pybricks.hubs::CityHub.light.animate
.. rubric:: Using the battery
.. automethod:: pybricks.hubs::CityHub.battery.voltage
.. automethod:: pybricks.hubs::CityHub.battery.current
Status light examples
---------------------
Turning the light on and off
****************************
.. literalinclude::
../../../examples/pup/hub_cityhub/light_off.py
Changing brightness and using custom colors
*******************************************
.. literalinclude::
../../../examples/pup/hub_cityhub/light_hsv.py
Making the light blink
**********************
.. literalinclude::
../../../examples/pup/hub_cityhub/light_blink.py
Creating light animations
*************************
.. literalinclude::
../../../examples/pup/hub_cityhub/light_animate.py
+200
View File
@@ -0,0 +1,200 @@
MINDSTORMS EV3 Brick
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. figure:: ../../api/images/ev3brick.png
:height: 15 em
.. autoclass:: pybricks.hubs.EV3Brick
:no-members:
.. rubric:: Using the buttons
.. automethod:: pybricks.hubs::EV3Brick.buttons.pressed
.. rubric:: Using the brick status light
.. automethod:: pybricks.hubs::EV3Brick.light.on
.. automethod:: pybricks.hubs::EV3Brick.light.off
.. rubric:: Using the speaker
.. automethod:: pybricks.hubs::EV3Brick.speaker.beep
.. automethod:: pybricks.hubs::EV3Brick.speaker.play_notes
.. automethod:: pybricks.hubs::EV3Brick.speaker.play_file
.. automethod:: pybricks.hubs::EV3Brick.speaker.say
.. automethod:: pybricks.hubs::EV3Brick.speaker.set_speech_options
.. automethod:: pybricks.hubs::EV3Brick.speaker.set_volume
.. rubric:: Using the screen
.. |this image| replace:: the screen
.. automethod:: pybricks.hubs::EV3Brick.screen.clear
.. automethod:: pybricks.hubs::EV3Brick.screen.draw_text
.. automethod:: pybricks.hubs::EV3Brick.screen.print
.. automethod:: pybricks.hubs::EV3Brick.screen.set_font
.. automethod:: pybricks.hubs::EV3Brick.screen.load_image
.. automethod:: pybricks.hubs::EV3Brick.screen.draw_image
.. automethod:: pybricks.hubs::EV3Brick.screen.draw_pixel
.. automethod:: pybricks.hubs::EV3Brick.screen.draw_line
.. automethod:: pybricks.hubs::EV3Brick.screen.draw_box
.. automethod:: pybricks.hubs::EV3Brick.screen.draw_circle
.. autoattribute:: pybricks.hubs::EV3Brick.screen.width
.. autoattribute:: pybricks.hubs::EV3Brick.screen.height
.. automethod:: pybricks.hubs::EV3Brick.screen.save
.. rubric:: Using the battery
.. automethod:: pybricks.hubs::EV3Brick.battery.voltage
.. automethod:: pybricks.hubs::EV3Brick.battery.current
Status light examples
---------------------
Turn the light on and change the color
**************************************
.. literalinclude::
../../../examples/ev3/light_color/main.py
Screen examples
---------------------
Show an image on the screen
***************************
.. literalinclude::
../../../examples/ev3/screen_image/main.py
Drawing shapes on the screen
****************************
.. literalinclude::
../../../examples/ev3/screen_draw/main.py
Using different fonts
*********************
.. raw:: latex
\begin{CJK}{UTF8}{gbsn}
.. literalinclude::
../../../examples/ev3/screen_print/main.py
.. raw:: latex
\end{CJK}
.. rubric:: Available languages and voices for speech
.. [#espeak_lang]
You can choose the following languages:
- ``'af'``: Afrikaans
- ``'an'``: Aragonese
- ``'bg'``: Bulgarian
- ``'bs'``: Bosnian
- ``'ca'``: Catalan
- ``'cs'``: Czech
- ``'cy'``: Welsh
- ``'da'``: Danish
- ``'de'``: German
- ``'el'``: Greek
- ``'en'``: English (default)
- ``'en-gb'``: English (United Kingdom)
- ``'en-sc'``: English (Scotland)
- ``'en-uk-north'``: English (United Kingdom, Northern)
- ``'en-uk-rp'``: English (United Kingdom, Received Pronunciation)
- ``'en-uk-wmids'``: English (United Kingdom, West Midlands)
- ``'en-us'``: English (United States)
- ``'en-wi'``: English (West Indies)
- ``'eo'``: Esperanto
- ``'es'``: Spanish
- ``'es-la'``: Spanish (Latin America)
- ``'et'``: Estonian
- ``'fa'``: Persian
- ``'fa-pin'``: Persian
- ``'fi'``: Finnish
- ``'fr-be'``: French (Belgium)
- ``'fr-fr'``: French (France)
- ``'ga'``: Irish
- ``'grc'``: Greek
- ``'hi'``: Hindi
- ``'hr'``: Croatian
- ``'hu'``: Hungarian
- ``'hy'``: Armenian
- ``'hy-west'``: Armenian (Western)
- ``'id'``: Indonesian
- ``'is'``: Icelandic
- ``'it'``: Italian
- ``'jbo'``: Lojban
- ``'ka'``: Georgian
- ``'kn'``: Kannada
- ``'ku'``: Kurdish
- ``'la'``: Latin
- ``'lfn'``: Lingua Franca Nova
- ``'lt'``: Lithuanian
- ``'lv'``: Latvian
- ``'mk'``: Macedonian
- ``'ml'``: Malayalam
- ``'ms'``: Malay
- ``'ne'``: Nepali
- ``'nl'``: Dutch
- ``'no'``: Norwegian
- ``'pa'``: Punjabi
- ``'pl'``: Polish
- ``'pt-br'``: Portuguese (Brazil)
- ``'pt-pt'``: Portuguese (Portugal)
- ``'ro'``: Romanian
- ``'ru'``: Russian
- ``'sk'``: Slovak
- ``'sq'``: Albanian
- ``'sr'``: Serbian
- ``'sv'``: Swedish
- ``'sw'``: Swahili
- ``'ta'``: Tamil
- ``'tr'``: Turkish
- ``'vi'``: Vietnamese
- ``'vi-hue'``: Vietnamese (Hue)
- ``'vi-sgn'``: Vietnamese (Saigon)
- ``'zh'``: Mandarin Chinese
- ``'zh-yue'``: Cantonese Chinese
You can choose the following voices:
- ``'f1'``: female variant 1
- ``'f2'``: female variant 2
- ``'f3'``: female variant 3
- ``'f4'``: female variant 4
- ``'f5'``: female variant 5
- ``'m1'``: male variant 1
- ``'m2'``: male variant 2
- ``'m3'``: male variant 3
- ``'m4'``: male variant 4
- ``'m5'``: male variant 5
- ``'m6'``: male variant 6
- ``'m7'``: male variant 7
- ``'croak'``: croak
- ``'whisper'``: whisper
- ``'whisperf'``: female whisper
+38
View File
@@ -0,0 +1,38 @@
:mod:`hubs <pybricks.hubs>` -- Programmable Hubs
================================================
.. module:: pybricks.hubs
.. toctree::
:maxdepth: 1
:hidden:
movehub
cityhub
technichub
ev3brick
.. pybricks-classlink:: MoveHub
.. figure:: ../../api/images/movehub.png
:height: 10 em
:target: movehub.html
.. pybricks-classlink:: CityHub
.. figure:: ../../api/images/cityhub.png
:height: 10 em
:target: cityhub.html
.. pybricks-classlink:: TechnicHub
.. figure:: ../../api/images/technichub.png
:height: 10 em
:target: technichub.html
.. pybricks-classlink:: EV3Brick
.. figure:: ../../api/images/ev3brick.png
:height: 10 em
:target: ev3brick.html
+42
View File
@@ -0,0 +1,42 @@
Move Hub
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. _fig_movehub:
.. figure:: ../../api/images/movehub_label.png
:height: 15 em
.. autoclass:: pybricks.hubs.MoveHub
:no-members:
.. rubric:: Using the hub status light
.. automethod:: pybricks.hubs::MoveHub.light.on
.. automethod:: pybricks.hubs::MoveHub.light.off
.. automethod:: pybricks.hubs::MoveHub.light.blink
.. automethod:: pybricks.hubs::MoveHub.light.animate
.. rubric:: Using the battery
.. automethod:: pybricks.hubs::MoveHub.battery.voltage
.. automethod:: pybricks.hubs::MoveHub.battery.current
Status light examples
---------------------
Turning the light on and off
******************************
.. literalinclude::
../../../examples/pup/hub_movehub/light_off.py
Making the light blink
******************************
.. literalinclude::
../../../examples/pup/hub_movehub/light_blink.py
+50
View File
@@ -0,0 +1,50 @@
Technic Hub
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. figure:: ../../api/images/technichub.png
:height: 15 em
.. class:: TechnicHub
.. rubric:: Using the hub status light
.. automethod:: pybricks.hubs::TechnicHub.light.on
.. automethod:: pybricks.hubs::TechnicHub.light.off
.. automethod:: pybricks.hubs::TechnicHub.light.blink
.. automethod:: pybricks.hubs::TechnicHub.light.animate
.. rubric:: Using the battery
.. automethod:: pybricks.hubs::TechnicHub.battery.voltage
.. automethod:: pybricks.hubs::TechnicHub.battery.current
Status light examples
---------------------
Turning the light on and off
****************************
.. literalinclude::
../../../examples/pup/hub_technichub/light_off.py
Changing brightness and using custom colors
*******************************************
.. literalinclude::
../../../examples/pup/hub_technichub/light_hsv.py
Making the light blink
**********************
.. literalinclude::
../../../examples/pup/hub_technichub/light_blink.py
Creating light animations
*************************
.. literalinclude::
../../../examples/pup/hub_technichub/light_animate.py
-230
View File
@@ -1,230 +0,0 @@
.. autoclass:: pybricks.hubs.EV3Brick
:no-members:
.. rubric:: Using the buttons
.. automethod:: pybricks.hubs::EV3Brick.buttons.pressed
.. rubric:: Using the brick status light
.. automethod:: pybricks.hubs::EV3Brick.light.on
.. toggle-header::
:header: **Show/hide example**
**Example: Turn the light on and change the color.**
.. literalinclude::
../../pybricks-projects/snippets/ev3/light_color/main.py
.. automethod:: pybricks.hubs::EV3Brick.light.off
.. rubric:: Using the speaker
.. automethod:: pybricks.hubs::EV3Brick.speaker.beep
.. automethod:: pybricks.hubs::EV3Brick.speaker.play_notes
.. toggle-header::
:header: **Show/hide musical note format**
Each note is a string with the following format:
- The first character is the name of the note, ``A`` to ``G``
or ``R`` for a rest.
- Note names can also include an accidental ``#`` (sharp) or
``b`` (flat). ``B#``/``Cb`` and ``E#``/``Fb`` are not
allowed.
- The note name is followed by the octave number ``2``
to ``8``. For example ``C4`` is middle C. The octave changes
to the next number at the note C, for example, ``B3`` is the
note below middle C (``C4``).
- The octave is followed by ``/`` and a number that indicates
the size of the note. For example ``/4`` is a quarter note,
``/8`` is an eighth note and so on.
- This can optionally followed by a ``.`` to make a dotted
note. Dotted notes are 1-1/2 times as long as notes without a
dot.
- The note can optionally end with a ``_`` which is a tie or a
slur. This causes there to be no pause between this note and
the next note.
.. automethod:: pybricks.hubs::EV3Brick.speaker.play_file
.. automethod:: pybricks.hubs::EV3Brick.speaker.say
.. automethod:: pybricks.hubs::EV3Brick.speaker.set_speech_options
.. toggle-header::
:header: **Show/hide available languages and voices**
You can choose the following languages:
- ``'af'``: Afrikaans
- ``'an'``: Aragonese
- ``'bg'``: Bulgarian
- ``'bs'``: Bosnian
- ``'ca'``: Catalan
- ``'cs'``: Czech
- ``'cy'``: Welsh
- ``'da'``: Danish
- ``'de'``: German
- ``'el'``: Greek
- ``'en'``: English (default)
- ``'en-gb'``: English (United Kingdom)
- ``'en-sc'``: English (Scotland)
- ``'en-uk-north'``: English (United Kingdom, Northern)
- ``'en-uk-rp'``:
English (United Kingdom, Received Pronunciation)
- ``'en-uk-wmids'``: English (United Kingdom, West Midlands)
- ``'en-us'``: English (United States)
- ``'en-wi'``: English (West Indies)
- ``'eo'``: Esperanto
- ``'es'``: Spanish
- ``'es-la'``: Spanish (Latin America)
- ``'et'``: Estonian
- ``'fa'``: Persian
- ``'fa-pin'``: Persian
- ``'fi'``: Finnish
- ``'fr-be'``: French (Belgium)
- ``'fr-fr'``: French (France)
- ``'ga'``: Irish
- ``'grc'``: Greek
- ``'hi'``: Hindi
- ``'hr'``: Croatian
- ``'hu'``: Hungarian
- ``'hy'``: Armenian
- ``'hy-west'``: Armenian (Western)
- ``'id'``: Indonesian
- ``'is'``: Icelandic
- ``'it'``: Italian
- ``'jbo'``: Lojban
- ``'ka'``: Georgian
- ``'kn'``: Kannada
- ``'ku'``: Kurdish
- ``'la'``: Latin
- ``'lfn'``: Lingua Franca Nova
- ``'lt'``: Lithuanian
- ``'lv'``: Latvian
- ``'mk'``: Macedonian
- ``'ml'``: Malayalam
- ``'ms'``: Malay
- ``'ne'``: Nepali
- ``'nl'``: Dutch
- ``'no'``: Norwegian
- ``'pa'``: Punjabi
- ``'pl'``: Polish
- ``'pt-br'``: Portuguese (Brazil)
- ``'pt-pt'``: Portuguese (Portugal)
- ``'ro'``: Romanian
- ``'ru'``: Russian
- ``'sk'``: Slovak
- ``'sq'``: Albanian
- ``'sr'``: Serbian
- ``'sv'``: Swedish
- ``'sw'``: Swahili
- ``'ta'``: Tamil
- ``'tr'``: Turkish
- ``'vi'``: Vietnamese
- ``'vi-hue'``: Vietnamese (Hue)
- ``'vi-sgn'``: Vietnamese (Saigon)
- ``'zh'``: Mandarin Chinese
- ``'zh-yue'``: Cantonese Chinese
You can choose the following voices:
- ``'f1'``: female variant 1
- ``'f2'``: female variant 2
- ``'f3'``: female variant 3
- ``'f4'``: female variant 4
- ``'f5'``: female variant 5
- ``'m1'``: male variant 1
- ``'m2'``: male variant 2
- ``'m3'``: male variant 3
- ``'m4'``: male variant 4
- ``'m5'``: male variant 5
- ``'m6'``: male variant 6
- ``'m7'``: male variant 7
- ``'croak'``: croak
- ``'whisper'``: whisper
- ``'whisperf'``: female whisper
.. automethod:: pybricks.hubs::EV3Brick.speaker.set_volume
.. rubric:: Using the screen
.. |this image| replace:: the screen
.. automethod:: pybricks.hubs::EV3Brick.screen.clear
.. automethod:: pybricks.hubs::EV3Brick.screen.draw_text
.. automethod:: pybricks.hubs::EV3Brick.screen.print
.. toggle-header::
:header: **Show/hide example**
**Example: Say hello... in several ways.**
.. raw:: latex
\begin{CJK}{UTF8}{gbsn}
.. literalinclude::
../../pybricks-projects/snippets/ev3/screen_print/main.py
.. raw:: latex
\end{CJK}
.. automethod:: pybricks.hubs::EV3Brick.screen.set_font
**Example:** See example in :meth:`print`.
.. automethod:: pybricks.hubs::EV3Brick.screen.load_image
.. toggle-header::
:header: **Show/hide example**
**Example: Show an image on the screen.**
.. literalinclude::
../../pybricks-projects/snippets/ev3/screen_image/main.py
.. automethod:: pybricks.hubs::EV3Brick.screen.draw_image
.. automethod:: pybricks.hubs::EV3Brick.screen.draw_pixel
.. automethod:: pybricks.hubs::EV3Brick.screen.draw_line
.. toggle-header::
:header: **Show/hide example**
**Example: Draw some shapes on the screen.**
.. literalinclude::
../../pybricks-projects/snippets/ev3/screen_draw/main.py
.. automethod:: pybricks.hubs::EV3Brick.screen.draw_box
**Example:** See example in :meth:`draw_line`.
.. automethod:: pybricks.hubs::EV3Brick.screen.draw_circle
**Example:** See example in :meth:`draw_line`.
.. autoattribute:: pybricks.hubs::EV3Brick.screen.width
.. autoattribute:: pybricks.hubs::EV3Brick.screen.height
.. automethod:: pybricks.hubs::EV3Brick.screen.save
.. rubric:: Using the battery
.. automethod:: pybricks.hubs::EV3Brick.battery.voltage
.. automethod:: pybricks.hubs::EV3Brick.battery.current
Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 277 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 669 KiB

After

Width:  |  Height:  |  Size: 1009 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 81 KiB

+25 -17
View File
@@ -1,4 +1,4 @@
Welcome to Pybricks!
Pybricks API Documentation
==================================================================
This documentation has everything you need to install Pybricks and
@@ -7,7 +7,24 @@ run your first scripts.
**Step 1: Install Pybricks**
To get started, go to the :doc:`EV3 Quick Start <start_ev3>`.
Pybricks scripts are the same across all hubs. The only difference is in how
you install Pybricks and how you run scripts. To get started, click one of
the platforms below.
.. list-table::
* - **MINDSTORMS EV3**
- **Powered Up (Technic/City/BOOST)**
- **SPIKE / MINDSTORMS Inventor**
* - .. image:: ../api/images/ev3brick.png
:target: https://pybricks.com/install/mindstorms-ev3/installation
- .. figure:: ../api/images/powereduphubs.png
:target: https://pybricks.com/install/technic-boost-city/
- .. figure:: ../api/images/primeinventorhub.png
:target: https://pybricks.com/install/spike-mindstorms/
**Step 2: Start coding!**
@@ -36,29 +53,20 @@ findings on our `support page`_ so we can make Pybricks even better.
:hidden:
Home Page <https://pybricks.com>
Downloads <https://pybricks.com/downloads/>
Example Projects <https://github.com/pybricks/pybricks-projects>
Support <https://github.com/pybricks/support/issues/>
About Pybricks <https://pybricks.com/about/>
.. toctree::
:maxdepth: 1
:caption: Getting started
:hidden:
start_ev3
Installation <https://pybricks.com/install/>
.. toctree::
:maxdepth: 1
:caption: Pybricks Modules
:hidden:
hubs
hubs/index
pupdevices/index
ev3devices
nxtdevices
iodevices
parameters
tools
iodevices/index
parameters/index
tools/index
robotics
media
messaging
-27
View File
@@ -1,27 +0,0 @@
:mod:`iodevices <pybricks.iodevices>` -- Generic I/O Devices
============================================================
.. automodule:: pybricks.iodevices
:no-members:
.. note::
This module provides classes to interact with unofficial motors, sensors,
and other custom electronics. You should only connect custom electronics
or unofficial devices if you know what you are doing. Proceed with caution.
LUMP Device
^^^^^^^^^^^^^
.. figure:: ../api/images/sensor_lump.png
:width: 80 %
.. autoclass:: pybricks.iodevices.LUMPDevice
.. raw:: html
<h1>EV3 Only</h1>
The classes listed below are **only available on the EV3**.
.. include:: iodevices_ev3.inc
+11
View File
@@ -0,0 +1,11 @@
EV3 Analog Sensor
^^^^^^^^^^^^^^^^^
.. note::
This class is only available on EV3.
.. figure:: ../../api/images/sensor_rj12_brown.png
:width: 25 %
.. autoclass:: pybricks.iodevices.AnalogSensor
+20
View File
@@ -0,0 +1,20 @@
EV3 DC Motor
^^^^^^^^^^^^^^^^^^
.. note::
This class is specifically for on EV3. For Powered Up DC Motors, just use
the :class:`DCMotor <pybricks.pupdevices.DCMotor>` class.
.. figure:: ../../api/images/rcxmotor.png
:width: 40 %
.. autoclass:: pybricks._common.DCMotor
:noindex:
:no-members:
.. automethod:: pybricks._common.DCMotor.dc
:noindex:
.. automethod:: pybricks._common.DCMotor.stop
:noindex:
+60
View File
@@ -0,0 +1,60 @@
Ev3dev sensors
^^^^^^^^^^^^^^^^^^
.. note::
This class is only available on EV3.
.. figure:: ../../api/images/sensor_ev3dev.png
:width: 70 %
EV3 MicroPython is built on top of ev3dev, which means that a sensor
may be supported even if it is not listed in this documentation. If so, you can
use it with the ``Ev3devSensor`` class. This is easier and faster than using
the custom device classes given above.
To check whether you can use the ``Ev3devSensor`` class:
* Plug the sensor into your EV3 Brick.
* Go to the main menu of the EV3 Brick.
* Select `Device Browser` and then `Sensors`.
* If your sensor shows up, you can use it.
Now select your sensor from the menu and choose `set mode`. This shows all
available modes for this sensor. You can use these mode names as the ``mode``
setting below.
To learn more about compatible devices and what each mode does,
visit the `ev3dev sensors`_ page.
.. autoclass:: pybricks.iodevices.Ev3devSensor
:no-members:
.. autoattribute:: pybricks.iodevices.Ev3devSensor.sensor_index
:annotation:
.. autoattribute:: pybricks.iodevices.Ev3devSensor.port_index
:annotation:
.. automethod:: pybricks.iodevices.Ev3devSensor.read
**Example: Reading values with the Ev3devSensor class**
In this example we use the LEGO MINDSTORMS EV3 Color Sensor with the raw
RGB mode. This gives uncalibrated red, green, and blue reflection values.
.. literalinclude::
../../../examples/ev3/ev3devsensor/main.py
**Example: Extending the Ev3devSensor class**
This example shows how to extend the ``Ev3devSensor`` class by accessing
additional features found in the Linux system folder for this device.
.. literalinclude::
../../../examples/ev3/ev3devsensor/class_example.py
.. _ev3dev sensors: http://docs.ev3dev.org/projects/lego-linux-drivers/en/ev3dev-stretch/sensors.html
.. _Mode name: http://docs.ev3dev.org/projects/lego-linux-drivers/en/ev3dev-stretch/sensor_data.html
.. _lego-sensor: http://docs.ev3dev.org/projects/lego-linux-drivers/en/ev3dev-stretch/sensors.html#the-lego-sensor-subsytem
.. _lego-port: http://docs.ev3dev.org/projects/lego-linux-drivers/en/ev3dev-stretch/ports.html#the-lego-port-subsystem
+50
View File
@@ -0,0 +1,50 @@
Generic I2C Device
^^^^^^^^^^^^^^^^^^
.. note::
This class is **only supported on the EV3** at this time. It could be added
to Powered Up hubs in a future release. If you'd like to see this happen, be
sure to ask us on our `support page`_.
.. _support page: https://github.com/pybricks/support/issues/
.. figure:: ../../api/images/sensor_rj12_bluegreen.png
:width: 25 %
.. autoclass:: pybricks.iodevices.I2CDevice
**Example: Read and write to an I2C device**
.. literalinclude:: ../../../examples/ev3/i2c_basics/main.py
.. _i2caddress:
I2C Addresses
---------------
I2C addresses are 7-bit values. However, most vendors who make LEGO compatible
sensors provide an 8-bit address in their documentation.
To use those addresses, you must shift them by 1 bit.
For example, if the documented address is ``0xD2``, you can do
``address = 0xD2 >> 1``.
Advanced I2C Commands
---------------------
Some rudimentary I2C devices do not require a register argument or even any
data. You can achieve this behavior as shown in the examples below.
**Example: Advanced I2C read and write techniques**
.. literalinclude:: ../../../examples/ev3/i2c_extra/main.py
**Additional technical resources**
The ``I2CDevice`` class methods call functions from the Linux SMBus driver.
To find out which commands are called under the hood, check the
`Pybricks source code`_.
More details about using I2C without MicroPython can be found on
the `ev3dev I2C`_ page.
.. _ev3dev I2C: http://docs.ev3dev.org/projects/lego-linux-drivers/en/ev3dev-stretch/i2c.html
.. _Pybricks source code: https://github.com/pybricks/pybricks-micropython
+61
View File
@@ -0,0 +1,61 @@
:mod:`iodevices <pybricks.iodevices>` -- Generic I/O Devices
============================================================
.. automodule:: pybricks.iodevices
:no-members:
.. toctree::
:maxdepth: 1
:hidden:
pupdevice
i2cdevice
uartdevice
analogsensor
lumpdevice
dcmotor
ev3devsensor
.. pybricks-classlink:: PUPDevice
.. figure:: ../../api/images/sensor_pup.png
:width: 70 %
:target: pupdevice.html
This class is only available on Powered Up hubs.
.. pybricks-classlink:: I2CDevice
.. figure:: ../../api/images/sensor_rj12_bluegreen.png
:width: 25 %
:target: i2cdevice.html
.. pybricks-classlink:: UARTDevice
.. figure:: ../../api/images/sensor_rj12_gray.png
:width: 25 %
:target: uartdevice.html
.. pybricks-classlink:: AnalogSensor
.. figure:: ../../api/images/sensor_rj12_brown.png
:width: 25 %
:target: analogsensor.html
.. pybricks-classlink:: LUMPDevice
.. figure:: ../../api/images/sensor_rj12_green.png
:width: 25 %
:target: lumpdevice.html
.. pybricks-classlink:: DCMotor
.. figure:: ../../api/images/rcxmotor.png
:width: 40 %
:target: dcmotor.html
.. pybricks-classlink:: Ev3devSensor
.. figure:: ../../api/images/sensor_ev3dev.png
:width: 70 %
:target: ev3devsensor.html
+11
View File
@@ -0,0 +1,11 @@
EV3 UART Device
^^^^^^^^^^^^^^^^^
.. note::
This class is only available on EV3.
.. figure:: ../../api/images/sensor_rj12_green.png
:width: 25 %
.. autoclass:: pybricks.iodevices.LUMPDevice
+14
View File
@@ -0,0 +1,14 @@
Powered Up Device
^^^^^^^^^^^^^^^^^
.. figure:: ../../api/images/sensor_pup.png
:width: 70 %
.. autoclass:: pybricks.iodevices.PUPDevice
:no-members:
.. automethod:: pybricks.iodevices.PUPDevice.info
.. automethod:: pybricks.iodevices.PUPDevice.read
.. automethod:: pybricks.iodevices.PUPDevice.write
+20
View File
@@ -0,0 +1,20 @@
Generic UART Device
^^^^^^^^^^^^^^^^^^^
.. note::
This class is **only supported on the EV3** at this time. It could be added
to Powered Up hubs in a future release. If you'd like to see this happen,
be sure to ask us on our `support page`_.
.. _support page: https://github.com/pybricks/support/issues/
.. figure:: ../../api/images/sensor_rj12_gray.png
:width: 25 %
.. autoclass:: pybricks.iodevices.UARTDevice
**Example: Read and write to a UART device**
.. literalinclude::
../../../examples/ev3/uart_basics/main.py
-151
View File
@@ -1,151 +0,0 @@
Analog Sensor
^^^^^^^^^^^^^
.. figure:: ../api/images/sensor_rj12_brown.png
:width: 25 %
.. autoclass:: pybricks.iodevices.AnalogSensor
I2C Device
^^^^^^^^^^^^^
.. figure:: ../api/images/sensor_rj12_bluegreen.png
:width: 25 %
.. autoclass:: pybricks.iodevices.I2CDevice
.. toggle-header::
:header: **Show/hide example**
**Example: Read and write to an I2C device.**
.. literalinclude:: ../../pybricks-projects/snippets/ev3/i2c_basics/main.py
.. _i2caddress:
I2C Addresses
---------------
I2C addresses are 7-bit values. However, most vendors who make LEGO compatible
sensors provide an 8-bit address in their documentation.
To use those addresses, you must shift them by 1 bit.
For example, if the documented address is ``0xD2``, you can do
``address = 0xD2 >> 1``.
Advanced I2C Commands
---------------------
Some rudimentary I2C devices do not require a register argument or even any
data. You can achieve this behavior as shown in the examples below.
.. toggle-header::
:header: **Show/hide example**
**Example: Advanced I2C read and write techniques.**
.. literalinclude:: ../../pybricks-projects/snippets/ev3/i2c_extra/main.py
**Additional technical resources**
The ``I2CDevice`` class methods call functions from the Linux SMBus driver.
To find out which commands are called under the hood, check the
`Pybricks source code`_.
More details about using I2C without MicroPython can be found on
the `ev3dev I2C`_ page.
.. _ev3dev I2C: http://docs.ev3dev.org/projects/lego-linux-drivers/en/ev3dev-stretch/i2c.html
.. _Pybricks source code: https://github.com/pybricks/pybricks-micropython
UART Device
^^^^^^^^^^^^^
.. figure:: ../api/images/sensor_rj12_gray.png
:width: 25 %
.. autoclass:: pybricks.iodevices.UARTDevice
.. toggle-header::
:header: **Show/hide example**
**Example: Read and write to a UART device.**
.. literalinclude::
../../pybricks-projects/snippets/ev3/uart_basics/main.py
DC Motor
^^^^^^^^^^^^
.. figure:: ../api/images/rcxmotor.png
:width: 40 %
.. autoclass:: pybricks._common.DCMotor
:noindex:
:no-members:
.. automethod:: pybricks._common.DCMotor.dc
:noindex:
.. automethod:: pybricks._common.DCMotor.stop
:noindex:
Ev3dev sensors
^^^^^^^^^^^^^^^^^^^^^
.. figure:: ../api/images/sensor_ev3dev.png
:width: 70 %
EV3 MicroPython is built on top of ev3dev, which means that a sensor
may be supported even if it is not listed in this documentation. If so, you can
use it with the ``Ev3devSensor`` class. This is easier and faster than using
the custom device classes given above.
To check whether you can use the ``Ev3devSensor`` class:
* Plug the sensor into your EV3 Brick.
* Go to the main menu of the EV3 Brick.
* Select `Device Browser` and then `Sensors`.
* If your sensor shows up, you can use it.
Now select your sensor from the menu and choose `set mode`. This shows all
available modes for this sensor. You can use these mode names as the ``mode``
setting below.
To learn more about compatible devices and what each mode does,
visit the `ev3dev sensors`_ page.
.. autoclass:: pybricks.iodevices.Ev3devSensor
:no-members:
.. autoattribute:: pybricks.iodevices.Ev3devSensor.sensor_index
:annotation:
.. autoattribute:: pybricks.iodevices.Ev3devSensor.port_index
:annotation:
.. automethod:: pybricks.iodevices.Ev3devSensor.read
.. toggle-header::
:header: **Show/hide example: Reading values with the Ev3devSensor class**
**Example**
In this example we use the LEGO MINDSTORMS EV3 Color Sensor with the raw
RGB mode. This gives uncalibrated red, green, and blue reflection values.
.. literalinclude::
../../pybricks-projects/snippets/ev3/ev3devsensor/main.py
.. toggle-header::
:header: **Show/hide example: Extending the Ev3devSensor class**
**Example**
This example shows how to extend the ``Ev3devSensor`` class by accessing
additional features found in the Linux system folder for this device.
.. literalinclude::
../../pybricks-projects/snippets/ev3/ev3devsensor/class_example.py
.. _ev3dev sensors: http://docs.ev3dev.org/projects/lego-linux-drivers/en/ev3dev-stretch/sensors.html
.. _Mode name: http://docs.ev3dev.org/projects/lego-linux-drivers/en/ev3dev-stretch/sensor_data.html
.. _lego-sensor: http://docs.ev3dev.org/projects/lego-linux-drivers/en/ev3dev-stretch/sensors.html#the-lego-sensor-subsytem
.. _lego-port: http://docs.ev3dev.org/projects/lego-linux-drivers/en/ev3dev-stretch/ports.html#the-lego-port-subsystem
+1022 -877
View File
File diff suppressed because it is too large Load Diff
+18 -20
View File
@@ -41,7 +41,7 @@ The connection will be made when you run your programs, as described below.
Pairing one EV3 Brick to another EV3 Brick.
When you scan for Bluetooth devices, you'll see a list of device names. By
default, all EV3 Bricks are named *ev3dev*. Click :ref:`here <hostname>` to
default, all EV3 Bricks are named *ev3dev*. Click `here`_ to
learn how to change that name. This makes it easy to tell them apart.
Repeat the steps in :numref:`fig_bluetooth_pair` if you want to pair more than
@@ -64,25 +64,6 @@ and the client can send a message to the server.
An example network with one server and one clients.
.. toggle-header::
:header: **Show/hide full server example**
**Example: EV3 Bluetooth Server.**
This is the full version of the excerpt shown in :numref:`fig_messaging`.
.. literalinclude:: ../../pybricks-projects/snippets/ev3/bluetooth_server/server.py
.. toggle-header::
:header: **Show/hide full client example**
**Example: EV3 Bluetooth Client.**
This is the full version of the excerpt shown in :numref:`fig_messaging`.
.. literalinclude:: ../../pybricks-projects/snippets/ev3/bluetooth_client/client.py
The only difference between the client and the server is which one initiates
the connection at the beginning of the program:
@@ -123,6 +104,21 @@ numbers, or text), you can choose one of the Mailboxes below.
.. autoclass:: TextMailbox
:no-members:
Examples
-----------------
**EV3 Bluetooth Server**
This is the full version of the excerpt shown in :numref:`fig_messaging`.
.. literalinclude:: ../../examples/ev3/bluetooth_server/server.py
**EV3 Bluetooth Client**
This is the full version of the excerpt shown in :numref:`fig_messaging`.
.. literalinclude:: ../../examples/ev3/bluetooth_client/client.py
Making bigger networks
----------------------
@@ -138,3 +134,5 @@ is shown in :numref:`fig_messaging_network`.
:align: center
An example network with one server and two clients.
.. _here: https://pybricks.com/install/mindstorms-ev3/beyond-micropython
+2
View File
@@ -126,6 +126,8 @@ the settings.
.. automethod:: pybricks._common.Control.stalled
.. automethod:: pybricks._common.Control.load
.. rubric:: Settings
.. automethod:: pybricks._common.Control.limits
+2 -5
View File
@@ -90,9 +90,6 @@ Vernier Adapter
^^^^^^^^^^^^^^^^^
.. autoclass:: pybricks.nxtdevices.VernierAdapter
.. toggle-header::
:header: **Show/hide example**
**Example: Using the Surface Temperature Sensor.**
**Example: Using the Surface Temperature Sensor.**
.. literalinclude:: ../../pybricks-projects/snippets/ev3/vernier_surface_temperature/main.py
.. literalinclude:: ../../examples/ev3/vernier_surface_temperature/main.py
+48
View File
@@ -0,0 +1,48 @@
Button
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. class:: Button
Buttons on a hub or remote.
.. autoattribute:: pybricks.parameters.Button.LEFT_DOWN
:annotation:
.. autoattribute:: pybricks.parameters.Button.LEFT_MINUS
:annotation:
.. autoattribute:: pybricks.parameters.Button.DOWN
:annotation:
.. autoattribute:: pybricks.parameters.Button.RIGHT_DOWN
:annotation:
.. autoattribute:: pybricks.parameters.Button.RIGHT_MINUS
:annotation:
.. autoattribute:: pybricks.parameters.Button.LEFT
:annotation:
.. autoattribute:: pybricks.parameters.Button.CENTER
:annotation:
.. autoattribute:: pybricks.parameters.Button.RIGHT
:annotation:
.. autoattribute:: pybricks.parameters.Button.LEFT_UP
:annotation:
.. autoattribute:: pybricks.parameters.Button.LEFT_PLUS
:annotation:
.. autoattribute:: pybricks.parameters.Button.UP
:annotation:
.. autoattribute:: pybricks.parameters.Button.BEACON
:annotation:
.. autoattribute:: pybricks.parameters.Button.RIGHT_UP
:annotation:
.. autoattribute:: pybricks.parameters.Button.RIGHT_PLUS
:annotation:
+84
View File
@@ -0,0 +1,84 @@
Color
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. autoclass:: pybricks.parameters.Color
:no-members:
.. rubric:: Saturated colors
These colors have maximum saturation and brightness value.
They differ only in hue.
.. autoattribute:: RED
.. pybricks-color:: RED
.. autoattribute:: ORANGE
.. pybricks-color:: ORANGE
.. autoattribute:: YELLOW
.. pybricks-color:: YELLOW
.. autoattribute:: GREEN
.. pybricks-color:: GREEN
.. autoattribute:: CYAN
.. pybricks-color:: CYAN
.. autoattribute:: BLUE
.. pybricks-color:: BLUE
.. autoattribute:: VIOLET
.. pybricks-color:: VIOLET
.. autoattribute:: MAGENTA
.. pybricks-color:: MAGENTA
.. rubric:: Unsaturated colors
These colors have zero hue and saturation. They differ only in brightness
value.
When detecting these colors using sensors, their values depend a lot
on the distance to the object. If the distance between the sensor and the
object is not constant in your robot, it is better to use only one of these
colors in your programs.
.. autoattribute:: WHITE
.. pybricks-color:: WHITE
.. autoattribute:: GRAY
.. pybricks-color:: GRAY
.. autoattribute:: BLACK
This represents dark objects that still reflect
a very small amount of light.
.. pybricks-color:: BLACK
.. autoattribute:: NONE
This is total darkness, with no reflection or light at all.
.. pybricks-color:: NONE
.. rubric:: Making your own colors
This example shows the basics of color properties, and how to define new colors.
.. literalinclude::
../../../examples/pup/parameters/color_basics.py
This example shows more advanced use cases of the ``Color`` class.
.. literalinclude::
../../../examples/pup/parameters/color_advanced.py
+24
View File
@@ -0,0 +1,24 @@
Direction
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. class:: Direction
Rotational direction for positive speed or angle values.
.. autoattribute:: pybricks.parameters.Direction.CLOCKWISE
:annotation:
.. autoattribute:: pybricks.parameters.Direction.COUNTERCLOCKWISE
:annotation:
+--------------------------------+-------------------+-----------------+
| ``positive_direction =`` | Positive speed: | Negative speed: |
+================================+===================+=================+
| ``Direction.CLOCKWISE`` | clockwise | counterclockwise|
+--------------------------------+-------------------+-----------------+
| ``Direction.COUNTERCLOCKWISE`` | counterclockwise | clockwise |
+--------------------------------+-------------------+-----------------+
In general, clockwise is defined by **looking at the motor shaft, just
like looking at a clock**. Some motors have two shafts. If in doubt,
refer to the diagram in the ``Motor`` class documentation.
+26
View File
@@ -0,0 +1,26 @@
:mod:`parameters <pybricks.parameters>` -- Parameters and Constants
===================================================================
.. automodule:: pybricks.parameters
:no-members:
.. toctree::
:maxdepth: 1
:hidden:
button
color
direction
port
stop
.. pybricks-classlink:: Button
.. pybricks-classlink:: Color
.. pybricks-classlink:: Direction
.. pybricks-classlink:: Port
.. pybricks-classlink:: Stop
+38
View File
@@ -0,0 +1,38 @@
Port
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. class:: Port
Input and output ports:
.. autoattribute:: pybricks.parameters.Port.A
:annotation:
.. autoattribute:: pybricks.parameters.Port.B
:annotation:
.. autoattribute:: pybricks.parameters.Port.C
:annotation:
.. autoattribute:: pybricks.parameters.Port.D
:annotation:
.. autoattribute:: pybricks.parameters.Port.E
:annotation:
.. autoattribute:: pybricks.parameters.Port.F
:annotation:
EV3 Sensor ports:
.. autoattribute:: pybricks.parameters.Port.S1
:annotation:
.. autoattribute:: pybricks.parameters.Port.S2
:annotation:
.. autoattribute:: pybricks.parameters.Port.S3
:annotation:
.. autoattribute:: pybricks.parameters.Port.S4
:annotation:
@@ -1,42 +1,22 @@
:mod:`parameters <pybricks.parameters>` -- Parameters and Constants
===================================================================
Stop
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. automodule:: pybricks.parameters
:no-members:
.. class:: Stop
.. autoclass:: pybricks.parameters.Port
:no-members:
Action after the motor stops.
Motor ports:
.. autoattribute:: pybricks.parameters.Stop.COAST
:annotation:
.. data:: A
.. data:: B
.. data:: C
.. data:: D
.. autoattribute:: pybricks.parameters.Stop.BRAKE
:annotation:
Sensor ports:
.. autoattribute:: pybricks.parameters.Stop.HOLD
:annotation:
.. data:: S1
.. data:: S2
.. data:: S3
.. data:: S4
.. autoclass:: pybricks.parameters.Direction
:no-members:
In general, clockwise is defined by **looking at the motor shaft, just
like looking at a clock**.
Some motors have two shafts. If in doubt, refer to the following diagrams:
- Clockwise direction for :ref:`EV3/NXT motors <fig_ev3motors>`
.. autoclass:: pybricks.parameters.Stop
:no-members:
The following table show how each stop type adds an extra level of
The following table shows how each stop type adds an extra level of
resistance to motion. In these examples, ``m`` is a
:class:`Motor <pybricks.ev3devices.Motor>` and
:class:`Motor <pybricks.pupdevices.Motor>` and
and ``d`` is a :class:`DriveBase <pybricks.robotics.DriveBase>`. The
examples also show how running at zero speed compares to these stop types.
@@ -58,9 +38,3 @@
| | | | | | | ``d.straight(0)`` |
| | | | | | | ``d.straight(100)`` |
+--------+------------+--------+-------------+---------------+-----------------------------------------+
.. autoclass:: pybricks.parameters.Color
:no-members:
.. autoclass:: pybricks.parameters.Button
:no-members:
@@ -0,0 +1,79 @@
Color and Distance Sensor
^^^^^^^^^^^^^^^^^^^^^^^^^
.. figure:: ../../api/images/sensor_colordistance.png
:width: 35 %
.. autoclass:: pybricks.pupdevices.ColorDistanceSensor
:no-members:
.. automethod:: pybricks.pupdevices.ColorDistanceSensor.color
.. automethod:: pybricks.pupdevices.ColorDistanceSensor.reflection
.. automethod:: pybricks.pupdevices.ColorDistanceSensor.ambient
.. automethod:: pybricks.pupdevices.ColorDistanceSensor.distance
.. automethod:: pybricks.pupdevices.ColorDistanceSensor.hsv
.. automethod:: pybricks.pupdevices.ColorDistanceSensor.detectable_colors
.. rubric:: Built-in light
This sensor has a built-in light. You can make it red, green, blue, or turn
it off. If you use the sensor to measure something afterwards, the light
automatically turns back on at the default color for that sensing method.
.. automethod:: pybricks.pupdevices::ColorDistanceSensor.light.on
.. automethod:: pybricks.pupdevices::ColorDistanceSensor.light.off
Examples
-------------------
Measuring color
***************
.. literalinclude::
../../../examples/pup/sensor_color_distance/color_print.py
Waiting for a color
*******************
.. literalinclude::
../../../examples/pup/sensor_color_distance/wait_for_color.py
Measuring distance
******************
.. literalinclude::
../../../examples/pup/sensor_color_distance/distance_blink.py
Blinking the built-in light
***************************
.. literalinclude::
../../../examples/pup/sensor_color_distance/distance_blink.py
Reading hue, saturation, value
**********************************
.. literalinclude::
../../../examples/pup/sensor_color_distance/hsv.py
Changing the detectable colors
******************************
By default, the sensor is configured to detect red, yellow, green,
blue, white, or no color, which suits many applications.
For better results in your application, you can measure your desired
colors in advance, and tell the sensor to look only for those colors.
Be sure to measure them at the **same distance and light conditions**
as in your final application. Then you'll get very accurate results
even for colors that are otherwise hard to detect.
.. literalinclude::
../../../examples/pup/sensor_color_distance/detectable_colors.py
+82
View File
@@ -0,0 +1,82 @@
Color Sensor
^^^^^^^^^^^^^^^^^^^^^^^^^
.. figure:: ../../api/images/sensor_color_lights_label.png
:width: 70 %
.. autoclass:: pybricks.pupdevices.ColorSensor
:no-members:
.. automethod:: pybricks.pupdevices.ColorSensor.color
.. automethod:: pybricks.pupdevices.ColorSensor.reflection
.. automethod:: pybricks.pupdevices.ColorSensor.ambient
.. rubric:: Advanced color sensing
.. automethod:: pybricks.pupdevices.ColorSensor.hsv
.. automethod:: pybricks.pupdevices.ColorSensor.detectable_colors
.. rubric:: Built-in lights
This sensor has 3 built-in lights. You can adjust the brightness of each
light. If you use the sensor to measure something, the lights will
be turned on or off as needed for the measurement.
.. automethod:: pybricks.pupdevices::ColorSensor.lights.on
.. automethod:: pybricks.pupdevices::ColorSensor.lights.off
Examples
-------------------
Measuring color and reflection
******************************
.. literalinclude::
../../../examples/pup/sensor_color/color_print.py
Waiting for a color
*******************
.. literalinclude::
../../../examples/pup/sensor_color/wait_for_color.py
Reading *reflected* hue, saturation, and value
************************************************
.. literalinclude::
../../../examples/pup/sensor_color/hsv.py
Changing the detectable colors
******************************
By default, the sensor is configured to detect red, yellow, green,
blue, white, or no color, which suits many applications.
For better results in your application, you can measure your desired
colors in advance, and tell the sensor to look only for those colors.
Be sure to measure them at the **same distance and light conditions**
as in your final application. Then you'll get very accurate results
even for colors that are otherwise hard to detect.
.. literalinclude::
../../../examples/pup/sensor_color/detectable_colors.py
Reading *ambient* hue, saturation, value, and color
***************************************************
.. literalinclude::
../../../examples/pup/sensor_color/color_ambient.py
Blinking the built-in lights
****************************
.. literalinclude::
../../../examples/pup/sensor_color/lights_blink.py
+45
View File
@@ -0,0 +1,45 @@
Motors without Rotation Sensors
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. _fig_pupdcmotors:
.. figure:: ../../api/images/pupdcmotors_label.png
:width: 70 %
:alt: pupmotors
:align: center
Powered Up motors without rotation sensors. The arrows indicate the default
positive direction.
.. autoclass:: pybricks.pupdevices.DCMotor
:no-members:
.. automethod:: pybricks.pupdevices.DCMotor.dc
:noindex:
.. automethod:: pybricks.pupdevices.DCMotor.stop
:noindex:
.. automethod:: pybricks.pupdevices.DCMotor.brake
:noindex:
Examples
-------------------
Making the motor move back and forth
************************************
.. literalinclude::
../../../examples/pup/motor_dc/motor_dc_init_basic.py
Changing the positive direction
*******************************
.. literalinclude::
../../../examples/pup/motor_dc/motor_dc_init_direction.py
Starting and stopping
*********************
.. literalinclude::
../../../examples/pup/motor_dc/motor_dc_stop.py
+31
View File
@@ -0,0 +1,31 @@
Force Sensor
^^^^^^^^^^^^^^^^^^^^^^^^^
.. figure:: ../../api/images/sensor_force.png
:width: 35 %
.. autoclass:: pybricks.pupdevices.ForceSensor
:no-members:
.. automethod:: pybricks.pupdevices.ForceSensor.force
.. automethod:: pybricks.pupdevices.ForceSensor.distance
.. automethod:: pybricks.pupdevices.ForceSensor.pressed
.. automethod:: pybricks.pupdevices.ForceSensor.touched
Examples
-------------------
Measuring force and movement
****************************
.. literalinclude::
../../../examples/pup/sensor_force/basics.py
Measuring peak force
********************
.. literalinclude::
../../../examples/pup/sensor_force/peak.py
+80
View File
@@ -0,0 +1,80 @@
:mod:`pupdevices <pybricks.pupdevices>` -- Powered Up Devices
=============================================================
.. automodule:: pybricks.pupdevices
:no-members:
.. toctree::
:maxdepth: 1
:hidden:
dcmotor
motor
tiltsensor
infraredsensor
colordistancesensor
pfmotor
colorsensor
ultrasonicsensor
forcesensor
light
.. pybricks-classlink:: DCMotor
.. figure:: ../../api/images/pupdcmotors_label.png
:width: 70 %
:target: dcmotor.html
.. pybricks-classlink:: Motor
.. figure:: ../../api/images/pupmotors_label.png
:width: 100 %
:target: motor.html
.. pybricks-classlink:: TiltSensor
.. figure:: ../../api/images/sensor_tilt.png
:width: 35 %
:target: tiltsensor.html
.. pybricks-classlink:: InfraredSensor
.. figure:: ../../api/images/sensor_proximity.png
:width: 35 %
:target: infraredsensor.html
.. pybricks-classlink:: ColorDistanceSensor
.. figure:: ../../api/images/sensor_colordistance.png
:width: 32 %
:target: colordistancesensor.html
.. pybricks-classlink:: PFMotor
.. figure:: ../../api/images/pfmotor.png
:width: 95 %
:target: pfmotor.html
.. pybricks-classlink:: ColorSensor
.. figure:: ../../api/images/sensor_color.png
:width: 32 %
:target: colorsensor.html
.. pybricks-classlink:: UltrasonicSensor
.. figure:: ../../api/images/sensor_ultrasonic.png
:width: 37 %
:target: ultrasonicsensor.html
.. pybricks-classlink:: ForceSensor
.. figure:: ../../api/images/sensor_force.png
:width: 35 %
:target: forcesensor.html
.. pybricks-classlink:: Light
.. figure:: ../../api/images/light.png
:width: 90 %
:target: light.html
+23
View File
@@ -0,0 +1,23 @@
Infrared Sensor
^^^^^^^^^^^^^^^^^^^^^^^^^
.. figure:: ../../api/images/sensor_proximity.png
:width: 35 %
.. autoclass:: pybricks.pupdevices.InfraredSensor
:no-members:
.. automethod:: pybricks.pupdevices.InfraredSensor.distance
.. automethod:: pybricks.pupdevices.InfraredSensor.reflection
.. automethod:: pybricks.pupdevices.InfraredSensor.count
Examples
-------------------
Measuring distance, object count, and reflection
************************************************
.. literalinclude::
../../../examples/pup/sensor_infrared/basics.py
+27
View File
@@ -0,0 +1,27 @@
Light
^^^^^^^^^^^^^^^^^^^^^^^^^
.. figure:: ../../api/images/light.png
:width: 90 %
.. autoclass:: pybricks.pupdevices.Light
:no-members:
.. automethod:: pybricks.pupdevices.Light.on
.. automethod:: pybricks.pupdevices.Light.off
Examples
-------------------
Making the light blink
**********************
.. literalinclude::
../../../examples/pup/light/basics.py
Gradually change the brightness
*******************************
.. literalinclude::
../../../examples/pup/light/math.py
+152
View File
@@ -0,0 +1,152 @@
Motors with Rotation Sensors
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. _fig_pupmotors:
.. figure:: ../../api/images/pupmotors_label.png
:width: 100 %
:alt: pupmotors
Powered Up motors with rotation sensors. The arrows indicate the default
positive direction. See the :mod:`hubs <pybricks.hubs>` module for default
directions of built-in motors.
.. autoclass:: pybricks.pupdevices.Motor
:no-members:
.. rubric:: Measuring
.. automethod:: pybricks.pupdevices.Motor.speed
.. automethod:: pybricks.pupdevices.Motor.angle
.. automethod:: pybricks.pupdevices.Motor.reset_angle
.. rubric:: Stopping
.. automethod:: pybricks.pupdevices.Motor.stop
.. automethod:: pybricks.pupdevices.Motor.brake
.. automethod:: pybricks.pupdevices.Motor.hold
.. rubric:: Action
.. automethod:: pybricks.pupdevices.Motor.run
.. automethod:: pybricks.pupdevices.Motor.run_time
.. automethod:: pybricks.pupdevices.Motor.run_angle
.. automethod:: pybricks.pupdevices.Motor.run_target
.. automethod:: pybricks.pupdevices.Motor.run_until_stalled
.. automethod:: pybricks.pupdevices.Motor.dc
.. rubric:: Advanced motion control
.. automethod:: pybricks.pupdevices.Motor.track_target
.. autoattribute:: pybricks.ev3devices.Motor.control
:annotation:
:noindex:
.. FIXME: above should point to pupdevices but inherited class attributes
do not work yet (https://github.com/sphinx-doc/sphinx/issues/741).
Initialization Examples
-----------------------
Making the motor move back and forth
*******************************************************
.. literalinclude::
../../../examples/pup/motor/motor_init_basic.py
Initializing multiple motors
*******************************************************
.. literalinclude::
../../../examples/pup/motor/motor_init_multiple.py
Setting the positive direction as counterclockwise
*******************************************************
.. literalinclude::
../../../examples/pup/motor/motor_init_direction.py
Using gears
*******************************************************
.. literalinclude::
../../../examples/pup/motor/motor_init_gears.py
Measurement Examples
-----------------------
Measuring the angle and speed
*******************************************************
.. literalinclude::
../../../examples/pup/motor/motor_measure.py
Resetting the measured angle
*******************************************************
.. literalinclude::
../../../examples/pup/motor/motor_reset_angle.py
Movement Examples
-----------------------
Basic usage of all run methods
*******************************************************
.. literalinclude::
../../../examples/pup/motor/motor_action_basic.py
Stopping ongoing movements in different ways
*******************************************************
.. literalinclude::
../../../examples/pup/motor/motor_stop.py
Using the ``then`` argument to change how a run command stops
*************************************************************
.. literalinclude::
../../../examples/pup/motor/motor_action_then.py
Stall Examples
-----------------------
Running a motor until a mechanical endpoint
*******************************************************
.. literalinclude::
../../../examples/pup/motor/motor_until_stalled.py
Centering a steering mechanism
*******************************************************
.. literalinclude::
../../../examples/pup/motor/motor_until_stalled.py
Parallel Movement Examples
--------------------------
Using the ``wait`` argument to run motors in parallel
*********************************************************
.. literalinclude::
../../../examples/pup/motor/motor_action_wait.py
Waiting for two parallel actions to complete
*******************************************************
.. literalinclude::
../../../examples/pup/motor/motor_action_wait_advanced.py
+45
View File
@@ -0,0 +1,45 @@
Power Functions
^^^^^^^^^^^^^^^^^^^^^^^^^
The :class:`ColorDistanceSensor <pybricks.pupdevices.ColorDistanceSensor>` can
send infrared signals to control Power Functions infrared receivers. You can
use this technique to control medium, large, extra large, and train
motors. The infrared range is limited to about 30 cm, depending on the angle
and ambient conditions.
.. figure:: ../../api/images/pfmotor.png
:width: 95 %
Powered Up
:class:`ColorDistanceSensor <pybricks.pupdevices.ColorDistanceSensor>`
(left), Power Functions infrared receiver (middle), and a Power Functions
motor (right). Here, the receiver uses channel
1 with a motor on the red port.
.. autoclass:: pybricks.pupdevices.PFMotor
:noindex:
:no-members:
.. automethod:: pybricks.pupdevices.PFMotor.dc
:noindex:
.. automethod:: pybricks.pupdevices.PFMotor.stop
:noindex:
.. automethod:: pybricks.pupdevices.PFMotor.brake
:noindex:
Examples
-------------------
Control a Power Functions motor
*******************************
.. literalinclude::
../../../examples/pup/motor_pf/motor_pf_basics.py
Controlling multiple Power Functions motors
*******************************************
.. literalinclude::
../../../examples/pup/motor_pf/motor_pf_pwm.py
+19
View File
@@ -0,0 +1,19 @@
Tilt Sensor
^^^^^^^^^^^^^^^^^^^^^^^^^
.. figure:: ../../api/images/sensor_tilt.png
:width: 35 %
.. autoclass:: pybricks.pupdevices.TiltSensor
:no-members:
.. automethod:: tilt
Examples
-------------------
Measuring pitch and roll
************************
.. literalinclude::
../../../examples/pup/sensor_tilt/basics.py
+36
View File
@@ -0,0 +1,36 @@
Ultrasonic Sensor
^^^^^^^^^^^^^^^^^^^^^^^^^
.. figure:: ../../api/images/sensor_ultrasonic_lights_label.png
:width: 80 %
.. autoclass:: pybricks.pupdevices.UltrasonicSensor
:no-members:
.. automethod:: pybricks.pupdevices.UltrasonicSensor.distance
.. automethod:: pybricks.pupdevices.UltrasonicSensor.presence
.. rubric:: Built-in lights
This sensor has 4 built-in lights. You can adjust the brightness of each
light.
.. automethod:: pybricks.pupdevices::UltrasonicSensor.lights.on
.. automethod:: pybricks.pupdevices::UltrasonicSensor.lights.off
Examples
-------------------
Measuring distance and switching on the lights
**********************************************
.. literalinclude::
../../../examples/pup/sensor_ultrasonic/basics.py
Gradually change the brightness of the lights
**********************************************
.. literalinclude::
../../../examples/pup/sensor_ultrasonic/math.py

Some files were not shown because too many files have changed in this diff Show More