├── .readthedocs.yaml ├── LICENSE ├── README.md ├── axis_by_axis ├── CMakeLists.txt ├── package.xml └── src │ └── trajectory.cpp ├── docs ├── Install.md ├── application.md ├── architechture.md ├── examples.md ├── experiments.md ├── extra.css ├── extra.js ├── huro.html ├── images │ ├── architecture.png │ ├── circularGMAT.jpg │ ├── circularOnOrbitROS.png │ ├── circularResults.jpeg │ ├── cranfield.png │ ├── drag.png │ ├── elipticOnOrbitROS.png │ ├── ellipticGMAT.jpg │ ├── ellipticResults.jpeg │ ├── etsvii.jpg │ ├── frames.png │ ├── gravGrad.png │ ├── hurospace.jpg │ ├── linkedin.png │ ├── logo.png │ ├── logo_huro_fondo_blanco.png │ ├── logo_huro_large.svg │ ├── orbit_publisher.png │ ├── ros_pub.png │ └── ua.png ├── index.md ├── launch.md ├── requirements.txt └── troubleshooting.md ├── docs_inOnorbitros_june.zip ├── ets_vii ├── CMakeLists.txt ├── config │ ├── effort_controllers.yaml │ ├── gazebo_controllers.yaml │ └── ros_controllers.yaml ├── launch │ ├── axis_by_axis.launch │ ├── effort_controllers.launch │ ├── effort_controllers_indivudual.launch │ ├── effort_controllers_wgg.launch │ ├── ets_vii.launch │ ├── only_the_model.launch │ └── trajectory.launch ├── log │ └── note.txt ├── package.xml ├── rviz │ └── config.rviz ├── urdf │ ├── ets_vii.xacro │ ├── ets_vii_gazebo.xacro │ └── ets_vii_gazebo_wgg.xacro └── worlds │ ├── no_gravity.world │ └── no_gravity_dart.world ├── logo.png ├── logo_w.png ├── mkdocs.yml ├── orbit_publisher_pkg ├── CMakeLists.txt ├── config │ ├── dynamic_orbit.yaml │ └── fixed_orbit.yaml ├── include │ └── orbit_publisher_pkg │ │ └── Orbit.h ├── launch │ ├── basic.launch │ └── basic_fix.launch ├── package.xml └── src │ ├── Orbit.cpp │ ├── fix_orbit_publisher_pkg_node.cpp │ └── orbit_publisher_pkg_node.cpp ├── orbit_robot_pkg ├── CMakeLists.txt ├── include │ └── orbit_robot_pkg │ │ └── OrbitLink.h ├── package.xml └── src │ ├── OrbitLink.cpp │ └── Orbit_robot_pkg_plugin.cpp ├── package_template ├── CMakeLists.txt ├── launch │ └── default.launch ├── package.xml ├── urdf │ └── cubesat_template.xacro └── worlds │ ├── no_gravity.world │ └── no_gravity.world.xacro ├── requirements.txt └── site ├── 404.html ├── Install └── index.html ├── arquitechture └── index.html ├── assets ├── images │ └── favicon.png ├── javascripts │ ├── bundle.c8d2eff1.min.js │ ├── bundle.c8d2eff1.min.js.map │ ├── lunr │ │ ├── min │ │ │ ├── lunr.ar.min.js │ │ │ ├── lunr.da.min.js │ │ │ ├── lunr.de.min.js │ │ │ ├── lunr.du.min.js │ │ │ ├── lunr.el.min.js │ │ │ ├── lunr.es.min.js │ │ │ ├── lunr.fi.min.js │ │ │ ├── lunr.fr.min.js │ │ │ ├── lunr.he.min.js │ │ │ ├── lunr.hi.min.js │ │ │ ├── lunr.hu.min.js │ │ │ ├── lunr.hy.min.js │ │ │ ├── lunr.it.min.js │ │ │ ├── lunr.ja.min.js │ │ │ ├── lunr.jp.min.js │ │ │ ├── lunr.kn.min.js │ │ │ ├── lunr.ko.min.js │ │ │ ├── lunr.multi.min.js │ │ │ ├── lunr.nl.min.js │ │ │ ├── lunr.no.min.js │ │ │ ├── lunr.pt.min.js │ │ │ ├── lunr.ro.min.js │ │ │ ├── lunr.ru.min.js │ │ │ ├── lunr.sa.min.js │ │ │ ├── lunr.stemmer.support.min.js │ │ │ ├── lunr.sv.min.js │ │ │ ├── lunr.ta.min.js │ │ │ ├── lunr.te.min.js │ │ │ ├── lunr.th.min.js │ │ │ ├── lunr.tr.min.js │ │ │ ├── lunr.vi.min.js │ │ │ └── lunr.zh.min.js │ │ ├── tinyseg.js │ │ └── wordcut.js │ └── workers │ │ ├── search.b8dbb3d2.min.js │ │ └── search.b8dbb3d2.min.js.map └── stylesheets │ ├── main.7e359304.min.css │ ├── main.7e359304.min.css.map │ ├── palette.06af60db.min.css │ └── palette.06af60db.min.css.map ├── examples └── index.html ├── images ├── architecture.png ├── logo.png ├── logo_huro_fondo_blanco.png └── logo_huro_large.svg ├── index.html ├── search └── search_index.json ├── sitemap.xml └── sitemap.xml.gz /.readthedocs.yaml: -------------------------------------------------------------------------------- 1 | # .readthedocs.yaml 2 | # Read the Docs configuration file 3 | # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details 4 | 5 | # Required 6 | version: 2 7 | 8 | # Set the OS, Python version and other tools you might need 9 | build: 10 | os: ubuntu-22.04 11 | tools: 12 | python: "3.12" 13 | # You can also specify other tool versions: 14 | # nodejs: "19" 15 | # rust: "1.64" 16 | # golang: "1.19" 17 | 18 | # Build documentation in the "docs/" directory with Sphinx 19 | # sphinx: 20 | # configuration: docs/conf.py 21 | 22 | # Build documentation with Mkdocs 23 | mkdocs: 24 | configuration: mkdocs.yml 25 | 26 | # Dependencies required to build your docs 27 | python: 28 | install: 29 | - requirements: requirements.txt 30 | 31 | # Optionally build your docs in additional formats such as PDF and ePub 32 | # formats: 33 | # - pdf 34 | # - epub 35 | 36 | # Optional but recommended, declare the Python requirements required 37 | # to build your documentation 38 | # See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html 39 | # python: 40 | # install: 41 | # - requirements: docs/requirements.txt 42 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 OnOrbitROS Jose Luis Ramon Carretero 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Simulation 2 | ROS Framework for on orbiting space robots 3 | ![alt text](https://raw.githubusercontent.com/OnOrbitROS/Simulation/main/logo.png) 4 | 5 | Documentation found here: https://simulation.readthedocs.io/ 6 | -------------------------------------------------------------------------------- /axis_by_axis/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.0.2) 2 | project(axis_by_axis) 3 | 4 | ## Compile as C++11, supported in ROS Kinetic and newer 5 | # add_compile_options(-std=c++11) 6 | 7 | ## Find catkin macros and libraries 8 | ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) 9 | ## is used, also find other catkin packages 10 | find_package(catkin REQUIRED COMPONENTS 11 | roscpp 12 | rospy 13 | std_msgs 14 | ) 15 | 16 | ## System dependencies are found with CMake's conventions 17 | # find_package(Boost REQUIRED COMPONENTS system) 18 | 19 | 20 | ## Uncomment this if the package has a setup.py. This macro ensures 21 | ## modules and global scripts declared therein get installed 22 | ## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html 23 | # catkin_python_setup() 24 | 25 | ################################################ 26 | ## Declare ROS messages, services and actions ## 27 | ################################################ 28 | 29 | ## To declare and build messages, services or actions from within this 30 | ## package, follow these steps: 31 | ## * Let MSG_DEP_SET be the set of packages whose message types you use in 32 | ## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). 33 | ## * In the file package.xml: 34 | ## * add a build_depend tag for "message_generation" 35 | ## * add a build_depend and a exec_depend tag for each package in MSG_DEP_SET 36 | ## * If MSG_DEP_SET isn't empty the following dependency has been pulled in 37 | ## but can be declared for certainty nonetheless: 38 | ## * add a exec_depend tag for "message_runtime" 39 | ## * In this file (CMakeLists.txt): 40 | ## * add "message_generation" and every package in MSG_DEP_SET to 41 | ## find_package(catkin REQUIRED COMPONENTS ...) 42 | ## * add "message_runtime" and every package in MSG_DEP_SET to 43 | ## catkin_package(CATKIN_DEPENDS ...) 44 | ## * uncomment the add_*_files sections below as needed 45 | ## and list every .msg/.srv/.action file to be processed 46 | ## * uncomment the generate_messages entry below 47 | ## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) 48 | 49 | ## Generate messages in the 'msg' folder 50 | # add_message_files( 51 | # FILES 52 | # Message1.msg 53 | # Message2.msg 54 | # ) 55 | 56 | ## Generate services in the 'srv' folder 57 | # add_service_files( 58 | # FILES 59 | # Service1.srv 60 | # Service2.srv 61 | # ) 62 | 63 | ## Generate actions in the 'action' folder 64 | # add_action_files( 65 | # FILES 66 | # Action1.action 67 | # Action2.action 68 | # ) 69 | 70 | ## Generate added messages and services with any dependencies listed here 71 | # generate_messages( 72 | # DEPENDENCIES 73 | # std_msgs 74 | # ) 75 | 76 | ################################################ 77 | ## Declare ROS dynamic reconfigure parameters ## 78 | ################################################ 79 | 80 | ## To declare and build dynamic reconfigure parameters within this 81 | ## package, follow these steps: 82 | ## * In the file package.xml: 83 | ## * add a build_depend and a exec_depend tag for "dynamic_reconfigure" 84 | ## * In this file (CMakeLists.txt): 85 | ## * add "dynamic_reconfigure" to 86 | ## find_package(catkin REQUIRED COMPONENTS ...) 87 | ## * uncomment the "generate_dynamic_reconfigure_options" section below 88 | ## and list every .cfg file to be processed 89 | 90 | ## Generate dynamic reconfigure parameters in the 'cfg' folder 91 | # generate_dynamic_reconfigure_options( 92 | # cfg/DynReconf1.cfg 93 | # cfg/DynReconf2.cfg 94 | # ) 95 | 96 | ################################### 97 | ## catkin specific configuration ## 98 | ################################### 99 | ## The catkin_package macro generates cmake config files for your package 100 | ## Declare things to be passed to dependent projects 101 | ## INCLUDE_DIRS: uncomment this if your package contains header files 102 | ## LIBRARIES: libraries you create in this project that dependent projects also need 103 | ## CATKIN_DEPENDS: catkin_packages dependent projects also need 104 | ## DEPENDS: system dependencies of this project that dependent projects also need 105 | catkin_package( 106 | # INCLUDE_DIRS include 107 | # LIBRARIES axis_by_axis 108 | # CATKIN_DEPENDS roscpp rospy std_msgs 109 | # DEPENDS system_lib 110 | ) 111 | 112 | ########### 113 | ## Build ## 114 | ########### 115 | 116 | ## Specify additional locations of header files 117 | ## Your package locations should be listed before other locations 118 | include_directories( 119 | # include 120 | ${catkin_INCLUDE_DIRS} 121 | ) 122 | 123 | ## Declare a C++ library 124 | # add_library(${PROJECT_NAME} 125 | # src/${PROJECT_NAME}/axis_by_axis.cpp 126 | # ) 127 | 128 | ## Add cmake target dependencies of the library 129 | ## as an example, code may need to be generated before libraries 130 | ## either from message generation or dynamic reconfigure 131 | # add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 132 | 133 | ## Declare a C++ executable 134 | ## With catkin_make all packages are built within a single CMake context 135 | ## The recommended prefix ensures that target names across packages don't collide 136 | add_executable(${PROJECT_NAME}_node src/trajectory.cpp) 137 | 138 | 139 | ## Rename C++ executable without prefix 140 | ## The above recommended prefix causes long target names, the following renames the 141 | ## target back to the shorter version for ease of user use 142 | ## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node" 143 | # set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "") 144 | 145 | ## Add cmake target dependencies of the executable 146 | ## same as for the library above 147 | add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 148 | 149 | ## Specify libraries to link a library or executable target against 150 | target_link_libraries(${PROJECT_NAME}_node 151 | ${catkin_LIBRARIES} 152 | ) 153 | 154 | ############# 155 | ## Install ## 156 | ############# 157 | 158 | # all install targets should use catkin DESTINATION variables 159 | # See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html 160 | 161 | ## Mark executable scripts (Python etc.) for installation 162 | ## in contrast to setup.py, you can choose the destination 163 | # catkin_install_python(PROGRAMS 164 | # scripts/my_python_script 165 | # DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 166 | # ) 167 | 168 | ## Mark executables for installation 169 | ## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_executables.html 170 | # install(TARGETS ${PROJECT_NAME}_node 171 | # RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 172 | # ) 173 | 174 | ## Mark libraries for installation 175 | ## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html 176 | # install(TARGETS ${PROJECT_NAME} 177 | # ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 178 | # LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 179 | # RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION} 180 | # ) 181 | 182 | ## Mark cpp header files for installation 183 | # install(DIRECTORY include/${PROJECT_NAME}/ 184 | # DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} 185 | # FILES_MATCHING PATTERN "*.h" 186 | # PATTERN ".svn" EXCLUDE 187 | # ) 188 | 189 | ## Mark other files for installation (e.g. launch and bag files, etc.) 190 | # install(FILES 191 | # # myfile1 192 | # # myfile2 193 | # DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 194 | # ) 195 | 196 | ############# 197 | ## Testing ## 198 | ############# 199 | 200 | ## Add gtest based cpp test target and link libraries 201 | # catkin_add_gtest(${PROJECT_NAME}-test test/test_axis_by_axis.cpp) 202 | # if(TARGET ${PROJECT_NAME}-test) 203 | # target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) 204 | # endif() 205 | 206 | ## Add folders to be run by python nosetests 207 | # catkin_add_nosetests(test) 208 | -------------------------------------------------------------------------------- /axis_by_axis/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | axis_by_axis 4 | 0.0.0 5 | The axis_by_axis package 6 | 7 | 8 | 9 | 10 | Jose Luis Ramon Carretero 11 | 12 | 13 | 14 | 15 | 16 | TODO 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | catkin 52 | roscpp 53 | rospy 54 | std_msgs 55 | roscpp 56 | rospy 57 | std_msgs 58 | roscpp 59 | rospy 60 | std_msgs 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /docs/Install.md: -------------------------------------------------------------------------------- 1 | # Installation Guide 2 | 3 | OnOrbitROS framework can be found on [this](https://github.com/OnOrbitROS) GitHub; the main application is **Simulation**. There you will find the packages to install in your ROS environment as well as different guided examples to discover the functionalities OnOrbitROS offers. With this framework it is also possible to create new projects from the existing ones or from scrath. 4 | 5 | --- 6 | 7 | ## ROS Distribution 8 | The project has been developed in ROS Noetic (Ubuntu 20.04). The Ubuntu intallation guidelines can be found [here](https://wiki.ros.org/noetic/Installation/Ubuntu). ROS offers many tutorials and guides to help you set up and work with your environments and projects, that can be accessed through [ROS Wiki](https://wiki.ros.org/). 9 | 10 | --- 11 | 12 | ## Gazebo Simulator 13 | 14 | Gazebo is an open-source and free simulation tool specifically designed for fast and efficient test development. It has been selected as it can simulate complex 3D environments where each element possesses properties such as mass, velocity, and friction, and can accurately represent the dynamics and interations of space robots in complex 3D settings, so it is possible to create a realistic simulation of on-orbit conditions. Install from [here](https://classic.gazebosim.org/tutorials?tut=install_ubuntu). 15 | 16 | There is high interation of Gazebo within ROS: simulations are generated from an XML file based on the SDF description language (extension of URDF that ROS uses for robot description) for quick and easy creations and configurations; and it is possible to include additional plugins to extend its functionalities. 17 | 18 | OnOrbitROS includes different plugins to simulate the on-orbit-specific conditions (using existing standard and available ROS/Gazebo packages to develop complex tasks). Also, Gazebo integrates interfaces to use multiple physics engines such as Open Dynamics Engine, Bullet, Simbody, Dynamic Animation and Robotics Toolkit (DART). 19 | 20 | --- 21 | 22 | ## OnOrbitROS Framework 23 | Import the ROS framework from the GitHub (found [here](https://github.com/OnOrbitROS)). 24 | 25 | 0. Install ROS and create an ROS environment (or use a previous one). The tutorial for doing so can be found [here](https://wiki.ros.org/ROS/Tutorials/InstallingandConfiguringROSEnvironment). 26 | 1. Download the framework with `git clone` or manually into your desired ROS environment. 27 | 2. Build the environment with `catkin_make` or `catkin_make_isolated`. 28 | 3. Solve any dependency problems that might occur. See [Other packages](#other-packages) for help. 29 | 30 | You can now start working with the framework. 31 | 32 | --- 33 | 34 | ## Examples of Applications 35 | In case you would like to install the example cases: 36 | 37 | 1. Download the example you want with `git clone` or manually into the folder `orbit_ws/src`. 38 | 2. Build the environment with `catkin_make` or `catkin_make_isolated`. 39 | 3. Execute the `.launch` corresponding to that example. See the specific example documentation for that (found in [Examples of Applications](examples.md)) 40 | 41 | --- 42 | 43 | ## Other packages 44 | In addition to the Ubuntu installation with its packages, it might be necessary to manually install these other packages. This is because OnOrbitROS takes advantages of packages already developed in ROS to improve its functionalities. 45 | 46 | Packages for the controllers: 47 | 48 | - [Controller Manager](https://wiki.ros.org/controller_manager): `$ sudo apt-get install ros-noetic-controller-manager` 49 | - [Joint State Controller](https://wiki.ros.org/joint_state_controller): `$ sudo apt-get install ros-noetic-joint-state-controller` 50 | - [Effort Controller](https://wiki.ros.org/effort_controllers): `$ sudo apt-get install ros-noetic-effort-controller` 51 | - [Position Controllers](https://wiki.ros.org/position_controllers): `$ sudo apt-get install ros-noetic-position-controllers` 52 | 53 | 54 | -------------------------------------------------------------------------------- /docs/examples.md: -------------------------------------------------------------------------------- 1 | # Examples of Applications using OnOrbitROS 2 | 3 | In this section you can find different examples that exploit OnOrbitROS functionalities. They can serve as a guide to develop your own application, based on these or from scratch. 4 | 5 | --- 6 | 7 | ## Template 8 | 9 | A template package, called **package_template** has been created to allocate the basic functionalities of a simulation using OnOrbitROS. It serves as a guide to create custom applications from it. 10 | 11 | When the launch file is loaded the world with a 1U cubesat in the world, describing the ETS VII's orbit. 12 | 13 | roslaunch package_template default.launch 14 | 15 | --- 16 | 17 | ## ETS VII 18 | 19 | The package **ets_vii** contains the simulation of the Japanese satellite ETS VII presented in 20 | 21 | Ramón, J. L., Pomares, J., & Felicetti, L. (2023). Task space control for on-orbit space robotics using a new ROS-based framework. Simulation Modelling Practice and Theory, 127(102790), 102790. [https://doi.org/10.1016/j.simpat.2023.102790](https://doi.org/10.1016/j.simpat.2023.102790) 22 | 23 | 24 | The project is launched with the following command, that loads the satellite with a robotic manipulator performing a trajectory after 10 minutes. It includes cartesian controllers to perform On Orbit Servicing tasks (for more information please refer to the previous article). 25 | 26 | roslaunch ets_vii effort_controllers_wgg.launch 27 | 28 | 29 | ETS VII 30 | 31 | -------------------------------------------------------------------------------- /docs/experiments.md: -------------------------------------------------------------------------------- 1 | # Experiments to validate OnOrbitROS 2 | 3 | Some experiments have been conducted to validate the framework. 4 | 5 | --- 6 | 7 | ## OnOrbitROS Dynamics: ETS VII simulation 8 | 9 | The dynamics of the ETS VII robotic experiments are simulated and compared to the actual flight data obtained from the mission. 10 | 11 | The results obtained are presented in: 12 | 13 | Ramón, J. L., Pomares, J., & Felicetti, L. (2023). Task space control for on-orbit space robotics using a new ROS-based framework. Simulation Modelling Practice and Theory, 127(102790), 102790. [https://doi.org/10.1016/j.simpat.2023.102790](https://doi.org/10.1016/j.simpat.2023.102790) 14 | 15 | 16 | And compared to the real mission from: 17 | 18 | S. Abiko, K. Yoshida, Post flight analysis of ETS-VII space robotic experiments, in: Proceedings of the 6th International Symposium on Artificial Intelligence and Robotics & Automation in Space: I-SAIRAS, St-Hubert, Quebec, Canada, 2001. 19 | 20 | and 21 | 22 | K. Yoshida, Engineering test satellite VII flight experiments for space robot dynamics and control: theories on laboratory test beds ten years ago, now in orbit, Int. J. Rob. Res. 22 (2003) 321–335, https://doi.org/10.1177/0278364903022005003. 23 | 24 | 25 | --- 26 | 27 | ## OnOrbitROS propagator 28 | 29 | Two orbits, a circular an elliptic, have been simulated and compared to GMAT's RungeKutta89 propagator. 30 | The satellite used is a sphere with 1m of diameter orbiting around Earth in LEO. 31 | 32 | The selected orbit has been taken from the Cubesat XI-V orbit on 17th April 2024: 33 | 34 | ```yaml 35 | 1 28895U 05042F 24108.35401664 .00006071 00000-0 10830-2 0 9996 36 | 2 28895 98.1916 244.1444 0015992 185.6352 174.4674 14.67269849985536 37 | ``` 38 | 39 | >> ### Circular Orbit 40 | 41 | The orbit has been taken from the previous TLE set (in km and º) and the eccentricity set to 0: 42 | 43 | eccentricity: 0.0 44 | semi_major_axis: 7047.5 45 | inclination: 98.1916 46 | rate_of_right_ascension: 244.1444 47 | right_ascension_ini: 244.1444 48 | argument_of_perigee_ini: 185.6352 49 | rate_argument_Of_perigee: 185.6352 50 | mean_anomaly_ini: 174.4674 51 | 52 | time_pass_perigee: 53 | sec : 0 54 | min: 0 55 | hour: 0 56 | mday: 1 57 | mon: 1 58 | year: 2000 59 | 60 | time_start: 61 | sec : 0 62 | min: 0 63 | hour: 0 64 | mday: 1 65 | mon: 1 66 | year: 2000 67 | 68 | 69 | 70 | In the graphs below, the orbital position relative to the ECI (Earth MJ2000) frame is shown for the first 15,000 seconds of the propagated orbit. The left panels display results from OnOrbitROS, while the right one show results from GMAT. The `x`, `y`, and `z` axes are represented in red, green, and blue respectively. The satellite's altitude is depicted in orange. 71 | 72 | The table following the graphs presents the numerical data for the maximum values of the orbital position and the mean altitude. The orbital shapes and maximum values obtained using OnOrbitROS are consistent with those from GMAT, with relative errors under 1%, using GMAT as the reference standard. 73 | 74 | Circular Orbit OnOrbitROS Circular Orbit GMAT 75 | 76 | Circular Orbit 77 | 78 | 79 | >> ### Elliptic Orbit 80 | 81 | The same orbit has been evaluated in this case with an eccentricity value of 0.01. 82 | 83 | eccentricity: 0.01 84 | 85 | The following graphs show the results for the elliptic orbit, following the same format as used for the circular orbit. The shapes of the orbits in both cases are consistent, with a maximum relative error of 1.64%. 86 | 87 | Elliptic Orbit OnOrbitROS Elliptic Orbit GMAT 88 | 89 | Elliptic Orbit 90 | 91 | 92 | --- 93 | 94 | ## Other validations 95 | 96 | 97 | !!! Warning 98 | More validations on orbital mechanics and perturbation modelling to come. 99 | -------------------------------------------------------------------------------- /docs/extra.css: -------------------------------------------------------------------------------- 1 | h1 { 2 | color: darkblue; 3 | } 4 | -------------------------------------------------------------------------------- /docs/extra.js: -------------------------------------------------------------------------------- 1 | 2 | document.addEventListener('DOMContentLoaded', function() { 3 | var codeBlocks = document.querySelectorAll('pre'); 4 | codeBlocks.forEach(function(codeBlock) { 5 | var copyButton = document.createElement('button'); 6 | copyButton.className = 'copy-button'; 7 | copyButton.innerHTML = ''; 8 | copyButton.addEventListener('click', function() { 9 | var codeText = codeBlock.querySelector('code').innerText; 10 | navigator.clipboard.writeText(codeText).then(function() { 11 | console.log('Code copied to clipboard'); 12 | }, function(err) { 13 | console.error('Failed to copy code: ', err); 14 | }); 15 | }); 16 | codeBlock.parentNode.insertBefore(copyButton, codeBlock); 17 | positionCopyButton(copyButton, codeBlock); // Call the function to position the copy button 18 | }); 19 | }); 20 | 21 | // Function to position the copy button 22 | function positionCopyButton(copyButton, codeBlock) { 23 | // Set the copy button's position to the top right corner of the code block 24 | var codeBlockRect = codeBlock.getBoundingClientRect(); 25 | copyButton.style.position = 'absolute'; 26 | copyButton.style.top = (codeBlockRect.top-30) + 'px'; 27 | copyButton.style.right = (codeBlockRect.left+105) + 'px'; 28 | } -------------------------------------------------------------------------------- /docs/huro.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Redirecting... 7 | 10 | 11 | 12 |

If you are not redirected automatically, click here.

13 | 14 | -------------------------------------------------------------------------------- /docs/images/architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnOrbitROS/Simulation/c2edc7414cc90a6f0421c16702ef44c5895fd151/docs/images/architecture.png -------------------------------------------------------------------------------- /docs/images/circularGMAT.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnOrbitROS/Simulation/c2edc7414cc90a6f0421c16702ef44c5895fd151/docs/images/circularGMAT.jpg -------------------------------------------------------------------------------- /docs/images/circularOnOrbitROS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnOrbitROS/Simulation/c2edc7414cc90a6f0421c16702ef44c5895fd151/docs/images/circularOnOrbitROS.png -------------------------------------------------------------------------------- /docs/images/circularResults.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnOrbitROS/Simulation/c2edc7414cc90a6f0421c16702ef44c5895fd151/docs/images/circularResults.jpeg -------------------------------------------------------------------------------- /docs/images/cranfield.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnOrbitROS/Simulation/c2edc7414cc90a6f0421c16702ef44c5895fd151/docs/images/cranfield.png -------------------------------------------------------------------------------- /docs/images/drag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnOrbitROS/Simulation/c2edc7414cc90a6f0421c16702ef44c5895fd151/docs/images/drag.png -------------------------------------------------------------------------------- /docs/images/elipticOnOrbitROS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnOrbitROS/Simulation/c2edc7414cc90a6f0421c16702ef44c5895fd151/docs/images/elipticOnOrbitROS.png -------------------------------------------------------------------------------- /docs/images/ellipticGMAT.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnOrbitROS/Simulation/c2edc7414cc90a6f0421c16702ef44c5895fd151/docs/images/ellipticGMAT.jpg -------------------------------------------------------------------------------- /docs/images/ellipticResults.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnOrbitROS/Simulation/c2edc7414cc90a6f0421c16702ef44c5895fd151/docs/images/ellipticResults.jpeg -------------------------------------------------------------------------------- /docs/images/etsvii.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnOrbitROS/Simulation/c2edc7414cc90a6f0421c16702ef44c5895fd151/docs/images/etsvii.jpg -------------------------------------------------------------------------------- /docs/images/frames.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnOrbitROS/Simulation/c2edc7414cc90a6f0421c16702ef44c5895fd151/docs/images/frames.png -------------------------------------------------------------------------------- /docs/images/gravGrad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnOrbitROS/Simulation/c2edc7414cc90a6f0421c16702ef44c5895fd151/docs/images/gravGrad.png -------------------------------------------------------------------------------- /docs/images/hurospace.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnOrbitROS/Simulation/c2edc7414cc90a6f0421c16702ef44c5895fd151/docs/images/hurospace.jpg -------------------------------------------------------------------------------- /docs/images/linkedin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnOrbitROS/Simulation/c2edc7414cc90a6f0421c16702ef44c5895fd151/docs/images/linkedin.png -------------------------------------------------------------------------------- /docs/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnOrbitROS/Simulation/c2edc7414cc90a6f0421c16702ef44c5895fd151/docs/images/logo.png -------------------------------------------------------------------------------- /docs/images/logo_huro_fondo_blanco.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnOrbitROS/Simulation/c2edc7414cc90a6f0421c16702ef44c5895fd151/docs/images/logo_huro_fondo_blanco.png -------------------------------------------------------------------------------- /docs/images/logo_huro_large.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 30 | 31 | 32 | 33 | 34 | 36 | 37 | 38 | 40 | 43 | 46 | 47 | 48 | 50 | 54 | 55 | 56 | 59 | 64 | 66 | 67 | 69 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /docs/images/orbit_publisher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnOrbitROS/Simulation/c2edc7414cc90a6f0421c16702ef44c5895fd151/docs/images/orbit_publisher.png -------------------------------------------------------------------------------- /docs/images/ros_pub.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnOrbitROS/Simulation/c2edc7414cc90a6f0421c16702ef44c5895fd151/docs/images/ros_pub.png -------------------------------------------------------------------------------- /docs/images/ua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnOrbitROS/Simulation/c2edc7414cc90a6f0421c16702ef44c5895fd151/docs/images/ua.png -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | # Welcome to OnOrbitROS 2 | ![alt text](images/logo.png "OnOrbitROS Logo") 3 | 4 | OnOrbitROS is a unified open-source framework for space-robotics 5 | simulations. It is based on Robot Operating System (ROS) and includes and reproduces the principal environmental conditions that eventual space robots and manipulators could experience in an on-orbit servicing scenario. 6 | 7 | 8 | ## About Us 9 |
10 | HURO Logo 11 |
12 | Developed by Human Robotics (HURO) group, University of Alicante (Spain). 13 | In collaboration with the School of Aerospace, Transport and Manufacturing, Cranfield University (United Kingdom). 14 | 15 | ![alt text](images/ua.png "University of Alicante") Cranfield University 16 | 17 | 18 | Space robotics broadly encompasses the application of robots and autonomous systems for operations in the space environment. HURO Space Robotics section investigates the development of robotic systems and their control for performing tasks in space. 19 | 20 | !!! note 21 | You can find more information about this project and other works in our website: 22 | [HURO Space Robotics](https://www.huro.ua.es/index.php/research/research-lines/space-robotics) 23 | 24 |   LinkedIn   Follow us on [LinkedIn](https://www.linkedin.com/company/human-robotics-huro/mycompany/) for more updates! 25 | 26 | ## Licenses 27 | 28 | You are welcome to use this project, but please cite our work so we can keep developing applications. 29 | 30 | !!! warning 31 | Ramón, J. L., Pomares, J., & Felicetti, L. (2023).
32 | Task space control for on-orbit space robotics using a new ROS-based framework.
33 | Simulation Modelling Practice and Theory, 127(102790), 102790.
34 | [https://doi.org/10.1016/j.simpat.2023.102790](https://doi.org/10.1016/j.simpat.2023.102790) 35 | 36 | -------------------------------------------------------------------------------- /docs/launch.md: -------------------------------------------------------------------------------- 1 | # Launch OnOrbitROS 2 | 3 | All the functionalities of OnOrbitROS are launched simply by launching the project's launch file: 4 | 5 | roslaunch 6 | 7 | 8 | As presented in other sections, from this file the following functionalities are loaded: 9 | 10 | - Gazebo simulation parameters. 11 | - Launch of the orbit and orbit publisher package. 12 | - The world file (converting the .xacro to .world) and then loading with then the gazebo_ros launcher. 13 | - Spacecraft / robot URDF loaded to the param server. 14 | - World position of the spacecraft / robot model in the world. 15 | - Loads of the ROS controllers. 16 | 17 | When creating a new application, it is recommended to follow the same structure as the presented in the previously made applications to ensure all the functionalities are launched simply from one file. 18 | 19 | Under [Examples of Applications](examples.md) you will find the specific command used to launch each of the applications included. 20 | -------------------------------------------------------------------------------- /docs/requirements.txt: -------------------------------------------------------------------------------- 1 | sphinx==7.1.2 2 | sphinx-rtd-theme==1.3.0rc1 3 | -------------------------------------------------------------------------------- /docs/troubleshooting.md: -------------------------------------------------------------------------------- 1 | # Troubleshooting 2 | 3 | In this page you will find the collection of tips for solving possible errors mentioned throughout this documentation. There are some other comments included that might be of help when using the framework. 4 | 5 | ### World File not loading 6 | If you encounter any errors when launching the world, for example that the default Gazebo world loads instead of your own, create manually the `.world` file from the `.xacro` and leave it in the worlds forlder by executing the following command: 7 | 8 | $ rosrun xacro xacro .world.xacro > .world 9 | --- 10 | 11 | ### Plugin Library not updating 12 | If you have modified a plugin library, such as the `laserPlugin.cpp` or `Orbit_robot_pkg_plugin.cpp` and they do not update, try removing the `.so` file from the workspace `devel` or `devel_isolated` folders and the folder `orbit_robot_pkg` from the `build` or `build_isolated` folders. Those `.so` files should be located as this example: `>> /devel/orbit_robot_pkg/lib/`. Then do another `catkin_make` and `source devel/setup.bash` so it generates the files again. 13 | 14 | --- 15 | 16 | ### Robot model drifting when launching the simulation 17 | If you launch the simulation in Gazebo and the robot or spacecraft model located at the origin of the LVLH drifts away it is because the default world's LVLH link has a visual cube with physical properties. When the simulation loads and some part of your model intersects with the LVLH visual link, it produces a collision that makes your model to drift away. 18 | 19 | In this case you have 2 options: 20 | 21 | - Change the origin of your model in the `.launch` file, NOT in the `.xacro` file, so they don't collide: `` 22 | - Hide the LVLH base link removing its visual components to this declaration: `` 23 | 24 | --- 25 | 26 | ### Missing Controllers' packages 27 | In addition to the Ubuntu installation with its packages, it might be necessary to manually install these other packages. This is because OnOrbitROS takes advantages of packages already developed in ROS to improve its functionalities. 28 | 29 | Packages for the controllers: 30 | 31 | - [Controller Manager](https://wiki.ros.org/controller_manager): `$ sudo apt-get install ros-noetic-controller-manager` 32 | - [Joint State Controller](https://wiki.ros.org/joint_state_controller): `$ sudo apt-get install ros-noetic-joint-state-controller` 33 | - [Effort Controller](https://wiki.ros.org/effort_controllers): `$ sudo apt-get install ros-noetic-effort-controller` 34 | - [Position Controllers](https://wiki.ros.org/position_controllers): `$ sudo apt-get install ros-noetic-position-controllers` 35 | 36 | --- 37 | 38 | ### Rosbag missing 39 | To save the information in a file use the following command on your launch. If the folder you have specified in the command does not exist, the rosbag will not be saved. By default it is located under the folder `log` in the project. 40 | 41 | -------------------------------------------------------------------------------- /docs_inOnorbitros_june.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnOrbitROS/Simulation/c2edc7414cc90a6f0421c16702ef44c5895fd151/docs_inOnorbitros_june.zip -------------------------------------------------------------------------------- /ets_vii/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.0.2) 2 | project(ets_vii) 3 | 4 | ## Compile as C++11, supported in ROS Kinetic and newer 5 | # add_compile_options(-std=c++11) 6 | 7 | ## Find catkin macros and libraries 8 | ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) 9 | ## is used, also find other catkin packages 10 | find_package(catkin REQUIRED COMPONENTS 11 | urdf 12 | ) 13 | 14 | ## System dependencies are found with CMake's conventions 15 | # find_package(Boost REQUIRED COMPONENTS system) 16 | 17 | 18 | ## Uncomment this if the package has a setup.py. This macro ensures 19 | ## modules and global scripts declared therein get installed 20 | ## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html 21 | # catkin_python_setup() 22 | 23 | ################################################ 24 | ## Declare ROS messages, services and actions ## 25 | ################################################ 26 | 27 | ## To declare and build messages, services or actions from within this 28 | ## package, follow these steps: 29 | ## * Let MSG_DEP_SET be the set of packages whose message types you use in 30 | ## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). 31 | ## * In the file package.xml: 32 | ## * add a build_depend tag for "message_generation" 33 | ## * add a build_depend and a exec_depend tag for each package in MSG_DEP_SET 34 | ## * If MSG_DEP_SET isn't empty the following dependency has been pulled in 35 | ## but can be declared for certainty nonetheless: 36 | ## * add a exec_depend tag for "message_runtime" 37 | ## * In this file (CMakeLists.txt): 38 | ## * add "message_generation" and every package in MSG_DEP_SET to 39 | ## find_package(catkin REQUIRED COMPONENTS ...) 40 | ## * add "message_runtime" and every package in MSG_DEP_SET to 41 | ## catkin_package(CATKIN_DEPENDS ...) 42 | ## * uncomment the add_*_files sections below as needed 43 | ## and list every .msg/.srv/.action file to be processed 44 | ## * uncomment the generate_messages entry below 45 | ## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) 46 | 47 | ## Generate messages in the 'msg' folder 48 | # add_message_files( 49 | # FILES 50 | # Message1.msg 51 | # Message2.msg 52 | # ) 53 | 54 | ## Generate services in the 'srv' folder 55 | # add_service_files( 56 | # FILES 57 | # Service1.srv 58 | # Service2.srv 59 | # ) 60 | 61 | ## Generate actions in the 'action' folder 62 | # add_action_files( 63 | # FILES 64 | # Action1.action 65 | # Action2.action 66 | # ) 67 | 68 | ## Generate added messages and services with any dependencies listed here 69 | # generate_messages( 70 | # DEPENDENCIES 71 | # std_msgs # Or other packages containing msgs 72 | # ) 73 | 74 | ################################################ 75 | ## Declare ROS dynamic reconfigure parameters ## 76 | ################################################ 77 | 78 | ## To declare and build dynamic reconfigure parameters within this 79 | ## package, follow these steps: 80 | ## * In the file package.xml: 81 | ## * add a build_depend and a exec_depend tag for "dynamic_reconfigure" 82 | ## * In this file (CMakeLists.txt): 83 | ## * add "dynamic_reconfigure" to 84 | ## find_package(catkin REQUIRED COMPONENTS ...) 85 | ## * uncomment the "generate_dynamic_reconfigure_options" section below 86 | ## and list every .cfg file to be processed 87 | 88 | ## Generate dynamic reconfigure parameters in the 'cfg' folder 89 | # generate_dynamic_reconfigure_options( 90 | # cfg/DynReconf1.cfg 91 | # cfg/DynReconf2.cfg 92 | # ) 93 | 94 | ################################### 95 | ## catkin specific configuration ## 96 | ################################### 97 | ## The catkin_package macro generates cmake config files for your package 98 | ## Declare things to be passed to dependent projects 99 | ## INCLUDE_DIRS: uncomment this if your package contains header files 100 | ## LIBRARIES: libraries you create in this project that dependent projects also need 101 | ## CATKIN_DEPENDS: catkin_packages dependent projects also need 102 | ## DEPENDS: system dependencies of this project that dependent projects also need 103 | catkin_package( 104 | # INCLUDE_DIRS include 105 | # LIBRARIES ets_vii 106 | # CATKIN_DEPENDS urdf 107 | # DEPENDS system_lib 108 | ) 109 | 110 | ########### 111 | ## Build ## 112 | ########### 113 | 114 | ## Specify additional locations of header files 115 | ## Your package locations should be listed before other locations 116 | include_directories( 117 | # include 118 | ${catkin_INCLUDE_DIRS} 119 | ) 120 | 121 | ## Declare a C++ library 122 | # add_library(${PROJECT_NAME} 123 | # src/${PROJECT_NAME}/ets_vii.cpp 124 | # ) 125 | 126 | ## Add cmake target dependencies of the library 127 | ## as an example, code may need to be generated before libraries 128 | ## either from message generation or dynamic reconfigure 129 | # add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 130 | 131 | ## Declare a C++ executable 132 | ## With catkin_make all packages are built within a single CMake context 133 | ## The recommended prefix ensures that target names across packages don't collide 134 | # add_executable(${PROJECT_NAME}_node src/ets_vii_node.cpp) 135 | 136 | ## Rename C++ executable without prefix 137 | ## The above recommended prefix causes long target names, the following renames the 138 | ## target back to the shorter version for ease of user use 139 | ## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node" 140 | # set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "") 141 | 142 | ## Add cmake target dependencies of the executable 143 | ## same as for the library above 144 | # add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 145 | 146 | ## Specify libraries to link a library or executable target against 147 | # target_link_libraries(${PROJECT_NAME}_node 148 | # ${catkin_LIBRARIES} 149 | # ) 150 | 151 | ############# 152 | ## Install ## 153 | ############# 154 | 155 | # all install targets should use catkin DESTINATION variables 156 | # See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html 157 | 158 | ## Mark executable scripts (Python etc.) for installation 159 | ## in contrast to setup.py, you can choose the destination 160 | # catkin_install_python(PROGRAMS 161 | # scripts/my_python_script 162 | # DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 163 | # ) 164 | 165 | ## Mark executables for installation 166 | ## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_executables.html 167 | # install(TARGETS ${PROJECT_NAME}_node 168 | # RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 169 | # ) 170 | 171 | ## Mark libraries for installation 172 | ## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html 173 | # install(TARGETS ${PROJECT_NAME} 174 | # ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 175 | # LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 176 | # RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION} 177 | # ) 178 | 179 | ## Mark cpp header files for installation 180 | # install(DIRECTORY include/${PROJECT_NAME}/ 181 | # DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} 182 | # FILES_MATCHING PATTERN "*.h" 183 | # PATTERN ".svn" EXCLUDE 184 | # ) 185 | 186 | ## Mark other files for installation (e.g. launch and bag files, etc.) 187 | # install(FILES 188 | # # myfile1 189 | # # myfile2 190 | # DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 191 | # ) 192 | 193 | ############# 194 | ## Testing ## 195 | ############# 196 | 197 | ## Add gtest based cpp test target and link libraries 198 | # catkin_add_gtest(${PROJECT_NAME}-test test/test_ets_vii.cpp) 199 | # if(TARGET ${PROJECT_NAME}-test) 200 | # target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) 201 | # endif() 202 | 203 | ## Add folders to be run by python nosetests 204 | # catkin_add_nosetests(test) 205 | -------------------------------------------------------------------------------- /ets_vii/config/effort_controllers.yaml: -------------------------------------------------------------------------------- 1 | # Position Controllers --------------------------------------- 2 | joint1_position_controller: 3 | type: effort_controllers/JointPositionController 4 | joint: joint1 5 | pid: {p: 5000.0, i: 0.0, d: 10.0} 6 | joint2_position_controller: 7 | type: effort_controllers/JointPositionController 8 | joint: joint2 9 | pid: {p: 500.0, i: 0.0, d: 500.0} 10 | joint3_position_controller: 11 | type: effort_controllers/JointPositionController 12 | joint: joint3 13 | pid: {p: 2000.0, i: 0.0, d: 500.0} 14 | joint4_position_controller: 15 | type: effort_controllers/JointPositionController 16 | joint: joint4 17 | pid: {p: 3000.0, i: 0.0, d: 300.0} 18 | joint5_position_controller: 19 | type: effort_controllers/JointPositionController 20 | joint: joint5 21 | pid: {p: 300.0, i: 0.0, d: 100.0} 22 | joint6_position_controller: 23 | type: effort_controllers/JointPositionController 24 | joint: joint6 25 | pid: {p: 5.0, i: 0.0, d: 10.0} -------------------------------------------------------------------------------- /ets_vii/config/gazebo_controllers.yaml: -------------------------------------------------------------------------------- 1 | # Publish joint_states 2 | joint_state_controller: 3 | type: joint_state_controller/JointStateController 4 | publish_rate: 50 5 | -------------------------------------------------------------------------------- /ets_vii/config/ros_controllers.yaml: -------------------------------------------------------------------------------- 1 | satt_arm_controller: 2 | type: effort_controllers/JointTrajectoryController 3 | joints: 4 | - joint1 5 | - joint2 6 | - joint3 7 | - joint4 8 | - joint5 9 | - joint6 10 | 11 | constraints: 12 | # Esta tolerancia se suma al tiempo establecido para realizar la trayectoria 13 | goal_time: 0.5 14 | # Esta es el valor de velocidad que es considerada 0. 15 | stopped_velocity_tolerance: 0.02 # Override default 16 | joint1: 17 | trajectory: 0.005 # Not enforced if unspecified 18 | goal: 0.002 19 | joint2: 20 | trajectory: 0.05 # Not enforced if unspecified 21 | goal: 0.02 22 | joint3: 23 | trajectory: 0.05 # Not enforced if unspecified 24 | goal: 0.02 25 | joint4: 26 | trajectory: 0.05 # Not enforced if unspecified 27 | goal: 0.02 28 | joint5: 29 | trajectory: 0.05 # Not enforced if unspecified 30 | goal: 0.02 31 | joint6: 32 | trajectory: 0.05 # Not enforced if unspecified 33 | goal: 0.02 34 | gains: 35 | joint1: {p: 2000, d: 100, i: 10, i_clamp: 1} 36 | joint2: {p: 2000, d: 100, i: 10, i_clamp: 1} 37 | joint3: {p: 2000, d: 100, i: 10, i_clamp: 1} 38 | joint4: {p: 2000, d: 100, i: 10, i_clamp: 1} 39 | joint5: {p: 2000, d: 100, i: 10, i_clamp: 1} 40 | joint6: {p: 2000, d: 100, i: 10, i_clamp: 1} -------------------------------------------------------------------------------- /ets_vii/launch/axis_by_axis.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ets_vii/launch/effort_controllers.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /ets_vii/launch/effort_controllers_indivudual.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /ets_vii/launch/effort_controllers_wgg.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /ets_vii/launch/ets_vii.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ets_vii/launch/only_the_model.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 53 | 54 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /ets_vii/launch/trajectory.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /ets_vii/log/note.txt: -------------------------------------------------------------------------------- 1 | **Folder where the data obtained from the rosbag is stored. Delete old files to solve storage problems. 2 | -------------------------------------------------------------------------------- /ets_vii/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | ets_vii 4 | 0.0.0 5 | The ets_vii package 6 | 7 | 8 | 9 | 10 | jose 11 | 12 | 13 | 14 | 15 | 16 | TODO 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | catkin 52 | urdf 53 | urdf 54 | urdf 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /ets_vii/rviz/config.rviz: -------------------------------------------------------------------------------- 1 | Panels: 2 | - Class: rviz/Displays 3 | Help Height: 78 4 | Name: Displays 5 | Property Tree Widget: 6 | Expanded: 7 | - /Global Options1 8 | - /Status1 9 | - /Axes1 10 | - /RobotModel1 11 | - /RobotModel1/Joints1 12 | - /RobotModel1/Joints1/joint11 13 | - /RobotModel1/Joints1/joint21 14 | - /RobotModel1/Joints1/joint31 15 | - /RobotModel1/Joints1/joint41 16 | - /RobotModel1/Joints1/joint51 17 | - /RobotModel1/Joints1/joint61 18 | - /RobotModel1/Joints1/union_flange_joint1 19 | Splitter Ratio: 0.5 20 | Tree Height: 1799 21 | - Class: rviz/Selection 22 | Name: Selection 23 | - Class: rviz/Tool Properties 24 | Expanded: 25 | - /2D Pose Estimate1 26 | - /2D Nav Goal1 27 | - /Publish Point1 28 | Name: Tool Properties 29 | Splitter Ratio: 0.5886790156364441 30 | - Class: rviz/Views 31 | Expanded: 32 | - /Current View1 33 | Name: Views 34 | Splitter Ratio: 0.5 35 | - Class: rviz/Time 36 | Experimental: false 37 | Name: Time 38 | SyncMode: 0 39 | SyncSource: "" 40 | Preferences: 41 | PromptSaveOnExit: true 42 | Toolbars: 43 | toolButtonStyle: 2 44 | Visualization Manager: 45 | Class: "" 46 | Displays: 47 | - Alpha: 0.5 48 | Cell Size: 1 49 | Class: rviz/Grid 50 | Color: 160; 160; 164 51 | Enabled: true 52 | Line Style: 53 | Line Width: 0.029999999329447746 54 | Value: Lines 55 | Name: Grid 56 | Normal Cell Count: 0 57 | Offset: 58 | X: 0 59 | Y: 0 60 | Z: 0 61 | Plane: XY 62 | Plane Cell Count: 10 63 | Reference Frame: 64 | Value: true 65 | - Alpha: 1 66 | Class: rviz/Axes 67 | Enabled: true 68 | Length: 4 69 | Name: Axes 70 | Radius: 0.009999999776482582 71 | Reference Frame: 72 | Value: true 73 | - Alpha: 0.5 74 | Class: rviz/RobotModel 75 | Collision Enabled: false 76 | Enabled: true 77 | Joints: 78 | All Links Enabled: true 79 | Expand Joint Details: false 80 | Expand Link Details: false 81 | Expand Tree: false 82 | Link Tree Style: Joints in Alphabetic Order 83 | joint1: 84 | Show Axes: true 85 | Show Joint Axis: false 86 | Value: true 87 | joint2: 88 | Show Axes: true 89 | Show Joint Axis: false 90 | Value: true 91 | joint3: 92 | Show Axes: true 93 | Show Joint Axis: false 94 | Value: true 95 | joint4: 96 | Show Axes: true 97 | Show Joint Axis: false 98 | Value: true 99 | joint5: 100 | Show Axes: true 101 | Show Joint Axis: false 102 | Value: true 103 | joint6: 104 | Show Axes: true 105 | Show Joint Axis: false 106 | Value: true 107 | union_flange_joint: 108 | Show Axes: true 109 | Value: true 110 | Name: RobotModel 111 | Robot Description: robot_description 112 | TF Prefix: "" 113 | Update Interval: 0 114 | Value: true 115 | Visual Enabled: true 116 | Enabled: true 117 | Global Options: 118 | Background Color: 48; 48; 48 119 | Default Light: true 120 | Fixed Frame: base_link 121 | Frame Rate: 30 122 | Name: root 123 | Tools: 124 | - Class: rviz/Interact 125 | Hide Inactive Objects: true 126 | - Class: rviz/MoveCamera 127 | - Class: rviz/Select 128 | - Class: rviz/FocusCamera 129 | - Class: rviz/Measure 130 | - Class: rviz/SetInitialPose 131 | Theta std deviation: 0.2617993950843811 132 | Topic: /initialpose 133 | X std deviation: 0.5 134 | Y std deviation: 0.5 135 | - Class: rviz/SetGoal 136 | Topic: /move_base_simple/goal 137 | - Class: rviz/PublishPoint 138 | Single click: true 139 | Topic: /clicked_point 140 | Value: true 141 | Views: 142 | Current: 143 | Class: rviz/Orbit 144 | Distance: 10 145 | Enable Stereo Rendering: 146 | Stereo Eye Separation: 0.05999999865889549 147 | Stereo Focal Distance: 1 148 | Swap Stereo Eyes: false 149 | Value: false 150 | Field of View: 0.7853981852531433 151 | Focal Point: 152 | X: 0 153 | Y: 0 154 | Z: 0 155 | Focal Shape Fixed Size: true 156 | Focal Shape Size: 0.05000000074505806 157 | Invert Z Axis: false 158 | Name: Current View 159 | Near Clip Distance: 0.009999999776482582 160 | Pitch: 0.36039841175079346 161 | Target Frame: 162 | Yaw: 5.613566875457764 163 | Saved: ~ 164 | Window Geometry: 165 | Displays: 166 | collapsed: false 167 | Height: 2096 168 | Hide Left Dock: false 169 | Hide Right Dock: false 170 | QMainWindow State: 000000ff00000000fd0000000400000000000002d800000792fc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003d00000792000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f00000792fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073010000003d00000792000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e1000001970000000300000eb80000003efc0100000002fb0000000800540069006d0065010000000000000eb8000002eb00fffffffb0000000800540069006d0065010000000000000450000000000000000000000ac50000079200000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 171 | Selection: 172 | collapsed: false 173 | Time: 174 | collapsed: false 175 | Tool Properties: 176 | collapsed: false 177 | Views: 178 | collapsed: false 179 | Width: 3768 180 | X: 72 181 | Y: 27 182 | -------------------------------------------------------------------------------- /ets_vii/urdf/ets_vii.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | -------------------------------------------------------------------------------- /ets_vii/worlds/no_gravity.world: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 0.01 6 | 1 7 | 100 8 | 9 | 10 | world 11 | 12 | 13 | 14 | 15 | 0.0 0.0 0.0 16 | 0.0 0.0 0.0 17 | 18 | 19 | model://sun 20 | 21 | 22 | 23 | 24 | 0 0 0 0 0 0 25 | false 26 | 27 | 28 | 29 | 0.001 0.001 0.001 30 | 31 | 32 | 33 | 34 | 35 | 36 | 0.1 0.1 0.1 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /ets_vii/worlds/no_gravity_dart.world: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 0.000000000000000000 0.00000000000000000 0.000000000000000 9 | 0.00000000000 0.00000000000 0.000000000000 10 | 11 | 12 | model://sun 13 | 14 | 15 | 16 | 17 | 0 0 0 0 0 0 18 | false 19 | 20 | 21 | 22 | 0.001 0.001 0.001 23 | 24 | 25 | 26 | 27 | 28 | 29 | 0.1 0.1 0.1 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnOrbitROS/Simulation/c2edc7414cc90a6f0421c16702ef44c5895fd151/logo.png -------------------------------------------------------------------------------- /logo_w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnOrbitROS/Simulation/c2edc7414cc90a6f0421c16702ef44c5895fd151/logo_w.png -------------------------------------------------------------------------------- /mkdocs.yml: -------------------------------------------------------------------------------- 1 | site_name: OnOrbitROS Documentation 2 | 3 | theme: 4 | name: readthedocs 5 | highlightjs: true 6 | hljs_languages: 7 | - yaml 8 | - rust 9 | # features: 10 | # - content.code.copy 11 | 12 | repo_url: https://github.com/OnOrbitROS 13 | 14 | markdown_extensions: 15 | - admonition 16 | #- mdx_math 17 | # - markdown_include.include: 18 | # base_path: docs 19 | # - pymdownx.highlight: 20 | # anchor_linenums: true 21 | # line_spans: __span 22 | # pygments_lang_class: true 23 | # - pymdownx.inlinehilite 24 | # - pymdownx.snippets 25 | # - pymdownx.superfences 26 | 27 | 28 | extra_css: [extra.css] 29 | extra_javascript: [extra.js] 30 | extra_javascript: 31 | - https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/MathJax.js?config=TeX-AMS-MML_HTMLorMML 32 | 33 | nav: 34 | - Home: 35 | - Welcome to OnOrbitROS: index.md 36 | - HURO Space Robotics: huro.html 37 | - User Guide: 38 | - Installation Guide: Install.md 39 | - Launch Application: launch.md 40 | - Examples of Aplications: examples.md 41 | - Developer Guide: 42 | - Architechture: architechture.md 43 | - Create a new Application: application.md 44 | - Troubleshooting: troubleshooting.md 45 | - Experiments: experiments.md -------------------------------------------------------------------------------- /orbit_publisher_pkg/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.0.2) 2 | project(orbit_publisher_pkg) 3 | 4 | 5 | add_compile_options(-std=c++11) 6 | # set(CMAKE_BUILD_TYPE Debug) 7 | set(CMAKE_BUILD_TYPE Release) 8 | 9 | find_package(catkin REQUIRED COMPONENTS 10 | roscpp 11 | std_msgs 12 | geometry_msgs 13 | ) 14 | 15 | find_package (Eigen3 3.3 REQUIRED) 16 | 17 | catkin_package( 18 | INCLUDE_DIRS include 19 | LIBRARIES orbit_publisher_pkg 20 | CATKIN_DEPENDS roscpp std_msgs geometry_msgs orbit_msgs 21 | DEPENDS system_lib 22 | ) 23 | 24 | include_directories( 25 | ${PROJECT_SOURCE_DIR}/include 26 | ${catkin_INCLUDE_DIRS} 27 | ) 28 | 29 | add_executable(${PROJECT_NAME}_node src/orbit_publisher_pkg_node.cpp src/Orbit.cpp) 30 | target_link_libraries(${PROJECT_NAME}_node 31 | ${catkin_LIBRARIES} 32 | Eigen3::Eigen 33 | ) 34 | 35 | add_executable(fix_${PROJECT_NAME}_node src/fix_orbit_publisher_pkg_node.cpp src/Orbit.cpp) 36 | target_link_libraries(fix_${PROJECT_NAME}_node 37 | ${catkin_LIBRARIES} 38 | Eigen3::Eigen 39 | ) 40 | -------------------------------------------------------------------------------- /orbit_publisher_pkg/config/dynamic_orbit.yaml: -------------------------------------------------------------------------------- 1 | # rosparam load orbit_parameters.yaml [namespace] if don't use namespace /param_name 2 | # Oribit parameters 3 | publish_rate: 10 4 | eccentricity: 0.00001 5 | semi_major_axix: 12000 6 | inclination: (60.0*pi)/180.0 7 | rate_of_right_ascension: 0.0 8 | right_ascension_ini: 0.0 9 | argument_of_perigee_ini: 0.0 10 | rate_argument_Of_perigee: 0.0 11 | mean_anomaly_ini: (60.0*pi)/180.0 12 | time_pass_perigee: 13 | sec : 0 14 | min: 0 15 | hour: 0 16 | mday: 0 17 | mon: 0 18 | year: 2000 19 | 20 | time_start: 21 | sec : 0 22 | min: 0 23 | hour: 0 24 | mday: 0 25 | mon: 0 26 | year: 2000 27 | 28 | angular_velocity: 0.0010948236924738 # sqrt( MUe / pow( SemiMajorAxix , 3)); 29 | #period: -------------------------------------------------------------------------------- /orbit_publisher_pkg/config/fixed_orbit.yaml: -------------------------------------------------------------------------------- 1 | # rosparam load orbit_parameters.yaml [namespace] if don't use namespace /param_name 2 | # Oribit parameters 3 | publish_rate: 10 4 | pos_x: 0.0 5 | pos_y: 0.0 6 | pos_z: 0.0 7 | orientation_x: 0.0 8 | orientation_y: 0.0 9 | orientation_z: 0.0 10 | orientation_w: 1.0 11 | -------------------------------------------------------------------------------- /orbit_publisher_pkg/include/orbit_publisher_pkg/Orbit.h: -------------------------------------------------------------------------------- 1 | #ifndef ORBIT_H 2 | #define ORBIT_H 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include "ros/ros.h" 9 | 10 | 11 | 12 | class Orbit 13 | { 14 | public: 15 | Orbit(); 16 | Orbit(ros::NodeHandle nh, std::string n); 17 | virtual ~Orbit(); 18 | 19 | //Getters 20 | std::string GetName() { return name; } 21 | double GetEccentricity() { return eccentricity; } 22 | double GetSemiMajorAxis() {return semi_major_axis; } 23 | double GetInclination() {return inclination; } 24 | double GetRateOfRightAscension() { return rate_of_right_ascension; } 25 | double GetRightAscensionIni(){return right_ascension_ini; } 26 | double GetArgumentOfPerigeeIni() {return argument_of_perigee_ini; } 27 | double GetRateArgumentOfPerigee() {return rate_argument_of_perigee; } 28 | double GetMeanAnomalyIni() { return mean_anomaly_ini; } 29 | time_t GetTimePassPerigee() {return time_pass_perigee; } 30 | Eigen::Matrix GetPositionEciIni() { return position_eci_ini ; } 31 | Eigen::Matrix GetVelocityEciIni() { return velocity_eci_ini; } 32 | Eigen::Matrix GetLvLhRotationToEciIni() { return lvlh_rotation_to_eci_ini; } 33 | Eigen::Matrix GetPositionEci() { return position_eci; } 34 | Eigen::Matrix GetVelEph() { return vel_eph; }; 35 | double GetPositionEciX() { return position_eci(0); } 36 | double GetPositionEciY() { return position_eci(1); } 37 | double GetPositionEciZ() { return position_eci(2); } 38 | Eigen::Matrix GetVelocityEci() { return velocity_eci; } 39 | double GetVelocityEciX(){ return velocity_eci(0); } 40 | double GetVelocityEciY(){ return velocity_eci(1); } 41 | double GetVelocityEciZ(){ return velocity_eci(2); } 42 | Eigen::Matrix GetLvLhRotationToEci() { return lvlh_rotation_to_eci; } 43 | double GetAngularVelocity() { return angular_velocity; } 44 | double GetPeriod(){ return period; } 45 | double GetMeanMotion(){return mean_motion; } 46 | double GetEccentricAnomaly(){return eccentric_anomaly; } 47 | double GetAltitude(){return altitude; } 48 | 49 | double GetSimEccentricity() {return sim_eccentricity;} // Get Orbit Parameters 50 | double GetSimSemiMajorAxis() {return sim_semi_major_axis; } 51 | double GetSimInclination() {return sim_inclination; } 52 | double GetSimRateOfRightAscension() { return sim_right_ascension_node; } 53 | double GetSimArgumentOfPerigee() { return sim_argument_of_perigee; } 54 | double GetSimTrueAnomaly() { return sim_true_anomaly; } 55 | double GetSimPeriod() { return sim_period; } 56 | 57 | //Setters 58 | void SetName(std::string val) { name = val; } 59 | void SetEccentricity(double val) { eccentricity = val; } 60 | void SetSemiMajorAxis (double val) { semi_major_axis = val; } 61 | void SetInclination ( double val ) { inclination = val; } 62 | void SetRateOfRightAscension (double val) { rate_of_right_ascension = val; } 63 | void SetRightAscensionIni (double val) { right_ascension_ini = val; } 64 | void SetArgumentOfPerigeeIni (double val) { argument_of_perigee_ini = val; } 65 | void SetRateArgumentOfPerigee (double val) { rate_argument_of_perigee = val; } 66 | void SetMeanAnomalyIni (double val) { mean_anomaly_ini = val; } 67 | void SetTimePassPerigee (time_t val) { time_pass_perigee = val; } 68 | void SetPosEciIni (Eigen::Matrix val ) {position_eci_ini = val; } 69 | void SetValEciIni (Eigen::Matrix val) { velocity_eci_ini = val; } 70 | void SetLvLhRotationToEciIni (Eigen::Matrix val) { lvlh_rotation_to_eci_ini = val; } 71 | void SetPosEci (Eigen::Matrix val) { position_eci = val; } 72 | void SetValEci (Eigen::Matrix val) { velocity_eci = val; } 73 | void SetLvLhRrEci (Eigen::Matrix val) { lvlh_rotation_to_eci = val; } 74 | void SetAngularVelocity (double val) { angular_velocity = val; } 75 | void SetPeriod ( double val) {period = val; } 76 | void SetMeanMotion(double val) {mean_motion = val;} 77 | void SetEccentricAnomaly(double val) {eccentric_anomaly = val;} 78 | 79 | void SetSimEccentricity(double val) { sim_eccentricity = val;} // Set Orbit Parameters 80 | void SetSimSemiMajorAxis(double val) { sim_semi_major_axis = val; } 81 | void SetSimInclination(double val) { sim_inclination = val; } 82 | void SetSimRateOfRightAscension(double val) { sim_right_ascension_node = val; } 83 | void SetSimArgumentOfPerigee(double val) { sim_argument_of_perigee = val; } 84 | void SetSimTrueAnomaly(double val) { sim_true_anomaly = val; } 85 | void SetSimPeriod(double val) { sim_period = val; } 86 | 87 | //Const 88 | const double kMUe = 398600.5; //Earth's gravitational constant (Km^3/s^2) 89 | const double kRe = 6378; // Earth radius (Km) 90 | const double kOMe = 2.0 * M_PI / (3600.0 * 24.0) ; // Earth's rate (rad/sec) 91 | const double kJ2 = 1.082e-3; 92 | const double kg0 = 9.81 ; // m/s 93 | 94 | //Functions 95 | void KeplerianToEci(double time ); 96 | double CalcAltitude(double time); 97 | void CalcOrbitParamsFromSV(double time); 98 | 99 | 100 | private: 101 | std::string name; 102 | double eccentricity; 103 | double semi_major_axis; 104 | double inclination; 105 | double rate_of_right_ascension; 106 | double right_ascension_ini; 107 | double argument_of_perigee_ini; 108 | double rate_argument_of_perigee; 109 | double mean_anomaly_ini; 110 | time_t time_pass_perigee; 111 | double s_from_perigee_to_simulation; 112 | double angular_velocity; 113 | double period; 114 | double mean_motion; 115 | double eccentric_anomaly; 116 | double mu_divided_h; 117 | double altitude; 118 | 119 | double sim_eccentricity; 120 | double sim_semi_major_axis; 121 | double sim_inclination; 122 | double sim_right_ascension_node; 123 | double sim_angular_momentum; 124 | double sim_argument_of_perigee; 125 | double sim_true_anomaly; 126 | double sim_period; 127 | 128 | Eigen::Matrix position_eci_ini; 129 | Eigen::Matrix velocity_eci_ini; 130 | Eigen::Matrix lvlh_rotation_to_eci_ini; 131 | Eigen::Matrix position_eci; 132 | Eigen::Matrix velocity_eci; 133 | Eigen::Matrix lvlh_rotation_to_eci; 134 | Eigen::Matrix vel_eph; 135 | Eigen::Matrix ephemeris_rotation_plane; 136 | Eigen::Matrix velocity_plane; 137 | Eigen::Matrix plane_rotation_to_eci; 138 | Eigen::Matrix right_ascension_rotation; 139 | Eigen::Matrix inclination_rotation; 140 | Eigen::Matrix true_anomaly_rotation; 141 | 142 | double CalcEccenAnom(double eccentricity, double MeanAnomaly); 143 | double KeplerStart(double e, double M); 144 | double ThirdOrderApproximation(double e, double M, double x); 145 | void J2Effect(); 146 | }; 147 | 148 | #endif // ORBIT_H 149 | -------------------------------------------------------------------------------- /orbit_publisher_pkg/launch/basic.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /orbit_publisher_pkg/launch/basic_fix.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /orbit_publisher_pkg/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | orbit_publisher_pkg 4 | 0.0.1 5 | The orbit_publisher_pkg package 6 | 7 | Jose Luis Ramon 8 | 9 | TODO pendiente de definir 10 | 11 | catkin 12 | 13 | roscpp 14 | std_msgs 15 | geometry_msgs 16 | orbit_msgs 17 | 18 | roscpp 19 | std_msgs 20 | geometry_msgs 21 | orbit_msgs 22 | 23 | roscpp 24 | std_msgs 25 | geometry_msgs 26 | std_msgs 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /orbit_publisher_pkg/src/fix_orbit_publisher_pkg_node.cpp: -------------------------------------------------------------------------------- 1 | /*** Orbit Publisher Node ***/ 2 | /* 3 | Reads the information of the orbit defined in the .yaml file. 4 | Publishes the information needed for the simulation, as the position, velocity, air density and more. 5 | Here is the LVLH information in reference to the ECI's frame. 6 | 7 | The .yaml file is loaded in this package's .launch (fix_basic.launch) as follows: 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | In case more information is needed from the other plugins it should be published from this script. 16 | If additional (new) information is needed must be defined in "Orbit.h", declared in ".yaml", read by "Orbit.cpp" and published here. 17 | 18 | Node personalized for the simulation of the orbits. 19 | 20 | Developed by: Human Robotics Laboratoy (University of Alicante) 21 | https://www.huro.ua.es/index.php/research/research-lines/space-robotics 22 | */ 23 | #include "ros/ros.h" 24 | #include "std_msgs/String.h" 25 | #include "geometry_msgs/Pose.h" 26 | #include "geometry_msgs/Vector3.h" 27 | #include "orbit_publisher_pkg/Orbit.h" 28 | 29 | #include 30 | 31 | // Calculated LVLH 32 | int main(int argc, char **argv) 33 | { 34 | int rate; 35 | ros::init(argc, argv, "OrbitPositionPublisher"); // Published the orbital information required for the simulation 36 | ros::NodeHandle n; 37 | std::string node_name = ros::this_node::getNamespace(); 38 | ros::Publisher orbit_position_pub = n.advertise("/OrbitPosition", 1000); 39 | ros::Publisher orbit_velocity_pub = n.advertise("/OrbitVelocity", 1000); 40 | 41 | 42 | if (!n.getParam("/" + node_name + "/publish_rate",rate)) 43 | { 44 | rate = 10; 45 | } 46 | ros::Rate loop_rate(rate); 47 | 48 | geometry_msgs::Pose pos; 49 | 50 | if (!n.getParam("/" + node_name + "/pos_x",pos.position.x)) 51 | { 52 | pos.position.x = 0.0; 53 | } 54 | if (!n.getParam("/" + node_name + "/pos_y",pos.position.y)) 55 | { 56 | pos.position.y = 0.0; 57 | } 58 | if (!n.getParam("/" + node_name + "/pos_z",pos.position.z)) 59 | { 60 | pos.position.z = 0.0; 61 | } 62 | if (!n.getParam("/" + node_name + "/orientation_x",pos.orientation.x)) 63 | { 64 | pos.orientation.x = 0.0; 65 | } 66 | if (!n.getParam("/" + node_name + "/orientation_y",pos.orientation.y)) 67 | { 68 | pos.orientation.y = 0.0; 69 | } 70 | if (!n.getParam("/" + node_name + "/orientation_z",pos.orientation.z)) 71 | { 72 | pos.orientation.z = 0.0; 73 | } 74 | if (!n.getParam("/" + node_name + "/orientation_w",pos.orientation.w)) 75 | { 76 | pos.orientation.w = 1.0; 77 | } 78 | 79 | while (ros::ok()) 80 | { 81 | orbit_position_pub.publish(pos); 82 | ros::spinOnce(); 83 | loop_rate.sleep(); 84 | } 85 | return 0; 86 | } -------------------------------------------------------------------------------- /orbit_publisher_pkg/src/orbit_publisher_pkg_node.cpp: -------------------------------------------------------------------------------- 1 | /*** Orbit Publisher Node ***/ 2 | /* 3 | Reads the information of the orbit defined in the .yaml file. 4 | Publishes the information needed for the simulation, as the position, velocity, air density and more. 5 | Here is the LVLH information in reference to the ECI's frame. 6 | 7 | The .yaml file is loaded in this package's .launch (basic.launch) as follows: 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | In case more information is needed from the other plugins it should be published from this script. 16 | If additional (new) information is needed must be defined in "Orbit.h", declared in ".yaml", read by "Orbit.cpp" and published here. 17 | 18 | Node personalized for the simulation of the orbits. 19 | 20 | Developed by: Human Robotics Laboratoy (University of Alicante) 21 | https://www.huro.ua.es/index.php/research/research-lines/space-robotics 22 | */ 23 | 24 | #include "ros/ros.h" 25 | #include "std_msgs/String.h" 26 | #include "std_msgs/Float64.h" 27 | #include "geometry_msgs/Pose.h" 28 | #include "geometry_msgs/Vector3.h" 29 | #include "orbit_publisher_pkg/Orbit.h" 30 | 31 | #include "rosgraph_msgs/Clock.h" 32 | #include 33 | 34 | double gazebo_sim_time = 0.0; // Gazebo simulation time 35 | 36 | // Callback function for the /clock topic 37 | void clockCallback(const rosgraph_msgs::Clock::ConstPtr& msg) { 38 | gazebo_sim_time = msg->clock.toSec(); 39 | } 40 | 41 | int main(int argc, char **argv) 42 | { 43 | int rate; 44 | ros::init(argc, argv, "OrbitPositionPublisher"); // Published the orbital information required for the simulation 45 | ros::NodeHandle n; 46 | std::string node_name = ros::this_node::getNamespace(); 47 | // ros::Publisher orbit_position_pub = n.advertise("/"+ node_name +"/OrbitPosition", 1000); 48 | // ros::Publisher orbit_velocity_pub = n.advertise("/" + node_name +"/OrbitVelocity", 1000); 49 | ros::Publisher orbit_position_pub = n.advertise("/OrbitPosition", 1000); 50 | ros::Publisher orbit_velocity_pub = n.advertise("/OrbitVelocity", 1000); 51 | ros::Publisher orbit_altitude_pub = n.advertise("/OrbitAltitude", 1000); 52 | 53 | // Orbit parameters 54 | ros::Publisher orbit_sim_ecc_pub = n.advertise("/OrbitEccentricity", 1000); 55 | ros::Publisher orbit_sim_sa_pub = n.advertise("/OrbitSemiMajorAxis", 1000); 56 | ros::Publisher orbit_sim_incl_pub = n.advertise("/OrbitInclination", 1000); 57 | ros::Publisher orbit_sim_raan_pub = n.advertise("/OrbitRAAN", 1000); 58 | ros::Publisher orbit_sim_aop_pub = n.advertise("/OrbitArgumentOfPerigee", 1000); 59 | ros::Publisher orbit_sim_ta_pub = n.advertise("/OrbitTrueAnomaly", 1000); 60 | ros::Publisher orbit_sim_period_pub = n.advertise("/OrbitPeriod", 1000); 61 | 62 | ros::Subscriber clock_sub = n.subscribe("/clock", 10, clockCallback); 63 | 64 | if (!n.getParam("/" + node_name + "/publish_rate",rate)) 65 | { 66 | rate = 10; 67 | } 68 | ros::Rate loop_rate(rate); 69 | 70 | Orbit orbital(n, node_name); // Create the orbit 71 | orbital.SetName(node_name); 72 | Eigen::Quaternion q; 73 | geometry_msgs::Pose pos; 74 | geometry_msgs::Vector3 vel; 75 | std_msgs::Float64 altitude; 76 | 77 | // Other orbit parameters 78 | std_msgs::Float64 sim_ecc; 79 | std_msgs::Float64 sim_sa; 80 | std_msgs::Float64 sim_incl; 81 | std_msgs::Float64 sim_raan; 82 | std_msgs::Float64 sim_aop; 83 | std_msgs::Float64 sim_ta; 84 | std_msgs::Float64 sim_period; 85 | bool publish_orbit_parameters; // Publish or not the keplerian orbital values 86 | if (!n.getParam("/" + node_name + "/orbit/publish_orbit_parameters", publish_orbit_parameters)) 87 | { 88 | publish_orbit_parameters = true; 89 | } 90 | 91 | /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ 92 | while (ros::ok()) 93 | { 94 | // *** Continous publish *** // 95 | orbital.KeplerianToEci(gazebo_sim_time); 96 | q = orbital.GetLvLhRotationToEci(); 97 | 98 | // Pose 99 | pos.position.x = orbital.GetPositionEciX(); 100 | pos.position.y = orbital.GetPositionEciY(); 101 | pos.position.z = orbital.GetPositionEciZ(); 102 | pos.orientation.w = q.w(); 103 | pos.orientation.x = q.x(); 104 | pos.orientation.y = q.y(); 105 | pos.orientation.z = q.z(); 106 | orbit_position_pub.publish(pos); 107 | 108 | // Velocity 109 | vel.x = orbital.GetVelocityEciX(); 110 | vel.y = orbital.GetVelocityEciY(); 111 | vel.z = orbital.GetVelocityEciZ(); 112 | orbit_velocity_pub.publish(vel); 113 | 114 | // Altitude 115 | altitude.data = orbital.CalcAltitude(gazebo_sim_time); 116 | orbit_altitude_pub.publish(altitude); 117 | 118 | // Keplerian Orbit Elements 119 | if( publish_orbit_parameters ){ 120 | orbital.CalcOrbitParamsFromSV(gazebo_sim_time); 121 | sim_ecc.data = orbital.GetSimEccentricity(); 122 | orbit_sim_ecc_pub.publish(sim_ecc); 123 | sim_sa.data = orbital.GetSimSemiMajorAxis(); 124 | orbit_sim_sa_pub.publish(sim_sa); 125 | sim_incl.data = orbital.GetSimInclination(); 126 | orbit_sim_incl_pub.publish(sim_incl); 127 | sim_raan.data = orbital.GetSimRateOfRightAscension(); 128 | orbit_sim_raan_pub.publish(sim_raan); 129 | sim_aop.data = orbital.GetSimArgumentOfPerigee(); 130 | orbit_sim_aop_pub.publish(sim_aop); 131 | sim_ta.data = orbital.GetSimTrueAnomaly(); 132 | orbit_sim_ta_pub.publish(sim_ta); 133 | sim_period.data = orbital.GetSimPeriod(); 134 | orbit_sim_period_pub.publish(sim_period); 135 | } 136 | 137 | // *** Publish only once *** / 138 | // if( gazebo_sim_time < 2 ){ // publish until x simulation seconds 139 | 140 | // } 141 | 142 | ros::spinOnce(); 143 | loop_rate.sleep(); 144 | } 145 | return 0; 146 | } -------------------------------------------------------------------------------- /orbit_robot_pkg/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.0.2) 2 | project(orbit_robot_pkg) 3 | 4 | add_compile_options(-std=c++11) 5 | 6 | find_package(catkin REQUIRED COMPONENTS 7 | gazebo_ros 8 | roscpp 9 | rospy 10 | std_msgs 11 | geometry_msgs 12 | ) 13 | 14 | find_package (Eigen3 3.3 REQUIRED) 15 | find_package(gazebo REQUIRED) 16 | 17 | 18 | link_directories(${GAZEBO_LIBRARY_DIRS}) 19 | include_directories(${PROJECT_SOURCE_DIR}/include ${Boost_INCLUDE_DIR} ${catkin_INCLUDE_DIRS} ${GAZEBO_INCLUDE_DIRS}) 20 | 21 | 22 | catkin_package( 23 | DEPENDS 24 | roscpp 25 | gazebo_ros 26 | ) 27 | 28 | add_library(Orbit_robot_pkg_plugin src/Orbit_robot_pkg_plugin.cpp src/OrbitLink.cpp ) 29 | target_link_libraries(Orbit_robot_pkg_plugin ${catkin_LIBRARIES} ${GAZEBO_LIBRARIES}) -------------------------------------------------------------------------------- /orbit_robot_pkg/include/orbit_robot_pkg/OrbitLink.h: -------------------------------------------------------------------------------- 1 | #ifndef ORBITLINK_H 2 | #define ORBITLINK_H 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | 12 | class OrbitLink 13 | { 14 | public: 15 | OrbitLink(); 16 | virtual ~OrbitLink(); 17 | void OrbitLinkInitialize(double ReferenceAngularVelocity, double mass, Eigen::Matrix i); 18 | 19 | //Getters 20 | double GetMass(){ return Mass; } 21 | Eigen::Matrix GetInertia(){ return Inertia; } 22 | Eigen::Matrix GetCoM(){ return CoM; } 23 | Eigen::Matrix GetVelocityIni() { return VelocityIni; } 24 | Eigen::Matrix GetLvLhRrLvLhIni() { return LvLhRrLvLhIni;} 25 | Eigen::Matrix GetAngularRate() { return AngularRate; } 26 | Eigen::Matrix GetPosition() { return Position; } 27 | Eigen::Matrix GetVelocity() { return Velocity; } 28 | Eigen::Matrix GetForces() { return Forces; } 29 | ignition::math::v6::Vector3d GetForcesIg(); 30 | Eigen::Matrix GetBodyRrLvLh() { return BodyRrLvLh; } 31 | Eigen::Matrix GetBodyRrEci(){return Body_Rr_Eci; } 32 | Eigen::Quaternion GetLinkQ() {return linkQ; } 33 | Eigen::Quaternion GetOrbitQ() {return orbitQ; } 34 | Eigen::Matrix GetThrust() {return Thrust; } 35 | Eigen::Matrix GetTorque() {return Torque; } 36 | ignition::math::v6::Vector3d GetTorqueIg(); 37 | Eigen::Matrix GetControlTorque() {return ControlTorque; } 38 | Eigen::Matrix GetCW(){return CW; } 39 | gazebo::physics::LinkPtr GetLinkSatellite(){return LinkSatellite;} 40 | ros::Publisher GetRosLinkPublisher() { return rosLinkPublisher;} 41 | //Setters 42 | void Setn0 (double val){ n0 = val; } 43 | void SetMass(double val) { Mass = val; } 44 | void SetInertia(Eigen::Matrix val) { Inertia = val; } 45 | void SetCoM( Eigen::Matrix val) { CoM = val; } 46 | void SetVelocityIni( Eigen::Matrix val) { VelocityIni = val; } 47 | void SetLvLhRrLvLhIni( Eigen::Matrix val) { LvLhRrLvLhIni = val; } 48 | void SetAngularRate ( Eigen::Matrix val) { AngularRate = val; } 49 | void SetPosition( Eigen::Matrix val) { Position = val; } 50 | void SetPosition( double x, double y, double z); 51 | void SetVelocity( Eigen::Matrix val) { Velocity = val; } 52 | void SetVelocity (double Vx, double Vy, double Vz ); 53 | void SetForces( Eigen::Matrix val) { Forces = val; } 54 | void SetBodyRrLvLh( Eigen::Matrix val) { BodyRrLvLh = val; } 55 | void SetQuaternions( Eigen::Quaternion link, Eigen::Quaternion orbit ) { linkQ = link; orbitQ = orbit; } 56 | void SetQuaternions( double linkW, double linkX, double linkY, double linkZ, double orbitW, double orbitX, double orbitY, double orbitZ); 57 | void SetThrust( Eigen::Matrix val) { Thrust = val; } 58 | void SetTorque( Eigen::Matrix val) { Torque = val; } 59 | void SetControlTorque( Eigen::Matrix val) { ControlTorque = val; } 60 | void SetCW( Eigen::Matrix val) { CW = val; } 61 | void SetLinkSatellite( gazebo::physics::LinkPtr val) { LinkSatellite = val;} 62 | void SetRosLinkPublisher(ros::Publisher val) { rosLinkPublisher = val;} 63 | 64 | //Dynamics 65 | void DynamicsCalcForces(); 66 | void DynamicsCalcTorque(); 67 | 68 | private: 69 | //Aux 70 | Eigen::Matrix AuxMatrixVectorProduct ( Eigen::Matrix); 71 | ignition::math::Vector3d FromEtoI(Eigen::Matrix val); 72 | Eigen::Matrix CalcRrFromQ(Eigen::Quaternion Q); 73 | 74 | private: 75 | double n0; 76 | double Mass; 77 | Eigen::Matrix Inertia; 78 | Eigen::Matrix CoM; 79 | Eigen::Matrix VelocityIni; 80 | Eigen::Matrix LvLhRrLvLhIni; 81 | Eigen::Matrix AngularRate; 82 | Eigen::Matrix Position; 83 | Eigen::Matrix Velocity; 84 | Eigen::Matrix Forces; 85 | Eigen::Matrix BodyRrLvLh; 86 | Eigen::Quaternion linkQ; 87 | Eigen::Quaternion orbitQ; 88 | Eigen::Matrix Thrust; 89 | Eigen::Matrix Torque; 90 | Eigen::Matrix ControlTorque; 91 | Eigen::Matrix CW; 92 | Eigen::Matrix Body_Rr_Eci; 93 | Eigen::Matrix LvLh_Rr_Eci; 94 | Eigen::Matrix TH; 95 | Eigen::Matrix J2; 96 | Eigen::Matrix PositionVelocity; 97 | gazebo::physics::LinkPtr LinkSatellite; 98 | ros::Publisher rosLinkPublisher; 99 | }; 100 | 101 | #endif // ORBITLINK_H 102 | -------------------------------------------------------------------------------- /orbit_robot_pkg/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | orbit_robot_pkg 4 | 0.0.1 5 | The orbit_robot_pkg package 6 | 7 | Jose Luis Ramon 8 | 9 | MIT 10 | 11 | catkin 12 | gazebo_ros 13 | roscpp 14 | std_msgs 15 | geometry_msgs 16 | gazebo_ros 17 | roscpp 18 | std_msgs 19 | geometry_msgs 20 | gazebo_ros 21 | roscpp 22 | std_msgs 23 | geometry_msgs 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /orbit_robot_pkg/src/OrbitLink.cpp: -------------------------------------------------------------------------------- 1 | #include "orbit_robot_pkg/OrbitLink.h" 2 | 3 | OrbitLink::OrbitLink() 4 | { 5 | } 6 | 7 | OrbitLink::~OrbitLink() 8 | { 9 | } 10 | 11 | void OrbitLink::OrbitLinkInitialize(double orbitReferenceAngularVelocity, double m, Eigen::Matrix i) 12 | { 13 | n0 = orbitReferenceAngularVelocity; 14 | Mass = m; 15 | Inertia = i; 16 | Inertia(1,0) = i(0,1); 17 | Inertia(2,0) = i(0,2); 18 | Inertia(2,1) = i(1,2); 19 | 20 | CoM << 0.0, 0.0, 0.0; 21 | CW << (3.0 * pow(n0,2)), 0.0, 0.0, 0.0, (2.0 * n0), 0.0, 22 | 0.0 , 0.0, 0.0,((-2.0) * n0), 0.0, 0.0, 23 | 0.0 , 0.0, -(pow(n0,2)), 0.0, 0.0, 0.0; 24 | // To be implemented 25 | J2 << 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 26 | 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 27 | 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0; 28 | } 29 | 30 | Eigen::Matrix OrbitLink::AuxMatrixVectorProduct ( Eigen::Matrix vector) 31 | { 32 | Eigen::Matrix result; 33 | result << 0.0 , -vector(2), vector(1), 34 | vector(2), 0.0, -vector(0), 35 | -vector(1), vector(0), 0.0; 36 | 37 | return result; 38 | } 39 | 40 | ignition::math::v6::Vector3d OrbitLink::FromEtoI(Eigen::Matrix val) 41 | { 42 | ignition::math::v6::Vector3d res(val(0),val(1),val(2)); 43 | return res; 44 | } 45 | 46 | Eigen::Matrix OrbitLink::CalcRrFromQ(Eigen::Quaternion Q) 47 | { 48 | Eigen::Matrix RrMatrix; 49 | return RrMatrix; 50 | } 51 | 52 | void OrbitLink::SetPosition( double x, double y, double z) 53 | { 54 | this->Position.x()= x; 55 | this->Position.y()= y; 56 | this->Position.z()= z; 57 | } 58 | 59 | void OrbitLink::SetVelocity (double Vx, double Vy, double Vz ) 60 | { 61 | this->Velocity.x()=Vx; 62 | this->Velocity.y()=Vy; 63 | this->Velocity.z()=Vz; 64 | } 65 | 66 | void OrbitLink::SetQuaternions( double linkW, double linkX, double linkY, double linkZ, 67 | double orbitW, double orbitX, double orbitY, double orbitZ) 68 | { 69 | this->linkQ.w() = linkW; 70 | this->linkQ.x() = linkX; 71 | this->linkQ.y() = linkY; 72 | this->linkQ.z() = linkZ; 73 | this->orbitQ.w() = orbitW; 74 | this->orbitQ.x() = orbitX; 75 | this->orbitQ.y() = orbitY; 76 | this->orbitQ.z() = orbitZ; 77 | 78 | 79 | Body_Rr_Eci = this->linkQ; 80 | //if (Mass > 1000.0) 81 | //std::cout << "Body_Rr_Eci" << std::endl << Body_Rr_Eci << std::endl; 82 | LvLh_Rr_Eci = this->orbitQ; 83 | //if (Mass > 1000.0) 84 | //std::cout << "LvLh_Rr_Eci" << std::endl << LvLh_Rr_Eci << std::endl; 85 | BodyRrLvLh = Body_Rr_Eci * LvLh_Rr_Eci.transpose() ; 86 | //if (Mass > 1000.0) 87 | //std::cout << "BodyRrLvLh" << std::endl << BodyRrLvLh << std::endl; 88 | //std::cout << "Mass = " << Mass << std::endl << "BodyRrLvLh" << std::endl << BodyRrLvLh << std::endl; 89 | } 90 | 91 | void OrbitLink::DynamicsCalcForces() 92 | { 93 | PositionVelocity << Position, Velocity; 94 | Forces = (CW * PositionVelocity)* Mass + (J2 * PositionVelocity) * Mass ; 95 | Forces << 0.0 , 0.0 , 0.0 ; 96 | } 97 | 98 | ignition::math::v6::Vector3d OrbitLink::GetForcesIg() 99 | { 100 | DynamicsCalcForces(); 101 | return (FromEtoI(Forces)); 102 | } 103 | 104 | ignition::math::v6::Vector3d OrbitLink::GetTorqueIg() 105 | { 106 | DynamicsCalcTorque(); 107 | return (FromEtoI(Torque)); 108 | } 109 | 110 | void OrbitLink::DynamicsCalcTorque() 111 | { 112 | /* if (Mass > 1000.0) 113 | { */ 114 | 115 | 116 | Eigen::Matrix RadialDirectionLvLh ( 1.0, 0.0, 0.0); 117 | Eigen::Matrix RadialDirectionRrBodyEx; 118 | Eigen::Matrix RadialDirectionRrBody = BodyRrLvLh * RadialDirectionLvLh; 119 | //if (Mass > 1000.0) 120 | //std::cout << "BodyRrLvLh" << std::endl << BodyRrLvLh << std::endl; 121 | //if (Mass > 1000.0) 122 | //std::cout << "RadialDirectionRrBody" << std::endl << RadialDirectionRrBody << std::endl; 123 | Eigen::Matrix GravityGradiant; 124 | Eigen::Matrix EnviromentalTorque; 125 | //if (Mass > 1000.0) 126 | //std::cout << "Inertia" << std::endl << Inertia << std::endl; 127 | Inertia = Inertia - Mass * (CoM.transpose() * CoM * Eigen::MatrixXd::Identity(3,3) - CoM * CoM.transpose()); 128 | //if (Mass > 1000.0) 129 | //std::cout << "Inertia" << std::endl << Inertia << std::endl; 130 | RadialDirectionRrBodyEx = AuxMatrixVectorProduct ( RadialDirectionRrBody); 131 | //if (Mass > 1000.0) 132 | //std::cout << "RadialDirectionRrBodyEx" << std::endl << RadialDirectionRrBodyEx << std::endl; 133 | GravityGradiant = RadialDirectionRrBodyEx * (Inertia * RadialDirectionRrBody); 134 | //if (Mass > 1000.0) 135 | //std::cout << "GravityGradiant" << std::endl << GravityGradiant << std::endl; 136 | EnviromentalTorque = 3.0 * (n0 * n0) * GravityGradiant; 137 | //if (Mass > 1000.0) 138 | //std::cout << "EnviromentalTorque" << std::endl << EnviromentalTorque << std::endl; 139 | 140 | Torque = EnviromentalTorque ; 141 | } 142 | -------------------------------------------------------------------------------- /package_template/launch/default.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /package_template/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | package_template 4 | 0.0.0 5 | The package_template package 6 | 7 | 8 | 9 | 10 | huro 11 | 12 | 13 | 14 | 15 | 16 | TODO 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | catkin 52 | gazebo_ros 53 | geometry_msgs 54 | message_generation 55 | roscpp 56 | std_msgs 57 | urdf 58 | gazebo_ros 59 | geometry_msgs 60 | roscpp 61 | std_msgs 62 | urdf 63 | gazebo_ros 64 | geometry_msgs 65 | roscpp 66 | std_msgs 67 | urdf 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /package_template/urdf/cubesat_template.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | / 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /package_template/worlds/no_gravity.world: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 0.01 11 | 1 12 | 100 13 | 14 | 15 | world 16 | 17 | 18 | 19 | 0.0 0.0 0.0 20 | 0.0 0.0 0.0 21 | 22 | model://sun 23 | 24 | 25 | 26 | 27 | 28 | 0 0 0 0 0 0 29 | false 30 | 31 | 32 | 33 | 0.001 0.001 0.001 34 | 35 | 36 | 37 | 38 | 39 | 40 | 0.1 0.1 0.1 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /package_template/worlds/no_gravity.world.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0.01 10 | 1 11 | 100 12 | 13 | 14 | world 15 | 16 | 17 | 18 | 19 | 0.0 0.0 0.0 20 | 0.0 0.0 0.0 21 | 22 | 23 | model://sun 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 0 0 0 0 0 0 32 | false 33 | 34 | 35 | 36 | 0.001 0.001 0.001 37 | 38 | 39 | 40 | 41 | 42 | 43 | 0.1 0.1 0.1 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | sphinx==7.1.2 2 | sphinx-rtd-theme==1.3.0rc1 3 | -------------------------------------------------------------------------------- /site/assets/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnOrbitROS/Simulation/c2edc7414cc90a6f0421c16702ef44c5895fd151/site/assets/images/favicon.png -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.da.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Lunr languages, `Danish` language 3 | * https://github.com/MihaiValentin/lunr-languages 4 | * 5 | * Copyright 2014, Mihai Valentin 6 | * http://www.mozilla.org/MPL/ 7 | */ 8 | /*! 9 | * based on 10 | * Snowball JavaScript Library v0.3 11 | * http://code.google.com/p/urim/ 12 | * http://snowball.tartarus.org/ 13 | * 14 | * Copyright 2010, Oleg Mazko 15 | * http://www.mozilla.org/MPL/ 16 | */ 17 | 18 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.da=function(){this.pipeline.reset(),this.pipeline.add(e.da.trimmer,e.da.stopWordFilter,e.da.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.da.stemmer))},e.da.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.da.trimmer=e.trimmerSupport.generateTrimmer(e.da.wordCharacters),e.Pipeline.registerFunction(e.da.trimmer,"trimmer-da"),e.da.stemmer=function(){var r=e.stemmerSupport.Among,i=e.stemmerSupport.SnowballProgram,n=new function(){function e(){var e,r=f.cursor+3;if(d=f.limit,0<=r&&r<=f.limit){for(a=r;;){if(e=f.cursor,f.in_grouping(w,97,248)){f.cursor=e;break}if(f.cursor=e,e>=f.limit)return;f.cursor++}for(;!f.out_grouping(w,97,248);){if(f.cursor>=f.limit)return;f.cursor++}d=f.cursor,d=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(c,32),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del();break;case 2:f.in_grouping_b(p,97,229)&&f.slice_del()}}function t(){var e,r=f.limit-f.cursor;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.find_among_b(l,4)?(f.bra=f.cursor,f.limit_backward=e,f.cursor=f.limit-r,f.cursor>f.limit_backward&&(f.cursor--,f.bra=f.cursor,f.slice_del())):f.limit_backward=e)}function s(){var e,r,i,n=f.limit-f.cursor;if(f.ket=f.cursor,f.eq_s_b(2,"st")&&(f.bra=f.cursor,f.eq_s_b(2,"ig")&&f.slice_del()),f.cursor=f.limit-n,f.cursor>=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(m,5),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del(),i=f.limit-f.cursor,t(),f.cursor=f.limit-i;break;case 2:f.slice_from("løs")}}function o(){var e;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.out_grouping_b(w,97,248)?(f.bra=f.cursor,u=f.slice_to(u),f.limit_backward=e,f.eq_v_b(u)&&f.slice_del()):f.limit_backward=e)}var a,d,u,c=[new r("hed",-1,1),new r("ethed",0,1),new r("ered",-1,1),new r("e",-1,1),new r("erede",3,1),new r("ende",3,1),new r("erende",5,1),new r("ene",3,1),new r("erne",3,1),new r("ere",3,1),new r("en",-1,1),new r("heden",10,1),new r("eren",10,1),new r("er",-1,1),new r("heder",13,1),new r("erer",13,1),new r("s",-1,2),new r("heds",16,1),new r("es",16,1),new r("endes",18,1),new r("erendes",19,1),new r("enes",18,1),new r("ernes",18,1),new r("eres",18,1),new r("ens",16,1),new r("hedens",24,1),new r("erens",24,1),new r("ers",16,1),new r("ets",16,1),new r("erets",28,1),new r("et",-1,1),new r("eret",30,1)],l=[new r("gd",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("elig",1,1),new r("els",-1,1),new r("løst",-1,2)],w=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],p=[239,254,42,3,0,0,0,0,0,0,0,0,0,0,0,0,16],f=new i;this.setCurrent=function(e){f.setCurrent(e)},this.getCurrent=function(){return f.getCurrent()},this.stem=function(){var r=f.cursor;return e(),f.limit_backward=r,f.cursor=f.limit,n(),f.cursor=f.limit,t(),f.cursor=f.limit,s(),f.cursor=f.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.da.stemmer,"stemmer-da"),e.da.stopWordFilter=e.generateStopWordFilter("ad af alle alt anden at blev blive bliver da de dem den denne der deres det dette dig din disse dog du efter eller en end er et for fra ham han hans har havde have hende hendes her hos hun hvad hvis hvor i ikke ind jeg jer jo kunne man mange med meget men mig min mine mit mod ned noget nogle nu når og også om op os over på selv sig sin sine sit skal skulle som sådan thi til ud under var vi vil ville vor være været".split(" ")),e.Pipeline.registerFunction(e.da.stopWordFilter,"stopWordFilter-da")}}); -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.de.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Lunr languages, `German` language 3 | * https://github.com/MihaiValentin/lunr-languages 4 | * 5 | * Copyright 2014, Mihai Valentin 6 | * http://www.mozilla.org/MPL/ 7 | */ 8 | /*! 9 | * based on 10 | * Snowball JavaScript Library v0.3 11 | * http://code.google.com/p/urim/ 12 | * http://snowball.tartarus.org/ 13 | * 14 | * Copyright 2010, Oleg Mazko 15 | * http://www.mozilla.org/MPL/ 16 | */ 17 | 18 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.de=function(){this.pipeline.reset(),this.pipeline.add(e.de.trimmer,e.de.stopWordFilter,e.de.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.de.stemmer))},e.de.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.de.trimmer=e.trimmerSupport.generateTrimmer(e.de.wordCharacters),e.Pipeline.registerFunction(e.de.trimmer,"trimmer-de"),e.de.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){function e(e,r,n){return!(!v.eq_s(1,e)||(v.ket=v.cursor,!v.in_grouping(p,97,252)))&&(v.slice_from(r),v.cursor=n,!0)}function i(){for(var r,n,i,s,t=v.cursor;;)if(r=v.cursor,v.bra=r,v.eq_s(1,"ß"))v.ket=v.cursor,v.slice_from("ss");else{if(r>=v.limit)break;v.cursor=r+1}for(v.cursor=t;;)for(n=v.cursor;;){if(i=v.cursor,v.in_grouping(p,97,252)){if(s=v.cursor,v.bra=s,e("u","U",i))break;if(v.cursor=s,e("y","Y",i))break}if(i>=v.limit)return void(v.cursor=n);v.cursor=i+1}}function s(){for(;!v.in_grouping(p,97,252);){if(v.cursor>=v.limit)return!0;v.cursor++}for(;!v.out_grouping(p,97,252);){if(v.cursor>=v.limit)return!0;v.cursor++}return!1}function t(){m=v.limit,l=m;var e=v.cursor+3;0<=e&&e<=v.limit&&(d=e,s()||(m=v.cursor,m=v.limit)return;v.cursor++}}}function c(){return m<=v.cursor}function u(){return l<=v.cursor}function a(){var e,r,n,i,s=v.limit-v.cursor;if(v.ket=v.cursor,(e=v.find_among_b(w,7))&&(v.bra=v.cursor,c()))switch(e){case 1:v.slice_del();break;case 2:v.slice_del(),v.ket=v.cursor,v.eq_s_b(1,"s")&&(v.bra=v.cursor,v.eq_s_b(3,"nis")&&v.slice_del());break;case 3:v.in_grouping_b(g,98,116)&&v.slice_del()}if(v.cursor=v.limit-s,v.ket=v.cursor,(e=v.find_among_b(f,4))&&(v.bra=v.cursor,c()))switch(e){case 1:v.slice_del();break;case 2:if(v.in_grouping_b(k,98,116)){var t=v.cursor-3;v.limit_backward<=t&&t<=v.limit&&(v.cursor=t,v.slice_del())}}if(v.cursor=v.limit-s,v.ket=v.cursor,(e=v.find_among_b(_,8))&&(v.bra=v.cursor,u()))switch(e){case 1:v.slice_del(),v.ket=v.cursor,v.eq_s_b(2,"ig")&&(v.bra=v.cursor,r=v.limit-v.cursor,v.eq_s_b(1,"e")||(v.cursor=v.limit-r,u()&&v.slice_del()));break;case 2:n=v.limit-v.cursor,v.eq_s_b(1,"e")||(v.cursor=v.limit-n,v.slice_del());break;case 3:if(v.slice_del(),v.ket=v.cursor,i=v.limit-v.cursor,!v.eq_s_b(2,"er")&&(v.cursor=v.limit-i,!v.eq_s_b(2,"en")))break;v.bra=v.cursor,c()&&v.slice_del();break;case 4:v.slice_del(),v.ket=v.cursor,e=v.find_among_b(b,2),e&&(v.bra=v.cursor,u()&&1==e&&v.slice_del())}}var d,l,m,h=[new r("",-1,6),new r("U",0,2),new r("Y",0,1),new r("ä",0,3),new r("ö",0,4),new r("ü",0,5)],w=[new r("e",-1,2),new r("em",-1,1),new r("en",-1,2),new r("ern",-1,1),new r("er",-1,1),new r("s",-1,3),new r("es",5,2)],f=[new r("en",-1,1),new r("er",-1,1),new r("st",-1,2),new r("est",2,1)],b=[new r("ig",-1,1),new r("lich",-1,1)],_=[new r("end",-1,1),new r("ig",-1,2),new r("ung",-1,1),new r("lich",-1,3),new r("isch",-1,2),new r("ik",-1,2),new r("heit",-1,3),new r("keit",-1,4)],p=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32,8],g=[117,30,5],k=[117,30,4],v=new n;this.setCurrent=function(e){v.setCurrent(e)},this.getCurrent=function(){return v.getCurrent()},this.stem=function(){var e=v.cursor;return i(),v.cursor=e,t(),v.limit_backward=e,v.cursor=v.limit,a(),v.cursor=v.limit_backward,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.de.stemmer,"stemmer-de"),e.de.stopWordFilter=e.generateStopWordFilter("aber alle allem allen aller alles als also am an ander andere anderem anderen anderer anderes anderm andern anderr anders auch auf aus bei bin bis bist da damit dann das dasselbe dazu daß dein deine deinem deinen deiner deines dem demselben den denn denselben der derer derselbe derselben des desselben dessen dich die dies diese dieselbe dieselben diesem diesen dieser dieses dir doch dort du durch ein eine einem einen einer eines einig einige einigem einigen einiger einiges einmal er es etwas euch euer eure eurem euren eurer eures für gegen gewesen hab habe haben hat hatte hatten hier hin hinter ich ihm ihn ihnen ihr ihre ihrem ihren ihrer ihres im in indem ins ist jede jedem jeden jeder jedes jene jenem jenen jener jenes jetzt kann kein keine keinem keinen keiner keines können könnte machen man manche manchem manchen mancher manches mein meine meinem meinen meiner meines mich mir mit muss musste nach nicht nichts noch nun nur ob oder ohne sehr sein seine seinem seinen seiner seines selbst sich sie sind so solche solchem solchen solcher solches soll sollte sondern sonst um und uns unse unsem unsen unser unses unter viel vom von vor war waren warst was weg weil weiter welche welchem welchen welcher welches wenn werde werden wie wieder will wir wird wirst wo wollen wollte während würde würden zu zum zur zwar zwischen über".split(" ")),e.Pipeline.registerFunction(e.de.stopWordFilter,"stopWordFilter-de")}}); -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.du.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Lunr languages, `Dutch` language 3 | * https://github.com/MihaiValentin/lunr-languages 4 | * 5 | * Copyright 2014, Mihai Valentin 6 | * http://www.mozilla.org/MPL/ 7 | */ 8 | /*! 9 | * based on 10 | * Snowball JavaScript Library v0.3 11 | * http://code.google.com/p/urim/ 12 | * http://snowball.tartarus.org/ 13 | * 14 | * Copyright 2010, Oleg Mazko 15 | * http://www.mozilla.org/MPL/ 16 | */ 17 | 18 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");console.warn('[Lunr Languages] Please use the "nl" instead of the "du". The "nl" code is the standard code for Dutch language, and "du" will be removed in the next major versions.'),e.du=function(){this.pipeline.reset(),this.pipeline.add(e.du.trimmer,e.du.stopWordFilter,e.du.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.du.stemmer))},e.du.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.du.trimmer=e.trimmerSupport.generateTrimmer(e.du.wordCharacters),e.Pipeline.registerFunction(e.du.trimmer,"trimmer-du"),e.du.stemmer=function(){var r=e.stemmerSupport.Among,i=e.stemmerSupport.SnowballProgram,n=new function(){function e(){for(var e,r,i,o=C.cursor;;){if(C.bra=C.cursor,e=C.find_among(b,11))switch(C.ket=C.cursor,e){case 1:C.slice_from("a");continue;case 2:C.slice_from("e");continue;case 3:C.slice_from("i");continue;case 4:C.slice_from("o");continue;case 5:C.slice_from("u");continue;case 6:if(C.cursor>=C.limit)break;C.cursor++;continue}break}for(C.cursor=o,C.bra=o,C.eq_s(1,"y")?(C.ket=C.cursor,C.slice_from("Y")):C.cursor=o;;)if(r=C.cursor,C.in_grouping(q,97,232)){if(i=C.cursor,C.bra=i,C.eq_s(1,"i"))C.ket=C.cursor,C.in_grouping(q,97,232)&&(C.slice_from("I"),C.cursor=r);else if(C.cursor=i,C.eq_s(1,"y"))C.ket=C.cursor,C.slice_from("Y"),C.cursor=r;else if(n(r))break}else if(n(r))break}function n(e){return C.cursor=e,e>=C.limit||(C.cursor++,!1)}function o(){_=C.limit,f=_,t()||(_=C.cursor,_<3&&(_=3),t()||(f=C.cursor))}function t(){for(;!C.in_grouping(q,97,232);){if(C.cursor>=C.limit)return!0;C.cursor++}for(;!C.out_grouping(q,97,232);){if(C.cursor>=C.limit)return!0;C.cursor++}return!1}function s(){for(var e;;)if(C.bra=C.cursor,e=C.find_among(p,3))switch(C.ket=C.cursor,e){case 1:C.slice_from("y");break;case 2:C.slice_from("i");break;case 3:if(C.cursor>=C.limit)return;C.cursor++}}function u(){return _<=C.cursor}function c(){return f<=C.cursor}function a(){var e=C.limit-C.cursor;C.find_among_b(g,3)&&(C.cursor=C.limit-e,C.ket=C.cursor,C.cursor>C.limit_backward&&(C.cursor--,C.bra=C.cursor,C.slice_del()))}function l(){var e;w=!1,C.ket=C.cursor,C.eq_s_b(1,"e")&&(C.bra=C.cursor,u()&&(e=C.limit-C.cursor,C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-e,C.slice_del(),w=!0,a())))}function m(){var e;u()&&(e=C.limit-C.cursor,C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-e,C.eq_s_b(3,"gem")||(C.cursor=C.limit-e,C.slice_del(),a())))}function d(){var e,r,i,n,o,t,s=C.limit-C.cursor;if(C.ket=C.cursor,e=C.find_among_b(h,5))switch(C.bra=C.cursor,e){case 1:u()&&C.slice_from("heid");break;case 2:m();break;case 3:u()&&C.out_grouping_b(z,97,232)&&C.slice_del()}if(C.cursor=C.limit-s,l(),C.cursor=C.limit-s,C.ket=C.cursor,C.eq_s_b(4,"heid")&&(C.bra=C.cursor,c()&&(r=C.limit-C.cursor,C.eq_s_b(1,"c")||(C.cursor=C.limit-r,C.slice_del(),C.ket=C.cursor,C.eq_s_b(2,"en")&&(C.bra=C.cursor,m())))),C.cursor=C.limit-s,C.ket=C.cursor,e=C.find_among_b(k,6))switch(C.bra=C.cursor,e){case 1:if(c()){if(C.slice_del(),i=C.limit-C.cursor,C.ket=C.cursor,C.eq_s_b(2,"ig")&&(C.bra=C.cursor,c()&&(n=C.limit-C.cursor,!C.eq_s_b(1,"e")))){C.cursor=C.limit-n,C.slice_del();break}C.cursor=C.limit-i,a()}break;case 2:c()&&(o=C.limit-C.cursor,C.eq_s_b(1,"e")||(C.cursor=C.limit-o,C.slice_del()));break;case 3:c()&&(C.slice_del(),l());break;case 4:c()&&C.slice_del();break;case 5:c()&&w&&C.slice_del()}C.cursor=C.limit-s,C.out_grouping_b(j,73,232)&&(t=C.limit-C.cursor,C.find_among_b(v,4)&&C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-t,C.ket=C.cursor,C.cursor>C.limit_backward&&(C.cursor--,C.bra=C.cursor,C.slice_del())))}var f,_,w,b=[new r("",-1,6),new r("á",0,1),new r("ä",0,1),new r("é",0,2),new r("ë",0,2),new r("í",0,3),new r("ï",0,3),new r("ó",0,4),new r("ö",0,4),new r("ú",0,5),new r("ü",0,5)],p=[new r("",-1,3),new r("I",0,2),new r("Y",0,1)],g=[new r("dd",-1,-1),new r("kk",-1,-1),new r("tt",-1,-1)],h=[new r("ene",-1,2),new r("se",-1,3),new r("en",-1,2),new r("heden",2,1),new r("s",-1,3)],k=[new r("end",-1,1),new r("ig",-1,2),new r("ing",-1,1),new r("lijk",-1,3),new r("baar",-1,4),new r("bar",-1,5)],v=[new r("aa",-1,-1),new r("ee",-1,-1),new r("oo",-1,-1),new r("uu",-1,-1)],q=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],j=[1,0,0,17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],z=[17,67,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],C=new i;this.setCurrent=function(e){C.setCurrent(e)},this.getCurrent=function(){return C.getCurrent()},this.stem=function(){var r=C.cursor;return e(),C.cursor=r,o(),C.limit_backward=r,C.cursor=C.limit,d(),C.cursor=C.limit_backward,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.du.stemmer,"stemmer-du"),e.du.stopWordFilter=e.generateStopWordFilter(" aan al alles als altijd andere ben bij daar dan dat de der deze die dit doch doen door dus een eens en er ge geen geweest haar had heb hebben heeft hem het hier hij hoe hun iemand iets ik in is ja je kan kon kunnen maar me meer men met mij mijn moet na naar niet niets nog nu of om omdat onder ons ook op over reeds te tegen toch toen tot u uit uw van veel voor want waren was wat werd wezen wie wil worden wordt zal ze zelf zich zij zijn zo zonder zou".split(" ")),e.Pipeline.registerFunction(e.du.stopWordFilter,"stopWordFilter-du")}}); -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.he.min.js: -------------------------------------------------------------------------------- 1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.he=function(){this.pipeline.reset(),this.pipeline.add(e.he.trimmer,e.he.stopWordFilter,e.he.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.he.stemmer))},e.he.wordCharacters="֑-״א-תa-zA-Za-zA-Z0-90-9",e.he.trimmer=e.trimmerSupport.generateTrimmer(e.he.wordCharacters),e.Pipeline.registerFunction(e.he.trimmer,"trimmer-he"),e.he.stemmer=function(){var e=this;return e.result=!1,e.preRemoved=!1,e.sufRemoved=!1,e.pre={pre1:"ה ו י ת",pre2:"ב כ ל מ ש כש",pre3:"הב הכ הל המ הש בש לכ",pre4:"וב וכ ול ומ וש",pre5:"מה שה כל",pre6:"מב מכ מל ממ מש",pre7:"בה בו בי בת כה כו כי כת לה לו לי לת",pre8:"ובה ובו ובי ובת וכה וכו וכי וכת ולה ולו ולי ולת"},e.suf={suf1:"ך כ ם ן נ",suf2:"ים ות וך וכ ום ון ונ הם הן יכ יך ינ ים",suf3:"תי תך תכ תם תן תנ",suf4:"ותי ותך ותכ ותם ותן ותנ",suf5:"נו כם כן הם הן",suf6:"ונו וכם וכן והם והן",suf7:"תכם תכן תנו תהם תהן",suf8:"הוא היא הם הן אני אתה את אנו אתם אתן",suf9:"ני נו כי כו כם כן תי תך תכ תם תן",suf10:"י ך כ ם ן נ ת"},e.patterns=JSON.parse('{"hebrewPatterns": [{"pt1": [{"c": "ה", "l": 0}]}, {"pt2": [{"c": "ו", "l": 0}]}, {"pt3": [{"c": "י", "l": 0}]}, {"pt4": [{"c": "ת", "l": 0}]}, {"pt5": [{"c": "מ", "l": 0}]}, {"pt6": [{"c": "ל", "l": 0}]}, {"pt7": [{"c": "ב", "l": 0}]}, {"pt8": [{"c": "כ", "l": 0}]}, {"pt9": [{"c": "ש", "l": 0}]}, {"pt10": [{"c": "כש", "l": 0}]}, {"pt11": [{"c": "בה", "l": 0}]}, {"pt12": [{"c": "וב", "l": 0}]}, {"pt13": [{"c": "וכ", "l": 0}]}, {"pt14": [{"c": "ול", "l": 0}]}, {"pt15": [{"c": "ומ", "l": 0}]}, {"pt16": [{"c": "וש", "l": 0}]}, {"pt17": [{"c": "הב", "l": 0}]}, {"pt18": [{"c": "הכ", "l": 0}]}, {"pt19": [{"c": "הל", "l": 0}]}, {"pt20": [{"c": "המ", "l": 0}]}, {"pt21": [{"c": "הש", "l": 0}]}, {"pt22": [{"c": "מה", "l": 0}]}, {"pt23": [{"c": "שה", "l": 0}]}, {"pt24": [{"c": "כל", "l": 0}]}]}'),e.execArray=["cleanWord","removeDiacritics","removeStopWords","normalizeHebrewCharacters"],e.stem=function(){var r=0;for(e.result=!1,e.preRemoved=!1,e.sufRemoved=!1;r=0)return!0},e.normalizeHebrewCharacters=function(){return e.word=e.word.replace("ך","כ"),e.word=e.word.replace("ם","מ"),e.word=e.word.replace("ן","נ"),e.word=e.word.replace("ף","פ"),e.word=e.word.replace("ץ","צ"),!1},function(r){return"function"==typeof r.update?r.update(function(r){return e.setCurrent(r),e.stem(),e.getCurrent()}):(e.setCurrent(r),e.stem(),e.getCurrent())}}(),e.Pipeline.registerFunction(e.he.stemmer,"stemmer-he"),e.he.stopWordFilter=e.generateStopWordFilter("אבל או אולי אותו אותי אותך אותם אותן אותנו אז אחר אחרות אחרי אחריכן אחרים אחרת אי איזה איך אין איפה אל אלה אלו אם אנחנו אני אף אפשר את אתה אתכם אתכן אתם אתן באיזה באיזו בגלל בין בלבד בעבור בעזרת בכל בכן בלי במידה במקום שבו ברוב בשביל בשעה ש בתוך גם דרך הוא היא היה היי היכן היתה היתי הם הן הנה הסיבה שבגללה הרי ואילו ואת זאת זה זות יהיה יוכל יוכלו יותר מדי יכול יכולה יכולות יכולים יכל יכלה יכלו יש כאן כאשר כולם כולן כזה כי כיצד כך כל כלל כמו כן כפי כש לא לאו לאיזותך לאן לבין לה להיות להם להן לו לזה לזות לי לך לכם לכן למה למעלה למעלה מ למטה למטה מ למעט למקום שבו למרות לנו לעבר לעיכן לפיכך לפני מאד מאחורי מאיזו סיבה מאין מאיפה מבלי מבעד מדוע מה מהיכן מול מחוץ מי מידע מכאן מכל מכן מלבד מן מנין מסוגל מעט מעטים מעל מצד מקום בו מתחת מתי נגד נגר נו עד עז על עלי עליו עליה עליהם עליך עלינו עם עצמה עצמהם עצמהן עצמו עצמי עצמם עצמן עצמנו פה רק שוב של שלה שלהם שלהן שלו שלי שלך שלכה שלכם שלכן שלנו שם תהיה תחת".split(" ")),e.Pipeline.registerFunction(e.he.stopWordFilter,"stopWordFilter-he")}}); -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.hi.min.js: -------------------------------------------------------------------------------- 1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hi=function(){this.pipeline.reset(),this.pipeline.add(e.hi.trimmer,e.hi.stopWordFilter,e.hi.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.hi.stemmer))},e.hi.wordCharacters="ऀ-ःऄ-एऐ-टठ-यर-िी-ॏॐ-य़ॠ-९॰-ॿa-zA-Za-zA-Z0-90-9",e.hi.trimmer=e.trimmerSupport.generateTrimmer(e.hi.wordCharacters),e.Pipeline.registerFunction(e.hi.trimmer,"trimmer-hi"),e.hi.stopWordFilter=e.generateStopWordFilter("अत अपना अपनी अपने अभी अंदर आदि आप इत्यादि इन इनका इन्हीं इन्हें इन्हों इस इसका इसकी इसके इसमें इसी इसे उन उनका उनकी उनके उनको उन्हीं उन्हें उन्हों उस उसके उसी उसे एक एवं एस ऐसे और कई कर करता करते करना करने करें कहते कहा का काफ़ी कि कितना किन्हें किन्हों किया किर किस किसी किसे की कुछ कुल के को कोई कौन कौनसा गया घर जब जहाँ जा जितना जिन जिन्हें जिन्हों जिस जिसे जीधर जैसा जैसे जो तक तब तरह तिन तिन्हें तिन्हों तिस तिसे तो था थी थे दबारा दिया दुसरा दूसरे दो द्वारा न नके नहीं ना निहायत नीचे ने पर पहले पूरा पे फिर बनी बही बहुत बाद बाला बिलकुल भी भीतर मगर मानो मे में यदि यह यहाँ यही या यिह ये रखें रहा रहे ऱ्वासा लिए लिये लेकिन व वग़ैरह वर्ग वह वहाँ वहीं वाले वुह वे वो सकता सकते सबसे सभी साथ साबुत साभ सारा से सो संग ही हुआ हुई हुए है हैं हो होता होती होते होना होने".split(" ")),e.hi.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var r=e.wordcut;r.init(),e.hi.tokenizer=function(i){if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(r){return isLunr2?new e.Token(r.toLowerCase()):r.toLowerCase()});var t=i.toString().toLowerCase().replace(/^\s+/,"");return r.cut(t).split("|")},e.Pipeline.registerFunction(e.hi.stemmer,"stemmer-hi"),e.Pipeline.registerFunction(e.hi.stopWordFilter,"stopWordFilter-hi")}}); -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.hy.min.js: -------------------------------------------------------------------------------- 1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hy=function(){this.pipeline.reset(),this.pipeline.add(e.hy.trimmer,e.hy.stopWordFilter)},e.hy.wordCharacters="[A-Za-z԰-֏ff-ﭏ]",e.hy.trimmer=e.trimmerSupport.generateTrimmer(e.hy.wordCharacters),e.Pipeline.registerFunction(e.hy.trimmer,"trimmer-hy"),e.hy.stopWordFilter=e.generateStopWordFilter("դու և եք էիր էիք հետո նաև նրանք որը վրա է որ պիտի են այս մեջ ն իր ու ի այդ որոնք այն կամ էր մի ես համար այլ իսկ էին ենք հետ ին թ էինք մենք նրա նա դուք եմ էի ըստ որպես ում".split(" ")),e.Pipeline.registerFunction(e.hy.stopWordFilter,"stopWordFilter-hy"),e.hy.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}(),e.Pipeline.registerFunction(e.hy.stemmer,"stemmer-hy")}}); -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.ja.min.js: -------------------------------------------------------------------------------- 1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.ja=function(){this.pipeline.reset(),this.pipeline.add(e.ja.trimmer,e.ja.stopWordFilter,e.ja.stemmer),r?this.tokenizer=e.ja.tokenizer:(e.tokenizer&&(e.tokenizer=e.ja.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.ja.tokenizer))};var t=new e.TinySegmenter;e.ja.tokenizer=function(i){var n,o,s,p,a,u,m,l,c,f;if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t.toLowerCase()):t.toLowerCase()});for(o=i.toString().toLowerCase().replace(/^\s+/,""),n=o.length-1;n>=0;n--)if(/\S/.test(o.charAt(n))){o=o.substring(0,n+1);break}for(a=[],s=o.length,c=0,l=0;c<=s;c++)if(u=o.charAt(c),m=c-l,u.match(/\s/)||c==s){if(m>0)for(p=t.segment(o.slice(l,c)).filter(function(e){return!!e}),f=l,n=0;n=C.limit)break;C.cursor++;continue}break}for(C.cursor=o,C.bra=o,C.eq_s(1,"y")?(C.ket=C.cursor,C.slice_from("Y")):C.cursor=o;;)if(e=C.cursor,C.in_grouping(q,97,232)){if(i=C.cursor,C.bra=i,C.eq_s(1,"i"))C.ket=C.cursor,C.in_grouping(q,97,232)&&(C.slice_from("I"),C.cursor=e);else if(C.cursor=i,C.eq_s(1,"y"))C.ket=C.cursor,C.slice_from("Y"),C.cursor=e;else if(n(e))break}else if(n(e))break}function n(r){return C.cursor=r,r>=C.limit||(C.cursor++,!1)}function o(){_=C.limit,d=_,t()||(_=C.cursor,_<3&&(_=3),t()||(d=C.cursor))}function t(){for(;!C.in_grouping(q,97,232);){if(C.cursor>=C.limit)return!0;C.cursor++}for(;!C.out_grouping(q,97,232);){if(C.cursor>=C.limit)return!0;C.cursor++}return!1}function s(){for(var r;;)if(C.bra=C.cursor,r=C.find_among(p,3))switch(C.ket=C.cursor,r){case 1:C.slice_from("y");break;case 2:C.slice_from("i");break;case 3:if(C.cursor>=C.limit)return;C.cursor++}}function u(){return _<=C.cursor}function c(){return d<=C.cursor}function a(){var r=C.limit-C.cursor;C.find_among_b(g,3)&&(C.cursor=C.limit-r,C.ket=C.cursor,C.cursor>C.limit_backward&&(C.cursor--,C.bra=C.cursor,C.slice_del()))}function l(){var r;w=!1,C.ket=C.cursor,C.eq_s_b(1,"e")&&(C.bra=C.cursor,u()&&(r=C.limit-C.cursor,C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-r,C.slice_del(),w=!0,a())))}function m(){var r;u()&&(r=C.limit-C.cursor,C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-r,C.eq_s_b(3,"gem")||(C.cursor=C.limit-r,C.slice_del(),a())))}function f(){var r,e,i,n,o,t,s=C.limit-C.cursor;if(C.ket=C.cursor,r=C.find_among_b(h,5))switch(C.bra=C.cursor,r){case 1:u()&&C.slice_from("heid");break;case 2:m();break;case 3:u()&&C.out_grouping_b(j,97,232)&&C.slice_del()}if(C.cursor=C.limit-s,l(),C.cursor=C.limit-s,C.ket=C.cursor,C.eq_s_b(4,"heid")&&(C.bra=C.cursor,c()&&(e=C.limit-C.cursor,C.eq_s_b(1,"c")||(C.cursor=C.limit-e,C.slice_del(),C.ket=C.cursor,C.eq_s_b(2,"en")&&(C.bra=C.cursor,m())))),C.cursor=C.limit-s,C.ket=C.cursor,r=C.find_among_b(k,6))switch(C.bra=C.cursor,r){case 1:if(c()){if(C.slice_del(),i=C.limit-C.cursor,C.ket=C.cursor,C.eq_s_b(2,"ig")&&(C.bra=C.cursor,c()&&(n=C.limit-C.cursor,!C.eq_s_b(1,"e")))){C.cursor=C.limit-n,C.slice_del();break}C.cursor=C.limit-i,a()}break;case 2:c()&&(o=C.limit-C.cursor,C.eq_s_b(1,"e")||(C.cursor=C.limit-o,C.slice_del()));break;case 3:c()&&(C.slice_del(),l());break;case 4:c()&&C.slice_del();break;case 5:c()&&w&&C.slice_del()}C.cursor=C.limit-s,C.out_grouping_b(z,73,232)&&(t=C.limit-C.cursor,C.find_among_b(v,4)&&C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-t,C.ket=C.cursor,C.cursor>C.limit_backward&&(C.cursor--,C.bra=C.cursor,C.slice_del())))}var d,_,w,b=[new e("",-1,6),new e("á",0,1),new e("ä",0,1),new e("é",0,2),new e("ë",0,2),new e("í",0,3),new e("ï",0,3),new e("ó",0,4),new e("ö",0,4),new e("ú",0,5),new e("ü",0,5)],p=[new e("",-1,3),new e("I",0,2),new e("Y",0,1)],g=[new e("dd",-1,-1),new e("kk",-1,-1),new e("tt",-1,-1)],h=[new e("ene",-1,2),new e("se",-1,3),new e("en",-1,2),new e("heden",2,1),new e("s",-1,3)],k=[new e("end",-1,1),new e("ig",-1,2),new e("ing",-1,1),new e("lijk",-1,3),new e("baar",-1,4),new e("bar",-1,5)],v=[new e("aa",-1,-1),new e("ee",-1,-1),new e("oo",-1,-1),new e("uu",-1,-1)],q=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],z=[1,0,0,17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],j=[17,67,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],C=new i;this.setCurrent=function(r){C.setCurrent(r)},this.getCurrent=function(){return C.getCurrent()},this.stem=function(){var e=C.cursor;return r(),C.cursor=e,o(),C.limit_backward=e,C.cursor=C.limit,f(),C.cursor=C.limit_backward,s(),!0}};return function(r){return"function"==typeof r.update?r.update(function(r){return n.setCurrent(r),n.stem(),n.getCurrent()}):(n.setCurrent(r),n.stem(),n.getCurrent())}}(),r.Pipeline.registerFunction(r.nl.stemmer,"stemmer-nl"),r.nl.stopWordFilter=r.generateStopWordFilter(" aan al alles als altijd andere ben bij daar dan dat de der deze die dit doch doen door dus een eens en er ge geen geweest haar had heb hebben heeft hem het hier hij hoe hun iemand iets ik in is ja je kan kon kunnen maar me meer men met mij mijn moet na naar niet niets nog nu of om omdat onder ons ook op over reeds te tegen toch toen tot u uit uw van veel voor want waren was wat werd wezen wie wil worden wordt zal ze zelf zich zij zijn zo zonder zou".split(" ")),r.Pipeline.registerFunction(r.nl.stopWordFilter,"stopWordFilter-nl")}}); -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.no.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Lunr languages, `Norwegian` language 3 | * https://github.com/MihaiValentin/lunr-languages 4 | * 5 | * Copyright 2014, Mihai Valentin 6 | * http://www.mozilla.org/MPL/ 7 | */ 8 | /*! 9 | * based on 10 | * Snowball JavaScript Library v0.3 11 | * http://code.google.com/p/urim/ 12 | * http://snowball.tartarus.org/ 13 | * 14 | * Copyright 2010, Oleg Mazko 15 | * http://www.mozilla.org/MPL/ 16 | */ 17 | 18 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.no=function(){this.pipeline.reset(),this.pipeline.add(e.no.trimmer,e.no.stopWordFilter,e.no.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.no.stemmer))},e.no.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.no.trimmer=e.trimmerSupport.generateTrimmer(e.no.wordCharacters),e.Pipeline.registerFunction(e.no.trimmer,"trimmer-no"),e.no.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){function e(){var e,r=w.cursor+3;if(a=w.limit,0<=r||r<=w.limit){for(s=r;;){if(e=w.cursor,w.in_grouping(d,97,248)){w.cursor=e;break}if(e>=w.limit)return;w.cursor=e+1}for(;!w.out_grouping(d,97,248);){if(w.cursor>=w.limit)return;w.cursor++}a=w.cursor,a=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(m,29),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:n=w.limit-w.cursor,w.in_grouping_b(c,98,122)?w.slice_del():(w.cursor=w.limit-n,w.eq_s_b(1,"k")&&w.out_grouping_b(d,97,248)&&w.slice_del());break;case 3:w.slice_from("er")}}function t(){var e,r=w.limit-w.cursor;w.cursor>=a&&(e=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,w.find_among_b(u,2)?(w.bra=w.cursor,w.limit_backward=e,w.cursor=w.limit-r,w.cursor>w.limit_backward&&(w.cursor--,w.bra=w.cursor,w.slice_del())):w.limit_backward=e)}function o(){var e,r;w.cursor>=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(l,11),e?(w.bra=w.cursor,w.limit_backward=r,1==e&&w.slice_del()):w.limit_backward=r)}var s,a,m=[new r("a",-1,1),new r("e",-1,1),new r("ede",1,1),new r("ande",1,1),new r("ende",1,1),new r("ane",1,1),new r("ene",1,1),new r("hetene",6,1),new r("erte",1,3),new r("en",-1,1),new r("heten",9,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",12,1),new r("s",-1,2),new r("as",14,1),new r("es",14,1),new r("edes",16,1),new r("endes",16,1),new r("enes",16,1),new r("hetenes",19,1),new r("ens",14,1),new r("hetens",21,1),new r("ers",14,1),new r("ets",14,1),new r("et",-1,1),new r("het",25,1),new r("ert",-1,3),new r("ast",-1,1)],u=[new r("dt",-1,-1),new r("vt",-1,-1)],l=[new r("leg",-1,1),new r("eleg",0,1),new r("ig",-1,1),new r("eig",2,1),new r("lig",2,1),new r("elig",4,1),new r("els",-1,1),new r("lov",-1,1),new r("elov",7,1),new r("slov",7,1),new r("hetslov",9,1)],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],c=[119,125,149,1],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,i(),w.cursor=w.limit,t(),w.cursor=w.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.no.stemmer,"stemmer-no"),e.no.stopWordFilter=e.generateStopWordFilter("alle at av bare begge ble blei bli blir blitt både båe da de deg dei deim deira deires dem den denne der dere deres det dette di din disse ditt du dykk dykkar då eg ein eit eitt eller elles en enn er et ett etter for fordi fra før ha hadde han hans har hennar henne hennes her hjå ho hoe honom hoss hossen hun hva hvem hver hvilke hvilken hvis hvor hvordan hvorfor i ikke ikkje ikkje ingen ingi inkje inn inni ja jeg kan kom korleis korso kun kunne kva kvar kvarhelst kven kvi kvifor man mange me med medan meg meget mellom men mi min mine mitt mot mykje ned no noe noen noka noko nokon nokor nokre nå når og også om opp oss over på samme seg selv si si sia sidan siden sin sine sitt sjøl skal skulle slik so som som somme somt så sånn til um upp ut uten var vart varte ved vere verte vi vil ville vore vors vort vår være være vært å".split(" ")),e.Pipeline.registerFunction(e.no.stopWordFilter,"stopWordFilter-no")}}); -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.ru.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Lunr languages, `Russian` language 3 | * https://github.com/MihaiValentin/lunr-languages 4 | * 5 | * Copyright 2014, Mihai Valentin 6 | * http://www.mozilla.org/MPL/ 7 | */ 8 | /*! 9 | * based on 10 | * Snowball JavaScript Library v0.3 11 | * http://code.google.com/p/urim/ 12 | * http://snowball.tartarus.org/ 13 | * 14 | * Copyright 2010, Oleg Mazko 15 | * http://www.mozilla.org/MPL/ 16 | */ 17 | 18 | !function(e,n){"function"==typeof define&&define.amd?define(n):"object"==typeof exports?module.exports=n():n()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ru=function(){this.pipeline.reset(),this.pipeline.add(e.ru.trimmer,e.ru.stopWordFilter,e.ru.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ru.stemmer))},e.ru.wordCharacters="Ѐ-҄҇-ԯᴫᵸⷠ-ⷿꙀ-ꚟ︮︯",e.ru.trimmer=e.trimmerSupport.generateTrimmer(e.ru.wordCharacters),e.Pipeline.registerFunction(e.ru.trimmer,"trimmer-ru"),e.ru.stemmer=function(){var n=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,t=new function(){function e(){for(;!W.in_grouping(S,1072,1103);){if(W.cursor>=W.limit)return!1;W.cursor++}return!0}function t(){for(;!W.out_grouping(S,1072,1103);){if(W.cursor>=W.limit)return!1;W.cursor++}return!0}function w(){b=W.limit,_=b,e()&&(b=W.cursor,t()&&e()&&t()&&(_=W.cursor))}function i(){return _<=W.cursor}function u(e,n){var r,t;if(W.ket=W.cursor,r=W.find_among_b(e,n)){switch(W.bra=W.cursor,r){case 1:if(t=W.limit-W.cursor,!W.eq_s_b(1,"а")&&(W.cursor=W.limit-t,!W.eq_s_b(1,"я")))return!1;case 2:W.slice_del()}return!0}return!1}function o(){return u(h,9)}function s(e,n){var r;return W.ket=W.cursor,!!(r=W.find_among_b(e,n))&&(W.bra=W.cursor,1==r&&W.slice_del(),!0)}function c(){return s(g,26)}function m(){return!!c()&&(u(C,8),!0)}function f(){return s(k,2)}function l(){return u(P,46)}function a(){s(v,36)}function p(){var e;W.ket=W.cursor,(e=W.find_among_b(F,2))&&(W.bra=W.cursor,i()&&1==e&&W.slice_del())}function d(){var e;if(W.ket=W.cursor,e=W.find_among_b(q,4))switch(W.bra=W.cursor,e){case 1:if(W.slice_del(),W.ket=W.cursor,!W.eq_s_b(1,"н"))break;W.bra=W.cursor;case 2:if(!W.eq_s_b(1,"н"))break;case 3:W.slice_del()}}var _,b,h=[new n("в",-1,1),new n("ив",0,2),new n("ыв",0,2),new n("вши",-1,1),new n("ивши",3,2),new n("ывши",3,2),new n("вшись",-1,1),new n("ившись",6,2),new n("ывшись",6,2)],g=[new n("ее",-1,1),new n("ие",-1,1),new n("ое",-1,1),new n("ые",-1,1),new n("ими",-1,1),new n("ыми",-1,1),new n("ей",-1,1),new n("ий",-1,1),new n("ой",-1,1),new n("ый",-1,1),new n("ем",-1,1),new n("им",-1,1),new n("ом",-1,1),new n("ым",-1,1),new n("его",-1,1),new n("ого",-1,1),new n("ему",-1,1),new n("ому",-1,1),new n("их",-1,1),new n("ых",-1,1),new n("ею",-1,1),new n("ою",-1,1),new n("ую",-1,1),new n("юю",-1,1),new n("ая",-1,1),new n("яя",-1,1)],C=[new n("ем",-1,1),new n("нн",-1,1),new n("вш",-1,1),new n("ивш",2,2),new n("ывш",2,2),new n("щ",-1,1),new n("ющ",5,1),new n("ующ",6,2)],k=[new n("сь",-1,1),new n("ся",-1,1)],P=[new n("ла",-1,1),new n("ила",0,2),new n("ыла",0,2),new n("на",-1,1),new n("ена",3,2),new n("ете",-1,1),new n("ите",-1,2),new n("йте",-1,1),new n("ейте",7,2),new n("уйте",7,2),new n("ли",-1,1),new n("или",10,2),new n("ыли",10,2),new n("й",-1,1),new n("ей",13,2),new n("уй",13,2),new n("л",-1,1),new n("ил",16,2),new n("ыл",16,2),new n("ем",-1,1),new n("им",-1,2),new n("ым",-1,2),new n("н",-1,1),new n("ен",22,2),new n("ло",-1,1),new n("ило",24,2),new n("ыло",24,2),new n("но",-1,1),new n("ено",27,2),new n("нно",27,1),new n("ет",-1,1),new n("ует",30,2),new n("ит",-1,2),new n("ыт",-1,2),new n("ют",-1,1),new n("уют",34,2),new n("ят",-1,2),new n("ны",-1,1),new n("ены",37,2),new n("ть",-1,1),new n("ить",39,2),new n("ыть",39,2),new n("ешь",-1,1),new n("ишь",-1,2),new n("ю",-1,2),new n("ую",44,2)],v=[new n("а",-1,1),new n("ев",-1,1),new n("ов",-1,1),new n("е",-1,1),new n("ие",3,1),new n("ье",3,1),new n("и",-1,1),new n("еи",6,1),new n("ии",6,1),new n("ами",6,1),new n("ями",6,1),new n("иями",10,1),new n("й",-1,1),new n("ей",12,1),new n("ией",13,1),new n("ий",12,1),new n("ой",12,1),new n("ам",-1,1),new n("ем",-1,1),new n("ием",18,1),new n("ом",-1,1),new n("ям",-1,1),new n("иям",21,1),new n("о",-1,1),new n("у",-1,1),new n("ах",-1,1),new n("ях",-1,1),new n("иях",26,1),new n("ы",-1,1),new n("ь",-1,1),new n("ю",-1,1),new n("ию",30,1),new n("ью",30,1),new n("я",-1,1),new n("ия",33,1),new n("ья",33,1)],F=[new n("ост",-1,1),new n("ость",-1,1)],q=[new n("ейше",-1,1),new n("н",-1,2),new n("ейш",-1,1),new n("ь",-1,3)],S=[33,65,8,232],W=new r;this.setCurrent=function(e){W.setCurrent(e)},this.getCurrent=function(){return W.getCurrent()},this.stem=function(){return w(),W.cursor=W.limit,!(W.cursor=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor++,!0}return!1},in_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e<=s&&e>=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor--,!0}return!1},out_grouping:function(t,i,s){if(this.cursors||e>3]&1<<(7&e)))return this.cursor++,!0}return!1},out_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e>s||e>3]&1<<(7&e)))return this.cursor--,!0}return!1},eq_s:function(t,i){if(this.limit-this.cursor>1),f=0,l=o0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n+_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n+_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},find_among_b:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit_backward,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o=0;m--){if(n-l==u){f=-1;break}if(f=r.charCodeAt(n-1-l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n-_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n-_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},replace_s:function(t,i,s){var e=s.length-(i-t),n=r.substring(0,t),u=r.substring(i);return r=n+s+u,this.limit+=e,this.cursor>=i?this.cursor+=e:this.cursor>t&&(this.cursor=t),e},slice_check:function(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>r.length)throw"faulty slice operation"},slice_from:function(r){this.slice_check(),this.replace_s(this.bra,this.ket,r)},slice_del:function(){this.slice_from("")},insert:function(r,t,i){var s=this.replace_s(r,t,i);r<=this.bra&&(this.bra+=s),r<=this.ket&&(this.ket+=s)},slice_to:function(){return this.slice_check(),r.substring(this.bra,this.ket)},eq_v_b:function(r){return this.eq_s_b(r.length,r)}}}},r.trimmerSupport={generateTrimmer:function(r){var t=new RegExp("^[^"+r+"]+"),i=new RegExp("[^"+r+"]+$");return function(r){return"function"==typeof r.update?r.update(function(r){return r.replace(t,"").replace(i,"")}):r.replace(t,"").replace(i,"")}}}}}); -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.sv.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Lunr languages, `Swedish` language 3 | * https://github.com/MihaiValentin/lunr-languages 4 | * 5 | * Copyright 2014, Mihai Valentin 6 | * http://www.mozilla.org/MPL/ 7 | */ 8 | /*! 9 | * based on 10 | * Snowball JavaScript Library v0.3 11 | * http://code.google.com/p/urim/ 12 | * http://snowball.tartarus.org/ 13 | * 14 | * Copyright 2010, Oleg Mazko 15 | * http://www.mozilla.org/MPL/ 16 | */ 17 | 18 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.sv=function(){this.pipeline.reset(),this.pipeline.add(e.sv.trimmer,e.sv.stopWordFilter,e.sv.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sv.stemmer))},e.sv.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.sv.trimmer=e.trimmerSupport.generateTrimmer(e.sv.wordCharacters),e.Pipeline.registerFunction(e.sv.trimmer,"trimmer-sv"),e.sv.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,t=new function(){function e(){var e,r=w.cursor+3;if(o=w.limit,0<=r||r<=w.limit){for(a=r;;){if(e=w.cursor,w.in_grouping(l,97,246)){w.cursor=e;break}if(w.cursor=e,w.cursor>=w.limit)return;w.cursor++}for(;!w.out_grouping(l,97,246);){if(w.cursor>=w.limit)return;w.cursor++}o=w.cursor,o=o&&(w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(u,37),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.in_grouping_b(d,98,121)&&w.slice_del()}}function i(){var e=w.limit_backward;w.cursor>=o&&(w.limit_backward=o,w.cursor=w.limit,w.find_among_b(c,7)&&(w.cursor=w.limit,w.ket=w.cursor,w.cursor>w.limit_backward&&(w.bra=--w.cursor,w.slice_del())),w.limit_backward=e)}function s(){var e,r;if(w.cursor>=o){if(r=w.limit_backward,w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(m,5))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.slice_from("lös");break;case 3:w.slice_from("full")}w.limit_backward=r}}var a,o,u=[new r("a",-1,1),new r("arna",0,1),new r("erna",0,1),new r("heterna",2,1),new r("orna",0,1),new r("ad",-1,1),new r("e",-1,1),new r("ade",6,1),new r("ande",6,1),new r("arne",6,1),new r("are",6,1),new r("aste",6,1),new r("en",-1,1),new r("anden",12,1),new r("aren",12,1),new r("heten",12,1),new r("ern",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",18,1),new r("or",-1,1),new r("s",-1,2),new r("as",21,1),new r("arnas",22,1),new r("ernas",22,1),new r("ornas",22,1),new r("es",21,1),new r("ades",26,1),new r("andes",26,1),new r("ens",21,1),new r("arens",29,1),new r("hetens",29,1),new r("erns",21,1),new r("at",-1,1),new r("andet",-1,1),new r("het",-1,1),new r("ast",-1,1)],c=[new r("dd",-1,-1),new r("gd",-1,-1),new r("nn",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1),new r("tt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("els",-1,1),new r("fullt",-1,3),new r("löst",-1,2)],l=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,24,0,32],d=[119,127,149],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,t(),w.cursor=w.limit,i(),w.cursor=w.limit,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return t.setCurrent(e),t.stem(),t.getCurrent()}):(t.setCurrent(e),t.stem(),t.getCurrent())}}(),e.Pipeline.registerFunction(e.sv.stemmer,"stemmer-sv"),e.sv.stopWordFilter=e.generateStopWordFilter("alla allt att av blev bli blir blivit de dem den denna deras dess dessa det detta dig din dina ditt du där då efter ej eller en er era ert ett från för ha hade han hans har henne hennes hon honom hur här i icke ingen inom inte jag ju kan kunde man med mellan men mig min mina mitt mot mycket ni nu när någon något några och om oss på samma sedan sig sin sina sitta själv skulle som så sådan sådana sådant till under upp ut utan vad var vara varför varit varje vars vart vem vi vid vilka vilkas vilken vilket vår våra vårt än är åt över".split(" ")),e.Pipeline.registerFunction(e.sv.stopWordFilter,"stopWordFilter-sv")}}); -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.ta.min.js: -------------------------------------------------------------------------------- 1 | !function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ta=function(){this.pipeline.reset(),this.pipeline.add(e.ta.trimmer,e.ta.stopWordFilter,e.ta.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ta.stemmer))},e.ta.wordCharacters="஀-உஊ-ஏஐ-ஙச-ட஠-னப-யர-ஹ஺-ிீ-௉ொ-௏ௐ-௙௚-௟௠-௩௪-௯௰-௹௺-௿a-zA-Za-zA-Z0-90-9",e.ta.trimmer=e.trimmerSupport.generateTrimmer(e.ta.wordCharacters),e.Pipeline.registerFunction(e.ta.trimmer,"trimmer-ta"),e.ta.stopWordFilter=e.generateStopWordFilter("அங்கு அங்கே அது அதை அந்த அவர் அவர்கள் அவள் அவன் அவை ஆக ஆகவே ஆகையால் ஆதலால் ஆதலினால் ஆனாலும் ஆனால் இங்கு இங்கே இது இதை இந்த இப்படி இவர் இவர்கள் இவள் இவன் இவை இவ்வளவு உனக்கு உனது உன் உன்னால் எங்கு எங்கே எது எதை எந்த எப்படி எவர் எவர்கள் எவள் எவன் எவை எவ்வளவு எனக்கு எனது எனவே என் என்ன என்னால் ஏது ஏன் தனது தன்னால் தானே தான் நாங்கள் நாம் நான் நீ நீங்கள்".split(" ")),e.ta.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var t=e.wordcut;t.init(),e.ta.tokenizer=function(r){if(!arguments.length||null==r||void 0==r)return[];if(Array.isArray(r))return r.map(function(t){return isLunr2?new e.Token(t.toLowerCase()):t.toLowerCase()});var i=r.toString().toLowerCase().replace(/^\s+/,"");return t.cut(i).split("|")},e.Pipeline.registerFunction(e.ta.stemmer,"stemmer-ta"),e.Pipeline.registerFunction(e.ta.stopWordFilter,"stopWordFilter-ta")}}); -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.te.min.js: -------------------------------------------------------------------------------- 1 | !function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.te=function(){this.pipeline.reset(),this.pipeline.add(e.te.trimmer,e.te.stopWordFilter,e.te.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.te.stemmer))},e.te.wordCharacters="ఀ-ఄఅ-ఔక-హా-ౌౕ-ౖౘ-ౚౠ-ౡౢ-ౣ౦-౯౸-౿఼ఽ్ౝ౷౤౥",e.te.trimmer=e.trimmerSupport.generateTrimmer(e.te.wordCharacters),e.Pipeline.registerFunction(e.te.trimmer,"trimmer-te"),e.te.stopWordFilter=e.generateStopWordFilter("అందరూ అందుబాటులో అడగండి అడగడం అడ్డంగా అనుగుణంగా అనుమతించు అనుమతిస్తుంది అయితే ఇప్పటికే ఉన్నారు ఎక్కడైనా ఎప్పుడు ఎవరైనా ఎవరో ఏ ఏదైనా ఏమైనప్పటికి ఒక ఒకరు కనిపిస్తాయి కాదు కూడా గా గురించి చుట్టూ చేయగలిగింది తగిన తర్వాత దాదాపు దూరంగా నిజంగా పై ప్రకారం ప్రక్కన మధ్య మరియు మరొక మళ్ళీ మాత్రమే మెచ్చుకో వద్ద వెంట వేరుగా వ్యతిరేకంగా సంబంధం".split(" ")),e.te.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var t=e.wordcut;t.init(),e.te.tokenizer=function(r){if(!arguments.length||null==r||void 0==r)return[];if(Array.isArray(r))return r.map(function(t){return isLunr2?new e.Token(t.toLowerCase()):t.toLowerCase()});var i=r.toString().toLowerCase().replace(/^\s+/,"");return t.cut(i).split("|")},e.Pipeline.registerFunction(e.te.stemmer,"stemmer-te"),e.Pipeline.registerFunction(e.te.stopWordFilter,"stopWordFilter-te")}}); -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.th.min.js: -------------------------------------------------------------------------------- 1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.th=function(){this.pipeline.reset(),this.pipeline.add(e.th.trimmer),r?this.tokenizer=e.th.tokenizer:(e.tokenizer&&(e.tokenizer=e.th.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.th.tokenizer))},e.th.wordCharacters="[฀-๿]",e.th.trimmer=e.trimmerSupport.generateTrimmer(e.th.wordCharacters),e.Pipeline.registerFunction(e.th.trimmer,"trimmer-th");var t=e.wordcut;t.init(),e.th.tokenizer=function(i){if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t):t});var n=i.toString().replace(/^\s+/,"");return t.cut(n).split("|")}}}); -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.vi.min.js: -------------------------------------------------------------------------------- 1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.vi=function(){this.pipeline.reset(),this.pipeline.add(e.vi.stopWordFilter,e.vi.trimmer)},e.vi.wordCharacters="[A-Za-ẓ̀͐́͑̉̃̓ÂâÊêÔôĂ-ăĐ-đƠ-ơƯ-ư]",e.vi.trimmer=e.trimmerSupport.generateTrimmer(e.vi.wordCharacters),e.Pipeline.registerFunction(e.vi.trimmer,"trimmer-vi"),e.vi.stopWordFilter=e.generateStopWordFilter("là cái nhưng mà".split(" "))}}); -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.zh.min.js: -------------------------------------------------------------------------------- 1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r(require("@node-rs/jieba")):r()(e.lunr)}(this,function(e){return function(r,t){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var i="2"==r.version[0];r.zh=function(){this.pipeline.reset(),this.pipeline.add(r.zh.trimmer,r.zh.stopWordFilter,r.zh.stemmer),i?this.tokenizer=r.zh.tokenizer:(r.tokenizer&&(r.tokenizer=r.zh.tokenizer),this.tokenizerFn&&(this.tokenizerFn=r.zh.tokenizer))},r.zh.tokenizer=function(n){if(!arguments.length||null==n||void 0==n)return[];if(Array.isArray(n))return n.map(function(e){return i?new r.Token(e.toLowerCase()):e.toLowerCase()});t&&e.load(t);var o=n.toString().trim().toLowerCase(),s=[];e.cut(o,!0).forEach(function(e){s=s.concat(e.split(" "))}),s=s.filter(function(e){return!!e});var u=0;return s.map(function(e,t){if(i){var n=o.indexOf(e,u),s={};return s.position=[n,e.length],s.index=t,u=n,new r.Token(e,s)}return e})},r.zh.wordCharacters="\\w一-龥",r.zh.trimmer=r.trimmerSupport.generateTrimmer(r.zh.wordCharacters),r.Pipeline.registerFunction(r.zh.trimmer,"trimmer-zh"),r.zh.stemmer=function(){return function(e){return e}}(),r.Pipeline.registerFunction(r.zh.stemmer,"stemmer-zh"),r.zh.stopWordFilter=r.generateStopWordFilter("的 一 不 在 人 有 是 为 為 以 于 於 上 他 而 后 後 之 来 來 及 了 因 下 可 到 由 这 這 与 與 也 此 但 并 並 个 個 其 已 无 無 小 我 们 們 起 最 再 今 去 好 只 又 或 很 亦 某 把 那 你 乃 它 吧 被 比 别 趁 当 當 从 從 得 打 凡 儿 兒 尔 爾 该 該 各 给 給 跟 和 何 还 還 即 几 幾 既 看 据 據 距 靠 啦 另 么 麽 每 嘛 拿 哪 您 凭 憑 且 却 卻 让 讓 仍 啥 如 若 使 谁 誰 虽 雖 随 隨 同 所 她 哇 嗡 往 些 向 沿 哟 喲 用 咱 则 則 怎 曾 至 致 着 著 诸 諸 自".split(" ")),r.Pipeline.registerFunction(r.zh.stopWordFilter,"stopWordFilter-zh")}}); -------------------------------------------------------------------------------- /site/assets/stylesheets/palette.06af60db.min.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["src/templates/assets/stylesheets/palette/_scheme.scss","../../../../src/templates/assets/stylesheets/palette.scss","src/templates/assets/stylesheets/palette/_accent.scss","src/templates/assets/stylesheets/palette/_primary.scss","src/templates/assets/stylesheets/utilities/_break.scss"],"names":[],"mappings":"AA2BA,cAGE,6BAME,sDAAA,CACA,6DAAA,CACA,+DAAA,CACA,gEAAA,CACA,mDAAA,CACA,6DAAA,CACA,+DAAA,CACA,gEAAA,CAGA,mDAAA,CACA,gDAAA,CAGA,0BAAA,CACA,mCAAA,CAGA,iCAAA,CACA,kCAAA,CACA,mCAAA,CACA,mCAAA,CACA,kCAAA,CACA,iCAAA,CACA,+CAAA,CACA,6DAAA,CACA,gEAAA,CACA,4DAAA,CACA,4DAAA,CACA,6DAAA,CAGA,6CAAA,CAGA,+CAAA,CAGA,uDAAA,CACA,6DAAA,CACA,2DAAA,CAGA,iCAAA,CAGA,yDAAA,CACA,iEAAA,CAGA,mDAAA,CACA,mDAAA,CAGA,qDAAA,CACA,uDAAA,CAGA,8DAAA,CAKA,8DAAA,CAKA,0DAAA,CAvEA,iBCeF,CD6DE,kHAEE,YC3DJ,CDkFE,yDACE,4BChFJ,CD+EE,2DACE,4BC7EJ,CD4EE,gEACE,4BC1EJ,CDyEE,2DACE,4BCvEJ,CDsEE,yDACE,4BCpEJ,CDmEE,0DACE,4BCjEJ,CDgEE,gEACE,4BC9DJ,CD6DE,0DACE,4BC3DJ,CD0DE,2OACE,4BC/CJ,CDsDA,+FAGE,iCCpDF,CACF,CC/CE,2BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD2CN,CCrDE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDkDN,CC5DE,8BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDyDN,CCnEE,mCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDgEN,CC1EE,8BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDuEN,CCjFE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD8EN,CCxFE,kCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDqFN,CC/FE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD4FN,CCtGE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDmGN,CC7GE,6BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD0GN,CCpHE,mCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDiHN,CC3HE,4BACE,4BAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCD2HN,CClIE,8BACE,4BAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCDkIN,CCzIE,6BACE,yBAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCDyIN,CChJE,8BACE,4BAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCDgJN,CCvJE,mCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDoJN,CEzJE,4BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsJN,CEjKE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8JN,CEzKE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsKN,CEjLE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8KN,CEzLE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsLN,CEjME,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8LN,CEzME,mCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsMN,CEjNE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8MN,CEzNE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsNN,CEjOE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8NN,CEzOE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsON,CEjPE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCFiPN,CEzPE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCFyPN,CEjQE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCFiQN,CEzQE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCFyQN,CEjRE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8QN,CEzRE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsRN,CEjSE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCAAA,CAKA,4BF0RN,CE1SE,kCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCAAA,CAKA,4BFmSN,CEpRE,sEACE,4BFuRJ,CExRE,+DACE,4BF2RJ,CE5RE,iEACE,4BF+RJ,CEhSE,gEACE,4BFmSJ,CEpSE,iEACE,4BFuSJ,CE9RA,8BACE,mDAAA,CACA,4DAAA,CACA,0DAAA,CACA,oDAAA,CACA,2DAAA,CAGA,4BF+RF,CE5RE,yCACE,+BF8RJ,CE3RI,kDAEE,0CAAA,CACA,sCAAA,CAFA,mCF+RN,CG3MI,mCD1EA,+CACE,8CFwRJ,CErRI,qDACE,8CFuRN,CElRE,iEACE,mCFoRJ,CACF,CGtNI,sCDvDA,uCACE,oCFgRJ,CACF,CEvQA,8BACE,kDAAA,CACA,4DAAA,CACA,wDAAA,CACA,oDAAA,CACA,6DAAA,CAGA,4BFwQF,CErQE,yCACE,+BFuQJ,CEpQI,kDAEE,0CAAA,CACA,sCAAA,CAFA,mCFwQN,CEjQE,yCACE,6CFmQJ,CG5NI,0CDhCA,8CACE,gDF+PJ,CACF,CGjOI,0CDvBA,iFACE,6CF2PJ,CACF,CGzPI,sCDKA,uCACE,6CFuPJ,CACF","file":"palette.css"} -------------------------------------------------------------------------------- /site/images/architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnOrbitROS/Simulation/c2edc7414cc90a6f0421c16702ef44c5895fd151/site/images/architecture.png -------------------------------------------------------------------------------- /site/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnOrbitROS/Simulation/c2edc7414cc90a6f0421c16702ef44c5895fd151/site/images/logo.png -------------------------------------------------------------------------------- /site/images/logo_huro_fondo_blanco.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnOrbitROS/Simulation/c2edc7414cc90a6f0421c16702ef44c5895fd151/site/images/logo_huro_fondo_blanco.png -------------------------------------------------------------------------------- /site/images/logo_huro_large.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 30 | 31 | 32 | 33 | 34 | 36 | 37 | 38 | 40 | 43 | 46 | 47 | 48 | 50 | 54 | 55 | 56 | 59 | 64 | 66 | 67 | 69 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /site/search/search_index.json: -------------------------------------------------------------------------------- 1 | {"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Welcome to OnOrbitROS","text":"

OnOrbitROS is a unified open-source framework for space-robotics simulations. It is based on Robot Operating System (ROS) and includes and reproduces the principal environmental conditions that eventual space robots and manipulators could experience in an on-orbit servicing scenario.

"},{"location":"#about-us","title":"About Us","text":"

Developed by Human Robotics (HURO) group, University of Alicante, Spain.

Space robotics broadly encompasses the application of robots and autonomous systems for operations in the space environment. HURO Space Robotics section investigates the development of robotic systems and their control for performing tasks in space.

You can find more information about this project and other works in our website: HURO Space Robotics

"},{"location":"Install/","title":"Installation Guide","text":"

OnOrbitROS framework can be found on this GitHub. There you will find the packages to install in your ROS environment as well as different guided examples to discover the functionalities OnOrbitROS offers. With this framework it is also possible to create new projects from the existing ones or from scrath.

"},{"location":"Install/#ros-distribution","title":"ROS Distribution","text":"

The project has been developed in ROS Noetic (Ubuntu 20.04). The intallation guidelines can be found here. ROS offers many tutorials and guides to help you set up and work with your environments and projects, that can be accessed through ROS Wiki.

"},{"location":"Install/#gazebo-simulator","title":"Gazebo Simulator","text":"

Gazebo is an open-source and free simulation tool specifically designed for fast and efficient test development. It has been selected as it can simulate complex 3D environments where each element possesses properties such as mass, velocity, and friction, and can accurately represent the dynamics and interations of space robots in complex 3D settings, so it is possible to create a realistic simulation of on-orbit conditions. Install here.

There is high interation of Gazebo within ROS: simulations are generated from an XML file based on the SDF description language (extension of URDF that ROS uses for robot description) for quick and easy creations and configurations; and it is possible to include additional plugins to extend its functionalities.

OnOrbitROS includes different plugins to simulate the on-orbit-specific conditions (using existing standard and available ROS/Gazebo packages to develop complex tasks). Also, Gazebo integrates interfaces to use multiple physics engines such as Open Dynamics Engine, Bullet, Simbody, Dynamic Animation and Robotics Toolkit (DART).

"},{"location":"Install/#onorbitros-framework","title":"OnOrbitROS Framework","text":"

Import the ROS framework from the GitHub (found here).

  1. Install ROS and create an ROS environment (or use a previous one). The tutorial for doing so can be found here.
  2. Download the framework with git clone or manually into your desired ROS environment.
  3. Build the environment with catkin_make or catkin_make_isolated.
  4. Solve any dependency problems that might occur. See Other packages for help.

You can now start working with the framework.

"},{"location":"Install/#examples-of-applications","title":"Examples of Applications","text":"

In case you would like to install the example cases:

  1. Download the example you want with git clone or manually into the folder orbit_ws/src.
  2. Build the environment with catkin_make or catkin_make_isolated.
  3. Execute the .launch corresponding to that example. See the specific example documentation for that (found in Examples of Applications)
"},{"location":"Install/#other-packages","title":"Other packages","text":"

In addition to the Ubuntu installation with its packages, it might be necessary to manually install this other packages. This is because OnOrbitROS takes advantages of the number of packages already developed in ROS to improve its functionalities.

Packages for the controllers:

  • Controller Manager: $ sudo apt-get install ros-noetic-controller-manager
  • Joint State Controller: $ sudo apt-get install ros-noetic-joint-state-controller
  • Effort Controller: $ sudo apt-get install ros-noetic-effort-controller
  • Position Controllers: $ sudo apt-get install ros-noetic-position-controllers
"},{"location":"arquitechture/","title":"Architecture of OnOrbitROS","text":"

OnOrbitROS serves as a foundational platform for the study and development of on-orbit applications, leveraging the powerful combination of ROS and Gazebo for hyper-realistic simulations.

For extended information about this framework, its architecture and some applications go to doi.

Jos\u00e9 L. Ram\u00f3n, Jorge Pomares, Leonard Felicetti,\nTask space control for on-orbit space robotics using a new ROS-based framework,\nSimulation Modelling Practice and Theory,\nVolume 127,\n2023,\n102790,\nISSN 1569-190X,\nhttps://doi.org/10.1016/j.simpat.2023.102790\n(https://www.sciencedirect.com/science/article/pii/S1569190X23000679)\n

Here you can find the architecture of the framework. In the OnOrbitROS workspace installed (see Installation Guide for more info) you will find many pacakges, which are shown in this image.

"},{"location":"examples/","title":"Examples of Applications using OnOrbitROS","text":"

In this section you can find different examples that exploit OnOrbitROS functionalities. They can serve as a guide to develop your own application, based on this or from scratch.

"}]} -------------------------------------------------------------------------------- /site/sitemap.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /site/sitemap.xml.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnOrbitROS/Simulation/c2edc7414cc90a6f0421c16702ef44c5895fd151/site/sitemap.xml.gz --------------------------------------------------------------------------------