commit 27fc2d2757076b3c0160f4382a55824f00d1c23f Author: Thomas Müller Date: Mon May 18 19:49:40 2026 +0200 Start diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ebd7e1b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +ssh-zugang-raspberry-pi.txt diff --git a/ExoMy_Software-master/.gitignore b/ExoMy_Software-master/.gitignore new file mode 100644 index 0000000..4620d75 --- /dev/null +++ b/ExoMy_Software-master/.gitignore @@ -0,0 +1,2 @@ +*.pyc +config/exomy.yaml \ No newline at end of file diff --git a/ExoMy_Software-master/CMakeLists.txt b/ExoMy_Software-master/CMakeLists.txt new file mode 100644 index 0000000..abfa88c --- /dev/null +++ b/ExoMy_Software-master/CMakeLists.txt @@ -0,0 +1,203 @@ +cmake_minimum_required(VERSION 2.8.3) +project(exomy) + +## Compile as C++11, supported in ROS Kinetic and newer +# add_compile_options(-std=c++11) + +## Find catkin macros and libraries +## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) +## is used, also find other catkin packages +find_package(catkin REQUIRED COMPONENTS + rospy + std_msgs + sensor_msgs + message_generation +) + +## System dependencies are found with CMake's conventions +# find_package(Boost REQUIRED COMPONENTS system) +# find_package(python-rpi.gpio REQUIRED) + + +## Uncomment this if the package has a setup.py. This macro ensures +## modules and global scripts declared therein get installed +## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html +# catkin_python_setup() + +################################################ +## Declare ROS messages, services and actions ## +################################################ + +## To declare and build messages, services or actions from within this +## package, follow these steps: +## * Let MSG_DEP_SET be the set of packages whose message types you use in +## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). +## * In the file package.xml: +## * add a build_depend tag for "message_generation" +## * add a build_depend and a exec_depend tag for each package in MSG_DEP_SET +## * If MSG_DEP_SET isn't empty the following dependency has been pulled in +## but can be declared for certainty nonetheless: +## * add a exec_depend tag for "message_runtime" +## * In this file (CMakeLists.txt): +## * add "message_generation" and every package in MSG_DEP_SET to +## find_package(catkin REQUIRED COMPONENTS ...) +## * add "message_runtime" and every package in MSG_DEP_SET to +## catkin_package(CATKIN_DEPENDS ...) +## * uncomment the add_*_files sections below as needed +## and list every .msg/.srv/.action file to be processed +## * uncomment the generate_messages entry below +## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) + +## Generate messages in the 'msg' folder +add_message_files( + FILES + RoverCommand.msg + MotorCommands.msg + Screen.msg + ) +## Generate services in the 'srv' folder +# add_service_files( +# FILES +# Service1.srv +# Service2.srv +# ) + +## Generate actions in the 'action' folder +# add_action_files( +# FILES +# Action1.action +# Action2.action +# ) + +## Generate added messages and services with any dependencies listed here + generate_messages( + DEPENDENCIES + sensor_msgs + std_msgs + ) + +################################################ +## Declare ROS dynamic reconfigure parameters ## +################################################ + +## To declare and build dynamic reconfigure parameters within this +## package, follow these steps: +## * In the file package.xml: +## * add a build_depend and a exec_depend tag for "dynamic_reconfigure" +## * In this file (CMakeLists.txt): +## * add "dynamic_reconfigure" to +## find_package(catkin REQUIRED COMPONENTS ...) +## * uncomment the "generate_dynamic_reconfigure_options" section below +## and list every .cfg file to be processed + +## Generate dynamic reconfigure parameters in the 'cfg' folder +# generate_dynamic_reconfigure_options( +# cfg/DynReconf1.cfg +# cfg/DynReconf2.cfg +# ) + +################################### +## catkin specific configuration ## +################################### +## The catkin_package macro generates cmake config files for your package +## Declare things to be passed to dependent projects +## INCLUDE_DIRS: uncomment this if your package contains header files +## LIBRARIES: libraries you create in this project that dependent projects also need +## CATKIN_DEPENDS: catkin_packages dependent projects also need +## DEPENDS: system dependencies of this project that dependent projects also need +catkin_package( +# INCLUDE_DIRS include +# LIBRARIES exomy + CATKIN_DEPENDS rospy std_msgs sensor_msgs message_runtime +# DEPENDS python-rpi.gpio +) + +########### +## Build ## +########### + +## Specify additional locations of header files +## Your package locations should be listed before other locations +include_directories( +# include + ${catkin_INCLUDE_DIRS} +) + +## Declare a C++ library +# add_library(${PROJECT_NAME} +# src/${PROJECT_NAME}/exomy.cpp +# ) + +## Add cmake target dependencies of the library +## as an example, code may need to be generated before libraries +## either from message generation or dynamic reconfigure +# add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Declare a C++ executable +## With catkin_make all packages are built within a single CMake context +## The recommended prefix ensures that target names across packages don't collide +# add_executable(${PROJECT_NAME}_node src/exomy_node.cpp) + +## Rename C++ executable without prefix +## The above recommended prefix causes long target names, the following renames the +## target back to the shorter version for ease of user use +## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node" +# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "") + +## Add cmake target dependencies of the executable +## same as for the library above +# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Specify libraries to link a library or executable target against +# target_link_libraries(${PROJECT_NAME}_node +# ${catkin_LIBRARIES} +# ${python-rpi.gpio_LIBRARIES} +# ) + +############# +## Install ## +############# + +# all install targets should use catkin DESTINATION variables +# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html + +## Mark executable scripts (Python etc.) for installation +## in contrast to setup.py, you can choose the destination +# install(PROGRAMS +# scripts/my_python_script +# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark executables and/or libraries for installation +# install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_node +# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark cpp header files for installation +# install(DIRECTORY include/${PROJECT_NAME}/ +# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} +# FILES_MATCHING PATTERN "*.h" +# PATTERN ".svn" EXCLUDE +# ) + +## Mark other files for installation (e.g. launch and bag files, etc.) +# install(FILES +# # myfile1 +# # myfile2 +# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} +# ) + +############# +## Testing ## +############# + +## Add gtest based cpp test target and link libraries +# catkin_add_gtest(${PROJECT_NAME}-test test/test_exomy.cpp) +# if(TARGET ${PROJECT_NAME}-test) +# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) +# endif() + +## Add folders to be run by python nosetests +# catkin_add_nosetests(test) diff --git a/ExoMy_Software-master/LICENSE b/ExoMy_Software-master/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/ExoMy_Software-master/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/ExoMy_Software-master/README.md b/ExoMy_Software-master/README.md new file mode 100644 index 0000000..89553bb --- /dev/null +++ b/ExoMy_Software-master/README.md @@ -0,0 +1,34 @@ +# ExoMy - Software Repository +This repository contains the software to run Exomy. The [wiki](https://github.com/esa-prl/ExoMy/wiki) explains you how to use it. + +![ExoMy image](https://github.com/esa-prl/ExoMy/wiki/images/renderings/2020_02_25.JPG) + +# ExoMy Project Structure + +### [Website](https://esa-prl.github.io/ExoMy/) +There is a website about ExoMy. It does not help you build it, but is still nice to look at. + +### [Wiki](https://github.com/esa-prl/ExoMy/wiki) +The [wiki](https://github.com/esa-prl/ExoMy/wiki) contains step by step instructions on how the 3D-printed rover ExoMy can be built, controlled and customized. + +### [Documentation Repository](https://github.com/esa-prl/ExoMy) +This repository contains all the files of the documentation of ExoMy. Just click on [*Releases*](https://github.com/esa-prl/ExoMy/releases) and download the files of the latest release. They are explained further in the [wiki](https://github.com/esa-prl/ExoMy/wiki). + +### Social Media + + + + +

+ + Join the Community! +

+

+ + @ExoMy_Rover +

+

+ + @ExoMy_Rover +

+ diff --git a/ExoMy_Software-master/config/exomy.yaml.template b/ExoMy_Software-master/config/exomy.yaml.template new file mode 100644 index 0000000..52e3e8b --- /dev/null +++ b/ExoMy_Software-master/config/exomy.yaml.template @@ -0,0 +1,45 @@ +# Naming conventions: +# +# fl - front left | fr - front right +# cl - center left | cr - center right +# rl - rear left | rr - rear right + +# Pin numbers for motors on PWM board +pin_drive_fl: 14 +pin_steer_fl: 12 + +pin_drive_fr: 2 +pin_steer_fr: 0 + +pin_drive_cl: 6 +pin_steer_cl: 7 + +pin_drive_cr: 4 +pin_steer_cr: 5 + +pin_drive_rl: 15 +pin_steer_rl: 13 + +pin_drive_rr: 3 +pin_steer_rr: 1 + +## PWM values +# Those values highly depend on the motors and pwm board used +# Check out the wiki for further explanation + +# PWM values for the neutral steering position +steer_pwm_neutral_fl: 300 +steer_pwm_neutral_fr: 300 +steer_pwm_neutral_cl: 300 +steer_pwm_neutral_cr: 300 +steer_pwm_neutral_rl: 300 +steer_pwm_neutral_rr: 300 + +# PWW range around steering neutral position +steer_pwm_range: 250 + +# PWM value for the stop position of driving motors +drive_pwm_neutral: 307 + +# PWW range around driving neutral position +drive_pwm_range: 100 diff --git a/ExoMy_Software-master/docker/Dockerfile b/ExoMy_Software-master/docker/Dockerfile new file mode 100644 index 0000000..1a01fef --- /dev/null +++ b/ExoMy_Software-master/docker/Dockerfile @@ -0,0 +1,36 @@ +# Base image +FROM ros:melodic + +ENV TZ=Europe/Amsterdam +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +# Basic tools +RUN apt-get update && \ + apt-get install vim nano git tmux wget curl python-pip net-tools iputils-ping -y + +# Install additional ros packages +RUN apt-get update && apt-get install ros-melodic-rosbridge-server ros-melodic-joy -y +RUN pip install adafruit-pca9685 + + +# Install packages for web application +RUN curl -sL https://deb.nodesource.com/setup_12.x | bash - +RUN apt-get update && \ + apt-get install nodejs -y +RUN npm install http-server -g + +# Install packages for camera use +RUN apt-get update && \ + apt-get install ros-melodic-web-video-server ros-melodic-usb-cam -y + +# Add ros sourcing to bashrc +RUN echo ". /opt/ros/melodic/setup.bash" >> ~/.bashrc + +# Create Ros workspace +ENV EXOMY_WS=/root/exomy_ws +RUN mkdir -p $EXOMY_WS/src + +WORKDIR /root + +COPY ./entrypoint.sh / +ENTRYPOINT ["/entrypoint.sh"] diff --git a/ExoMy_Software-master/docker/entrypoint.sh b/ExoMy_Software-master/docker/entrypoint.sh new file mode 100644 index 0000000..04294eb --- /dev/null +++ b/ExoMy_Software-master/docker/entrypoint.sh @@ -0,0 +1,27 @@ +#!/bin/bash +if [[ $1 == "config" ]] +then + cd /root/exomy_ws/src/exomy/scripts + bash +elif [[ $1 == "autostart" ]] +then + source /opt/ros/melodic/setup.bash + cd /root/exomy_ws + catkin_make + http-server src/exomy/gui -p 8000 & + + source devel/setup.bash + roslaunch exomy exomy.launch + + bash +elif [[ $1 == "devel" ]] +then + cd /root/exomy_ws + source /opt/ros/melodic/setup.bash + # catkin_make + # source devel/setup.bash + bash +else + bash +fi + diff --git a/ExoMy_Software-master/docker/run_exomy.sh b/ExoMy_Software-master/docker/run_exomy.sh new file mode 100644 index 0000000..bb97e54 --- /dev/null +++ b/ExoMy_Software-master/docker/run_exomy.sh @@ -0,0 +1,75 @@ +#!/bin/bash +# run_exomy- A script to run containers for dedicated functions of exomy + +help_text="Usage: "$0" [MODE] [OPTIONS] + A script to run ExoMy in different configurations + Options: + -a, --autostart Toggles autostart mode on or off + -c, --config Runs the motor configuration of ExoMy + -d, --devel Runs the development mode to change some code of ExoMy + -h, --help Shows this text +" + +### Main +# Initialize parameters +container_name="exomy" +image_name="exomy" + +# Process parameters +if [ "$1" != "" ]; then + case $1 in + -a | --autostart) + container_name="${container_name}_autostart" + start_command="autostart" + options="--restart always" + + ;; + -s | --stop_autostart) + docker container stop "${container_name}_autostart" + exit + ;; + -c | --config) + container_name="${container_name}_config" + start_command="config" + options="--rm" + ;; + -d | --devel) + container_name="${container_name}_devel" + start_command="devel" + options="--restart always" + ;; + -h | --help ) echo "$help_text" + exit + ;; + * ) echo "ERROR: Not a valid mode!" + echo "$help_text" + exit 1 + esac +else + echo "ERROR: You need to specify a mode!" + echo "$help_text" + exit +fi + +# Build docker image from Dockerfile in directory +directory=$( dirname "$0" ) +docker build -t $image_name $directory + +# Stop any of the 3 containers if running +RUNNING_CONTAINERS=$( docker container ls -a -q --filter ancestor=exomy ) +if [ -n "$RUNNING_CONTAINERS" ]; then + docker rm -f "$RUNNING_CONTAINERS" +fi + +# Run docker container +docker run \ + -it \ + -v ~/ExoMy_Software:/root/exomy_ws/src/exomy \ + -p 8000:8000 \ + -p 8080:8080 \ + -p 9090:9090 \ + --privileged \ + ${options} \ + --name "${container_name}" \ + "${image_name}" \ + "${start_command}" diff --git a/ExoMy_Software-master/gui/index.html b/ExoMy_Software-master/gui/index.html new file mode 100644 index 0000000..11ab154 --- /dev/null +++ b/ExoMy_Software-master/gui/index.html @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + +
+
+
+
+
+ +
+
+ +
+
+ +
+
+ + + diff --git a/ExoMy_Software-master/gui/node_modules/nipplejs/CHANGELOG.md b/ExoMy_Software-master/gui/node_modules/nipplejs/CHANGELOG.md new file mode 100644 index 0000000..0fbf8b0 --- /dev/null +++ b/ExoMy_Software-master/gui/node_modules/nipplejs/CHANGELOG.md @@ -0,0 +1,386 @@ + +## [0.8.5](https://github.com/yoannmoinet/nipplejs/compare/v0.8.4...v0.8.5) (2020-01-27) + + + + +## [0.8.4](https://github.com/yoannmoinet/nipplejs/compare/v0.7.3...v0.8.4) (2019-11-28) + + +### Bug Fixes + +* allow older typescript ([c164597](https://github.com/yoannmoinet/nipplejs/commit/c164597)) +* better lockX and lockY mecanism ([8355fb8](https://github.com/yoannmoinet/nipplejs/commit/8355fb8)), closes [#111](https://github.com/yoannmoinet/nipplejs/issues/111) +* joystick in 'dynamic' mode gets stuck on iOS ([94bb784](https://github.com/yoannmoinet/nipplejs/commit/94bb784)), closes [#94](https://github.com/yoannmoinet/nipplejs/issues/94) +* released outside will be considered inside ([9a8a7b4](https://github.com/yoannmoinet/nipplejs/commit/9a8a7b4)), closes [#109](https://github.com/yoannmoinet/nipplejs/issues/109) +* reset direction when below the threshold ([6f41b38](https://github.com/yoannmoinet/nipplejs/commit/6f41b38)), closes [#110](https://github.com/yoannmoinet/nipplejs/issues/110) + + +### Features + +* add an options to use with dynamic pages ([8258501](https://github.com/yoannmoinet/nipplejs/commit/8258501)) +* add raw data on move for data-only usage ([c818fb2](https://github.com/yoannmoinet/nipplejs/commit/c818fb2)), closes [#54](https://github.com/yoannmoinet/nipplejs/issues/54) +* add unit vector representation to move event output ([a4496fe](https://github.com/yoannmoinet/nipplejs/commit/a4496fe)) +* upgrade dev experience with webpack and es6 ([cc1e824](https://github.com/yoannmoinet/nipplejs/commit/cc1e824)) + + + + +## [0.7.3](https://github.com/yoannmoinet/nipplejs/compare/v0.7.2...v0.7.3) (2018-12-11) + + + + +## [0.7.2](https://github.com/yoannmoinet/nipplejs/compare/v0.7.1...v0.7.2) (2018-12-11) + + +### Features + +* Add TypeScript Definitions ([#85](https://github.com/yoannmoinet/nipplejs/issues/85)) ([0b1f4ae](https://github.com/yoannmoinet/nipplejs/commit/0b1f4ae)), closes [#21](https://github.com/yoannmoinet/nipplejs/issues/21) + + + + +## [0.7.1](https://github.com/yoannmoinet/nipplejs/compare/v0.7.0...v0.7.1) (2018-06-06) + + + + +# [0.7.0](https://github.com/yoannmoinet/nipplejs/compare/v0.6.8...v0.7.0) (2018-06-06) + + +### Bug Fixes + +* register touchcancel and pointercancel events ([2c541a6](https://github.com/yoannmoinet/nipplejs/commit/2c541a6)) + + +### Features + +* **joystick:** add lockX and lockY options ([6baba97](https://github.com/yoannmoinet/nipplejs/commit/6baba97)) + + + + +## [0.6.8](https://github.com/yoannmoinet/nipplejs/compare/v0.6.7...v0.6.8) (2017-12-19) + + +### Bug Fixes + +* add touchcancel handling as touchend for events coming from outside ([ebc501e](https://github.com/yoannmoinet/nipplejs/commit/ebc501e)), closes [#61](https://github.com/yoannmoinet/nipplejs/issues/61) [#57](https://github.com/yoannmoinet/nipplejs/issues/57) [#33](https://github.com/yoannmoinet/nipplejs/issues/33) [#31](https://github.com/yoannmoinet/nipplejs/issues/31) [#30](https://github.com/yoannmoinet/nipplejs/issues/30) +* update manager with changing identifier ([45ec1d7](https://github.com/yoannmoinet/nipplejs/commit/45ec1d7)), closes [#64](https://github.com/yoannmoinet/nipplejs/issues/64) + + +### Features + +* add restJoystick option ([55b6482](https://github.com/yoannmoinet/nipplejs/commit/55b6482)) + + + + +## [0.6.7](https://github.com/yoannmoinet/nipplejs/compare/v0.6.6...v0.6.7) (2016-10-27) + + +### Bug Fixes + +* **events:** trigger events with the correct id and not identifier ([17f0fe6](https://github.com/yoannmoinet/nipplejs/commit/17f0fe6)) +* **identifier:** better identifier management ([ff44916](https://github.com/yoannmoinet/nipplejs/commit/ff44916)) +* update dependencies ([73bcda9](https://github.com/yoannmoinet/nipplejs/commit/73bcda9)) + + + + +## [0.6.6](https://github.com/yoannmoinet/nipplejs/compare/v0.6.5...v0.6.6) (2016-08-23) + + +### Bug Fixes + +* **bin:** adapt slashes to windows if needed ([7dffd7c](https://github.com/yoannmoinet/nipplejs/commit/7dffd7c)) +* **bin:** add missing space ([48f6a1f](https://github.com/yoannmoinet/nipplejs/commit/48f6a1f)) +* **bin:** make the copyToGhPages script windows compatible ([11da89a](https://github.com/yoannmoinet/nipplejs/commit/11da89a)) +* **dataOnly:** conserve chainability even with dataOnly ([d1eddd0](https://github.com/yoannmoinet/nipplejs/commit/d1eddd0)) + + + + +## [0.6.5](https://github.com/yoannmoinet/nipplejs/compare/v0.6.4...v0.6.5) (2016-08-15) + + +### Bug Fixes + +* **collection:** avoid any native touch action on the `options.zone` ([bea2c42](https://github.com/yoannmoinet/nipplejs/commit/bea2c42)) + + + + +## [0.6.4](https://github.com/yoannmoinet/nipplejs/compare/v0.6.3...v0.6.4) (2016-07-20) + + +### Bug Fixes + +* **nipple:** remove size of container and apply on children only ([0033342](https://github.com/yoannmoinet/nipplejs/commit/0033342)), closes [#32](https://github.com/yoannmoinet/nipplejs/issues/32) + + + + +## [0.6.3](https://github.com/yoannmoinet/nipplejs/compare/v0.6.2...v0.6.3) (2016-05-29) + + +### Bug Fixes + +* **manager:** add missing closing bracket ([9b99637](https://github.com/yoannmoinet/nipplejs/commit/9b99637)) +* **resize:** listen to resize via event instead of global handler ([14c28f1](https://github.com/yoannmoinet/nipplejs/commit/14c28f1)) + + + + +## [0.6.2](https://github.com/yoannmoinet/nipplejs/compare/v0.6.1...v0.6.2) (2015-12-31) + + + + +## [0.6.1](https://github.com/yoannmoinet/nipplejs/compare/v0.6.0...v0.6.1) (2015-12-26) + + +### Bug Fixes + +* **collection:** trigger `start` event before any potential direction ([c5441fd](https://github.com/yoannmoinet/nipplejs/commit/c5441fd)) +* **nipple:** fragment control of previous directions ([790fa26](https://github.com/yoannmoinet/nipplejs/commit/790fa26)), closes [#25](https://github.com/yoannmoinet/nipplejs/issues/25) + + +### Features + +* **nipple:** add `resetDirection()` to cancel previous directions ([66f6e3b](https://github.com/yoannmoinet/nipplejs/commit/66f6e3b)) + + + + +# [0.6.0](https://github.com/yoannmoinet/nipplejs/compare/v0.5.6...v0.6.0) (2015-11-29) + + +### Bug Fixes + +* clean identifier if not found in any collection ([3496395](https://github.com/yoannmoinet/nipplejs/commit/3496395)) +* handle scrolling offset by resetting zone's box ([6ccd0b5](https://github.com/yoannmoinet/nipplejs/commit/6ccd0b5)) +* remove useless injections ([a0b1d7e](https://github.com/yoannmoinet/nipplejs/commit/a0b1d7e)) +* return the found nipple in `get()` ([439aa69](https://github.com/yoannmoinet/nipplejs/commit/439aa69)) +* unbind document when collection is manually destroyed ([6e66b62](https://github.com/yoannmoinet/nipplejs/commit/6e66b62)) +* **nipple:** call off() after triggering ([bf8e5c3](https://github.com/yoannmoinet/nipplejs/commit/bf8e5c3)) +* **nipple:** only trigger itself, not its manager ([6b39786](https://github.com/yoannmoinet/nipplejs/commit/6b39786)) +* **super:** move internal declarations where needed ([a4c79c2](https://github.com/yoannmoinet/nipplejs/commit/a4c79c2)) +* **utils:** return object on u.extend ([9197c00](https://github.com/yoannmoinet/nipplejs/commit/9197c00)) + + +### Features + +* **nipple:** add an incremental id to absolutely differentiate each ([598a5eb](https://github.com/yoannmoinet/nipplejs/commit/598a5eb)) +* **utils:** add u.map to execute fn in array or single element ([515aa5d](https://github.com/yoannmoinet/nipplejs/commit/515aa5d)) +* **utils:** add u.safeExtend to only replace existent attributes ([5212ffe](https://github.com/yoannmoinet/nipplejs/commit/5212ffe)) + + +### Performance Improvements + +* safety clean if nipple isn't found in collection ([ca20985](https://github.com/yoannmoinet/nipplejs/commit/ca20985)) + + + + +## [0.5.6](https://github.com/yoannmoinet/nipplejs/compare/v0.5.5...v0.5.6) (2015-11-09) + + + + +## [0.5.5](https://github.com/yoannmoinet/nipplejs/compare/v0.5.4...v0.5.5) (2015-11-09) + + +### Bug Fixes + +* **manager:** allow multitouch to be more than 1 ([7569536](https://github.com/yoannmoinet/nipplejs/commit/7569536)) +* **manager:** clean the start process, no duplicate ([7e30551](https://github.com/yoannmoinet/nipplejs/commit/7e30551)) +* **manager:** remove handler only if last touch ([1f03064](https://github.com/yoannmoinet/nipplejs/commit/1f03064)) + + + + +## [0.5.4](https://github.com/yoannmoinet/nipplejs/compare/v0.5.3...v0.5.4) (2015-11-08) + + +### Bug Fixes + +* **manager:** better handle identifiers ([54b3cff](https://github.com/yoannmoinet/nipplejs/commit/54b3cff)), closes [#16](https://github.com/yoannmoinet/nipplejs/issues/16) +* **nipple:** use `document.body.contains` for IE11 doesn't shortcut ([6e5b80a](https://github.com/yoannmoinet/nipplejs/commit/6e5b80a)), closes [#17](https://github.com/yoannmoinet/nipplejs/issues/17) + + + + +## [0.5.3](https://github.com/yoannmoinet/nipplejs/compare/v0.5.2...v0.5.3) (2015-10-04) + + +### Bug Fixes + +* **manager:** add back pressure variable... oups ([a46982f](https://github.com/yoannmoinet/nipplejs/commit/a46982f)) + + + + +## [0.5.2](https://github.com/yoannmoinet/nipplejs/compare/v0.5.1...v0.5.2) (2015-10-04) + + +### Bug Fixes + +* **manager:** correctly unbind all events when destroying manager ([e3f96ef](https://github.com/yoannmoinet/nipplejs/commit/e3f96ef)) +* **utils:** handle touch based on their event's type ([406a7b2](https://github.com/yoannmoinet/nipplejs/commit/406a7b2)) + + +### Features + +* **manager:** better pressure management cross-plateform ([d867812](https://github.com/yoannmoinet/nipplejs/commit/d867812)) + + + + +## [0.5.1](https://github.com/yoannmoinet/nipplejs/compare/v0.5.0...v0.5.1) (2015-10-03) + + +### Bug Fixes + +* **nipple:** remove useless backPosition ([4c76adc](https://github.com/yoannmoinet/nipplejs/commit/4c76adc)) +* **super:** better inheritance ([4a3a8dc](https://github.com/yoannmoinet/nipplejs/commit/4a3a8dc)) + + + + +# [0.5.0](https://github.com/yoannmoinet/nipplejs/compare/v0.4.2...v0.5.0) (2015-09-29) + + +### Bug Fixes + +* **manager:** add default pressure at 0 ([1cb31d0](https://github.com/yoannmoinet/nipplejs/commit/1cb31d0)) +* **nipple:** control dom presence before add or remove ([7cc1d8c](https://github.com/yoannmoinet/nipplejs/commit/7cc1d8c)) +* **nipple:** return the manager's known object in event triggers ([2deb42c](https://github.com/yoannmoinet/nipplejs/commit/2deb42c)) +* remove useless rimraf ([26db70f](https://github.com/yoannmoinet/nipplejs/commit/26db70f)) +* **npm:** add rimraf as a dev dependency ([deb7acc](https://github.com/yoannmoinet/nipplejs/commit/deb7acc)), closes [#12](https://github.com/yoannmoinet/nipplejs/issues/12) + + +### Features + +* **manager:** handle resize and reinit positions ([261fb59](https://github.com/yoannmoinet/nipplejs/commit/261fb59)) +* **nipple:** remove position offset ([be59bc4](https://github.com/yoannmoinet/nipplejs/commit/be59bc4)) +* add dataOnly option ([2f527b1](https://github.com/yoannmoinet/nipplejs/commit/2f527b1)) +* add two modes, static and semi ([347feaa](https://github.com/yoannmoinet/nipplejs/commit/347feaa)) +* **manager:** add destroy method ([295654f](https://github.com/yoannmoinet/nipplejs/commit/295654f)) +* **manager:** expose nippleOptions ([968103c](https://github.com/yoannmoinet/nipplejs/commit/968103c)) +* **nipple:** add destroy method ([713e505](https://github.com/yoannmoinet/nipplejs/commit/713e505)) +* **off:** allow unsubscribing on all events at once ([c30bfad](https://github.com/yoannmoinet/nipplejs/commit/c30bfad)) + + + + +## [0.4.2](https://github.com/yoannmoinet/nipplejs/compare/v0.4.1...v0.4.2) (2015-09-15) + + +### Bug Fixes + +* correctly return directions ([871d782](https://github.com/yoannmoinet/nipplejs/commit/871d782)) + + + + +## [0.4.1](https://github.com/yoannmoinet/nipplejs/compare/v0.4.0...v0.4.1) (2015-09-15) + + +### Bug Fixes + +* return the computed direction ([b3d80b3](https://github.com/yoannmoinet/nipplejs/commit/b3d80b3)) + + + + +# [0.4.0](https://github.com/yoannmoinet/nipplejs/compare/v0.3.1...v0.4.0) (2015-09-15) + + +### Bug Fixes + +* **manager:** streamline events triggered ([76941ec](https://github.com/yoannmoinet/nipplejs/commit/76941ec)) + + +### Features + +* **nipple:** add a callback after show and hide ([5b24124](https://github.com/yoannmoinet/nipplejs/commit/5b24124)) +* **nipple:** add the positions to the instance ([fac981b](https://github.com/yoannmoinet/nipplejs/commit/fac981b)) +* **off:** allow unsubscribing of a type at once ([cbbefca](https://github.com/yoannmoinet/nipplejs/commit/cbbefca)) +* **on:** pass the target in the event ([bc0630d](https://github.com/yoannmoinet/nipplejs/commit/bc0630d)) +* add more events for both nipple and manager ([f7966b9](https://github.com/yoannmoinet/nipplejs/commit/f7966b9)) +* add support for both mouse and touch at the same time ([e8fcba2](https://github.com/yoannmoinet/nipplejs/commit/e8fcba2)) +* add support for pressure ([80e7770](https://github.com/yoannmoinet/nipplejs/commit/80e7770)), closes [#10](https://github.com/yoannmoinet/nipplejs/issues/10) +* attach values to each instance of nipple ([c5bf9ab](https://github.com/yoannmoinet/nipplejs/commit/c5bf9ab)) +* limit the number of simultaneous nipples ([801e91d](https://github.com/yoannmoinet/nipplejs/commit/801e91d)) +* support multitouch correctly ([33bbe23](https://github.com/yoannmoinet/nipplejs/commit/33bbe23)), closes [#2](https://github.com/yoannmoinet/nipplejs/issues/2) [#6](https://github.com/yoannmoinet/nipplejs/issues/6) + + + + +## [0.3.1](https://github.com/yoannmoinet/nipplejs/compare/v0.3.0...v0.3.1) (2015-09-07) + + +### Bug Fixes + +* **on:** allows multiple spaces in event string ([b89bd0e](https://github.com/yoannmoinet/nipplejs/commit/b89bd0e)) +* **on:** removes variable name clash. ([3d70a3c](https://github.com/yoannmoinet/nipplejs/commit/3d70a3c)) + + + + +# [0.3.0](https://github.com/yoannmoinet/nipplejs/compare/v0.2.1...v0.3.0) (2015-09-06) + + +### Features + +* offset angle by 180 for units circle ([3002014](https://github.com/yoannmoinet/nipplejs/commit/3002014)) +* support IE PointerEvents ([ed65d1e](https://github.com/yoannmoinet/nipplejs/commit/ed65d1e)), closes [#1](https://github.com/yoannmoinet/nipplejs/issues/1) + + + + +## [0.2.1](https://github.com/yoannmoinet/nipplejs/compare/v0.2.0...v0.2.1) (2015-09-06) + + +### Bug Fixes + +* correct chrome's clientBoundingBox ([b94bc43](https://github.com/yoannmoinet/nipplejs/commit/b94bc43)) + + + + +# [0.2.0](https://github.com/yoannmoinet/nipplejs/compare/v0.1.1...v0.2.0) (2015-09-06) + + +### Bug Fixes + +* **on:** return self to allow chain ([f068cc9](https://github.com/yoannmoinet/nipplejs/commit/f068cc9)) + + +### Features + +* **on:** let listen to multiple events ([d19ad97](https://github.com/yoannmoinet/nipplejs/commit/d19ad97)) +* **on, off:** allow to chain calls ([c82c580](https://github.com/yoannmoinet/nipplejs/commit/c82c580)) +* **trigger:** trigger only if different direction ([9e334ba](https://github.com/yoannmoinet/nipplejs/commit/9e334ba)) + + + + +## [0.1.1](https://github.com/yoannmoinet/nipplejs/compare/v0.1.0...v0.1.1) (2015-09-06) + + +### Bug Fixes + +* add scroll offset ([7b36fb6](https://github.com/yoannmoinet/nipplejs/commit/7b36fb6)) +* remove useless log ([b958cbf](https://github.com/yoannmoinet/nipplejs/commit/b958cbf)) +* send data to start event ([c1f1688](https://github.com/yoannmoinet/nipplejs/commit/c1f1688)) + + + + +# 0.1.0 (2015-09-05) + + + diff --git a/ExoMy_Software-master/gui/node_modules/nipplejs/LICENSE b/ExoMy_Software-master/gui/node_modules/nipplejs/LICENSE new file mode 100644 index 0000000..6ad8999 --- /dev/null +++ b/ExoMy_Software-master/gui/node_modules/nipplejs/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2014 Yoann Moinet + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/ExoMy_Software-master/gui/node_modules/nipplejs/README.md b/ExoMy_Software-master/gui/node_modules/nipplejs/README.md new file mode 100644 index 0000000..6cdafde --- /dev/null +++ b/ExoMy_Software-master/gui/node_modules/nipplejs/README.md @@ -0,0 +1,631 @@ +![alt tag](./assets/nipplejs.png) +> A vanilla virtual joystick for touch capable interfaces + + +[![npm](https://img.shields.io/npm/v/nipplejs.svg)](https://npmjs.org/package/nipplejs) +[![npm](https://img.shields.io/npm/dm/nipplejs.svg)](https://npmjs.org/package/nipplejs) + +# Table Of Contents +
+ + + +- [Install](#install) +- [Demo](#demo) +- [Usage](#usage) +- [Options](#options) + * [`options.zone` defaults to 'body'](#optionszone-defaults-to-body) + * [`options.color` defaults to 'white'](#optionscolor-defaults-to-white) + * [`options.size` defaults to 100](#optionssize-defaults-to-100) + * [`options.threshold` defaults to 0.1](#optionsthreshold-defaults-to-01) + * [`options.fadeTime` defaults to 250](#optionsfadetime-defaults-to-250) + * [`options.multitouch` defaults to false](#optionsmultitouch-defaults-to-false) + * [`options.maxNumberOfNipples` defaults to 1](#optionsmaxnumberofnipples-defaults-to-1) + * [`options.dataOnly` defaults to false](#optionsdataonly-defaults-to-false) + * [`options.position` defaults to `{top: 0, left: 0}`](#optionsposition-defaults-to-top-0-left-0) + * [`options.mode` defaults to 'dynamic'.](#optionsmode-defaults-to-dynamic) + + [`'dynamic'`](#dynamic) + + [`'semi'`](#semi) + + [`'static'`](#static) + * [`options.restJoystick` defaults to true](#optionsrestjoystick-defaults-to-true) + * [`options.restOpacity` defaults to 0.5](#optionsrestopacity-defaults-to-05) + * [`options.catchDistance` defaults to 200](#optionscatchdistance-defaults-to-200) +- [API](#api) + * [NippleJS instance (manager)](#nipplejs-instance-manager) + + [`manager.on(type, handler)`](#managerontype-handler) + + [`manager.off([type, handler])`](#managerofftype-handler) + + [`manager.get(identifier)`](#managergetidentifier) + + [`manager.destroy()`](#managerdestroy) + + [`manager.ids`](#managerids) + + [`manager.id`](#managerid) + * [nipple instance (joystick)](#nipple-instance-joystick) + * [`joystick.on`, `joystick.off`](#joystickon-joystickoff) + * [`joystick.el`](#joystickel) + * [`joystick.show([cb])`](#joystickshowcb) + * [`joystick.hide([cb])`](#joystickhidecb) + * [`joystick.add()`](#joystickadd) + * [`joystick.remove()`](#joystickremove) + * [`joystick.destroy()`](#joystickdestroy) + * [`joystick.setPosition(cb, { x, y })`](#joysticksetpositioncb--x-y-) + * [`joystick.identifier`](#joystickidentifier) + * [`joystick.trigger(type [, data])`](#joysticktriggertype--data) + * [`joystick.position`](#joystickposition) + * [`joystick.frontPosition`](#joystickfrontposition) + * [`joystick.ui`](#joystickui) +- [Events](#events) + * [manager only](#manager-only) + + [`added`](#added) + + [`removed`](#removed) + * [manager and joysticks](#manager-and-joysticks) + + [`start`](#start) + + [`end`](#end) + + [`move`](#move) + + [`dir`](#dir) + + [`plain`](#plain) + + [`shown`](#shown) + + [`hidden`](#hidden) + + [`destroyed`](#destroyed) + + [`pressure`](#pressure) +- [Contributing](#contributing) + + [Commits](#commits) + + [Style](#style) + + [Workflow](#workflow) + + [Build](#build) + + +
+ +## Install + +```bash +npm install nipplejs --save +``` + +---- + +## Demo +Check out the [demo here](http://yoannmoinet.github.io/nipplejs/#demo). + +---- + +## Usage + +Import it the way you want into your project : + +```javascript +// CommonJS +var manager = require('nipplejs').create(options); +``` + +```javascript +// AMD +define(['nipplejs'], function (nipplejs) { + var manager = nipplejs.create(options); +}); +``` + +```javascript +// Module +import nipplejs from 'nipplejs'; +``` + +```html + + + +``` + +**:warning: NB :warning:** Your joystick's container **has** to have its CSS `position` property set, either `absolute`, `relative`, `static`, .... + +---- + +## Options +You can configure your joystick in different ways : + +```javascript +var options = { + zone: Element, // active zone + color: String, + size: Integer, + threshold: Float, // before triggering a directional event + fadeTime: Integer, // transition time + multitouch: Boolean, + maxNumberOfNipples: Number, // when multitouch, what is too many? + dataOnly: Boolean, // no dom element whatsoever + position: Object, // preset position for 'static' mode + mode: String, // 'dynamic', 'static' or 'semi' + restJoystick: Boolean, + restOpacity: Number, // opacity when not 'dynamic' and rested + lockX: Boolean, // only move on the X axis + lockY: Boolean, // only move on the Y axis + catchDistance: Number, // distance to recycle previous joystick in + // 'semi' mode + dynamicPage: Boolean, // Enable if the page has dynamically visible elements +}; +``` + +All options are optional :sunglasses:. + +### `options.zone` defaults to 'body' +The dom element in which all your joysticks will be injected. + +```html +
+ + + +``` + +This zone also serve as the mouse/touch events handler. + +It represents the zone where all your joysticks will be active. + +### `options.color` defaults to 'white' +The background color of your joystick's elements. + +Can be any valid CSS color. + +### `options.size` defaults to 100 +The size in pixel of the outer circle. + +The inner circle is 50% of this size. + +### `options.threshold` defaults to 0.1 +This is the strength needed to trigger a directional event. + +Basically, the center is 0 and the outer is 1. + +You need to at least go to 0.1 to trigger a directional event. + +### `options.fadeTime` defaults to 250 +The time it takes for joystick to fade-out and fade-in when activated or de-activated. + +### `options.multitouch` defaults to false +Enable the multitouch capabilities. + +If, for reasons, you need to have multiple nipples in the same zone. + +Otherwise, it will only get one, and all new touches won't do a thing. + +Please note that multitouch is off when in `static` or `semi` modes. + +### `options.maxNumberOfNipples` defaults to 1 +If you need to, you can also control the maximum number of instances that could be created. + +Obviously in a multitouch configuration. + +### `options.dataOnly` defaults to false +The library won't draw anything in the DOM and will only trigger events with data. + +### `options.position` defaults to `{top: 0, left: 0}` +An object that will determine the position of a `static` mode. + +You can pass any of the four `top`, `right`, `bottom` and `left`. + +They will be applied as any css property. + +Ex : +- `{top: '50px', left: '50px'}` +- `{left: '10%', bottom: '10%'}` + +### `options.mode` defaults to 'dynamic'. +Three modes are possible : + +#### `'dynamic'` +- a new joystick is created at each new touch. +- the joystick gets destroyed when released. +- **can** be multitouch. + +#### `'semi'` +- new joystick is created at each new touch farther than `options.catchDistance` of any previously created joystick. +- the joystick is faded-out when released but not destroyed. +- when touch is made **inside** the `options.catchDistance` a new direction is triggered immediately. +- when touch is made **outside** the `options.catchDistance` the previous joystick is destroyed and a new one is created. +- **cannot** be multitouch. + +#### `'static'` +- a joystick is positioned immediately at `options.position`. +- one joystick per zone. +- each new touch triggers a new direction. +- **cannot** be multitouch. + +### `options.restJoystick` defaults to true +Reset the joystick's position when it enters the rest state. + +### `options.restOpacity` defaults to 0.5 +The opacity to apply when the joystick is in a rest position. + +### `options.catchDistance` defaults to 200 +This is only useful in the `semi` mode, and determine at which distance we recycle the previous joystick. + +At 200 (px), if you press the zone into a rayon of 200px around the previously displayed joystick, +it will act as a `static` one. + +### `options.lockX` defaults to false +Locks joystick's movement to the x (horizontal) axis + +### `options.lockY` defaults to false +Locks joystick's movement to the y (vertical) axis + +### `options.dynamicPage` defaults to true +Enable if the page has dynamically visible elements such as for Vue, React, Angular or simply some CSS hiding or showing some DOM. + +---- + +## API + +### NippleJS instance (manager) + +Your manager has the following signature : + +```javascript +{ + on: Function, // handle internal event + off: Function, // un-handle internal event + get: Function, // get a specific joystick + destroy: Function, // destroy everything + ids: Array // array of assigned ids + id: Number // id of the manager + options: { + zone: Element, // reactive zone + multitouch: Boolean, + maxNumberOfNipples: Number, + mode: String, + position: Object, + catchDistance: Number, + size: Number, + threshold: Number, + color: String, + fadeTime: Number, + dataOnly: Boolean, + restJoystick: Boolean, + restOpacity: Number + } +} +``` + +#### `manager.on(type, handler)` + +If you wish to listen to internal events like : + +```javascript +manager.on('event#1 event#2', function (evt, data) { + // Do something. +}); +``` + +Note that you can listen to multiple events at once by separating +them either with a space or a comma (or both, I don't care). + +#### `manager.off([type, handler])` + +To remove an event handler : + +```javascript +manager.off('event', handler); +``` + +If you call off without arguments, all handlers will be removed. + +If you don't specify the handler but just a type, all handlers for that type will be removed. + +#### `manager.get(identifier)` + +A helper to get an instance via its identifier. + +```javascript +// Will return the nipple instantiated by the touch identified by 0 +manager.get(0); +``` + +#### `manager.destroy()` + +Gently remove all nipples from the DOM and unbind all events. + +```javascript +manager.destroy(); +``` + +#### `manager.ids` + +The array of nipples' ids under this manager. + +#### `manager.id` + +The incremented id of this manager. + +### nipple instance (joystick) + +Each joystick has the following signature : + +```javascript +{ + on: Function, + off: Function, + el: Element, + show: Function, // fade-in + hide: Function, // fade-out + add: Function, // inject into dom + remove: Function, // remove from dom + destroy: Function, + setPosition: Function, + identifier: Number, + trigger: Function, + position: { // position of the center + x: Number, + y: Number + }, + frontPosition: { // position of the front part + x: Number, + y: Number + }, + ui: { + el: Element, + front: Element, + back: Element + }, + options: { + color: String, + size: Number, + threshold: Number, + fadeTime: Number + } +} +``` + +### `joystick.on`, `joystick.off` + +The same as the manager. + +### `joystick.el` + +Dom element in which the joystick gets created. + +```html +
+
+
+
+``` + +### `joystick.show([cb])` + +Will show the joystick at the last known place. + +You can pass a callback that will be executed at the end of the fade-in animation. + +### `joystick.hide([cb])` + +Will fade-out the joystick. + +You can pass a callback that will be executed at the end of the fade-out animation. + +### `joystick.add()` + +Add the joystick's element to the dom. + +### `joystick.remove()` + +Remove the joystick's element from the dom. + +### `joystick.destroy()` + +Gently remove this nipple from the DOM and unbind all related events. + +### `joystick.setPosition(cb, { x, y })` + +Set the joystick to the specified position, where x and y are distances away from the center in pixels. This does not trigger joystick events. + +### `joystick.identifier` + +Returns the unique identifier of the joystick. + +Tied to its touch's identifier. + +### `joystick.trigger(type [, data])` + +Trigger an internal event from the joystick. + +The same as `on` you can trigger multiple events at the same time. + +### `joystick.position` + +The absolute position of the center of the joystick. + +### `joystick.frontPosition` + +The absolute position of the back part of the joystick's ui. + +### `joystick.ui` + +The object that store its ui elements + +```html +{ + el:
+ back:
+ front:
+} +``` + +---- + +## Events + +You can listen events both on the manager and all the joysticks. + +But some of them are specific to its instance. + +If you need to listen to each joystick, for example, you can : + +```javascript +manager.on('added', function (evt, nipple) { + nipple.on('start move end dir plain', function (evt) { + // DO EVERYTHING + }); +}).on('removed', function (evt, nipple) { + nipple.off('start move end dir plain'); +}); +``` + +### manager only + +#### `added` + +A joystick just got added. + +Will pass the instance alongside the event. + +#### `removed` + +A joystick just got removed. + +Fired at the end of the fade-out animation. + +Will pass the instance alongside the event. + +Won't be trigger in a `dataOnly` configuration. + +### manager and joysticks + +Other events are available on both the manager and joysticks. + +When listening on the manager, +you can also target **a joystick in particular** by prefixing +the event with its identifier, **`0:start`** for example. + +Else you'll get all events from all the joysticks. + +#### `start` + +A joystick is activated. (the user pressed on the active zone) + +Will pass the instance alongside the event. + +#### `end` + +A joystick is de-activated. (the user released the active zone) + +Will pass the instance alongside the event. + +#### `move` + +A joystick is moved. + +Comes with data : + +```javascript +{ + identifier: 0, // the identifier of the touch/mouse that triggered it + position: { // absolute position of the center in pixels + x: 125, + y: 95 + }, + force: 0.2, // strength in % + distance: 25.4, // distance from center in pixels + pressure: 0.1, // the pressure applied by the touch + angle: { + radian: 1.5707963268, // angle in radian + degree: 90 + }, + vector: { // force unit vector + x: 0.508, + y: 3.110602869834277e-17 + }, + raw: { // note: angle is the same, beyond the 50 pixel limit + distance: 25.4, // distance which continues beyond the 50 pixel limit + position: { // position of the finger/mouse in pixels, beyond joystick limits + x: 125, + y: 95 + } + }, + instance: Nipple // the nipple instance that triggered the event +} +``` + +#### `dir` + +When a direction is reached after the threshold. + +Direction are split with a 45° angle. + +```javascript +// \ UP / +// \ / +// LEFT RIGHT +// / \ +// /DOWN \ +``` + +You can also listen to specific direction like : + +- `dir:up` +- `dir:down` +- `dir:right` +- `dir:left` + +In this configuration only one direction is triggered at a time. + +#### `plain` + +When a plain direction is reached after the threshold. + +Plain directions are split with a 90° angle. + +```javascript +// UP | +// ------ LEFT | RIGHT +// DOWN | +``` + +You can also listen to specific plain direction like : + +- `plain:up` +- `plain:down` +- `plain:right` +- `plain:left` + +In this configuration two directions can be triggered at a time, +because the user could be both `up` and `left` for example. + +#### `shown` + +Is triggered at the end of the fade-in animation. + +Will pass the instance alongside the event. + +Won't be trigger in a `dataOnly` configuration. + +#### `hidden` + +Is triggered at the end of the fade-out animation. + +Will pass the instance alongside the event. + +Won't be trigger in a `dataOnly` configuration. + +#### `destroyed` + +Is triggered at the end of destroy. + +Will pass the instance alongside the event. + +#### `pressure` + +> MBP's [**Force Touch**](http://www.apple.com/macbook-pro/features-retina/#interact), iOS's [**3D Touch**](http://www.apple.com/iphone-6s/3d-touch/), Microsoft's [**pressure**](https://msdn.microsoft.com/en-us/library/hh772360%28v=vs.85%29.aspx) or MDN's [**force**](https://developer.mozilla.org/en-US/docs/Web/API/Touch/force) + +Is triggered when the pressure on the joystick is changed. + +The value, between 0 and 1, is sent back alongside the event. + +---- + +## Contributing +You can follow [this document](./CONTRIBUTING.md) to help you get started. diff --git a/ExoMy_Software-master/gui/node_modules/nipplejs/dist/nipplejs.js b/ExoMy_Software-master/gui/node_modules/nipplejs/dist/nipplejs.js new file mode 100644 index 0000000..3a777ca --- /dev/null +++ b/ExoMy_Software-master/gui/node_modules/nipplejs/dist/nipplejs.js @@ -0,0 +1 @@ +!function(t,i){"object"==typeof exports&&"object"==typeof module?module.exports=i():"function"==typeof define&&define.amd?define("nipplejs",[],i):"object"==typeof exports?exports.nipplejs=i():t.nipplejs=i()}(window,function(){return function(t){var i={};function e(o){if(i[o])return i[o].exports;var n=i[o]={i:o,l:!1,exports:{}};return t[o].call(n.exports,n,n.exports,e),n.l=!0,n.exports}return e.m=t,e.c=i,e.d=function(t,i,o){e.o(t,i)||Object.defineProperty(t,i,{enumerable:!0,get:o})},e.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},e.t=function(t,i){if(1&i&&(t=e(t)),8&i)return t;if(4&i&&"object"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(e.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:t}),2&i&&"string"!=typeof t)for(var n in t)e.d(o,n,function(i){return t[i]}.bind(null,n));return o},e.n=function(t){var i=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(i,"a",i),i},e.o=function(t,i){return Object.prototype.hasOwnProperty.call(t,i)},e.p="",e(e.s=0)}([function(t,i,e){"use strict";e.r(i);var o,n=function(t,i){var e=i.x-t.x,o=i.y-t.y;return Math.sqrt(e*e+o*o)},s=function(t){return t*(Math.PI/180)},r=function(t){return t*(180/Math.PI)},d=function(t,i,e){for(var o,n=i.split(/[ ,]+/g),s=0;s=0&&this._handlers_[t].splice(this._handlers_[t].indexOf(i),1),this},O.prototype.trigger=function(t,i){var e,o=this,n=t.split(/[ ,]+/g);o._handlers_=o._handlers_||{};for(var s=0;ss&&n<3*s&&!t.lockX?i="up":n>-s&&n<=s&&!t.lockY?i="left":n>3*-s&&n<=-s&&!t.lockX?i="down":t.lockY||(i="right"),t.lockY||(e=n>-r&&n0?"up":"down"),t.force>this.options.threshold){var d,a={};for(d in this.direction)this.direction.hasOwnProperty(d)&&(a[d]=this.direction[d]);var p={};for(d in this.direction={x:e,y:o,angle:i},t.direction=this.direction,a)a[d]===this.direction[d]&&(p[d]=!0);if(p.x&&p.y&&p.angle)return t;p.x&&p.y||this.trigger("plain",t),p.x||this.trigger("plain:"+e,t),p.y||this.trigger("plain:"+o,t),p.angle||this.trigger("dir dir:"+i,t)}else this.resetDirection();return t};var T=w;function k(t,i){return this.nipples=[],this.idles=[],this.actives=[],this.ids=[],this.pressureIntervals={},this.manager=t,this.id=k.id,k.id+=1,this.defaults={zone:document.body,multitouch:!1,maxNumberOfNipples:10,mode:"dynamic",position:{top:0,left:0},catchDistance:200,size:100,threshold:.1,color:"white",fadeTime:250,dataOnly:!1,restJoystick:!0,restOpacity:.5,lockX:!1,lockY:!1,dynamicPage:!1},this.config(i),"static"!==this.options.mode&&"semi"!==this.options.mode||(this.options.multitouch=!1),this.options.multitouch||(this.options.maxNumberOfNipples=1),this.updateBox(),this.prepareNipples(),this.bindings(),this.begin(),this.nipples}k.prototype=new _,k.constructor=k,k.id=0,k.prototype.prepareNipples=function(){var t=this.nipples;t.on=this.on.bind(this),t.off=this.off.bind(this),t.options=this.options,t.destroy=this.destroy.bind(this),t.ids=this.ids,t.id=this.id,t.processOnMove=this.processOnMove.bind(this),t.processOnEnd=this.processOnEnd.bind(this),t.get=function(i){if(void 0===i)return t[0];for(var e=0,o=t.length;e