diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..d193766
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,204 @@
+cmake_minimum_required(VERSION 2.8.3)
+project(safety_user_plugin)
+
+## Compile as C++11, supported in ROS Kinetic and newer
+# add_compile_options(-std=c++11)
+
+## Find catkin macros and libraries
+## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
+## is used, also find other catkin packages
+find_package(catkin REQUIRED COMPONENTS
+ rospy
+ rqt_gui
+ rqt_gui_py
+ std_msgs
+ geometry_msgs
+)
+
+## System dependencies are found with CMake's conventions
+# find_package(Boost REQUIRED COMPONENTS system)
+
+
+## Uncomment this if the package has a setup.py. This macro ensures
+## modules and global scripts declared therein get installed
+## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
+catkin_python_setup()
+
+################################################
+## Declare ROS messages, services and actions ##
+################################################
+
+## To declare and build messages, services or actions from within this
+## package, follow these steps:
+## * Let MSG_DEP_SET be the set of packages whose message types you use in
+## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...).
+## * In the file package.xml:
+## * add a build_depend tag for "message_generation"
+## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET
+## * If MSG_DEP_SET isn't empty the following dependency has been pulled in
+## but can be declared for certainty nonetheless:
+## * add a run_depend tag for "message_runtime"
+## * In this file (CMakeLists.txt):
+## * add "message_generation" and every package in MSG_DEP_SET to
+## find_package(catkin REQUIRED COMPONENTS ...)
+## * add "message_runtime" and every package in MSG_DEP_SET to
+## catkin_package(CATKIN_DEPENDS ...)
+## * uncomment the add_*_files sections below as needed
+## and list every .msg/.srv/.action file to be processed
+## * uncomment the generate_messages entry below
+## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...)
+
+## Generate messages in the 'msg' folder
+# add_message_files(
+# FILES
+# RestrictionsMsg.msg
+# RobotInfoMsg.msg
+# )
+
+## Generate services in the 'srv' folder
+# add_service_files(
+# FILES
+# Service1.srv
+# Service2.srv
+# )
+
+## Generate actions in the 'action' folder
+# add_action_files(
+# FILES
+# Action1.action
+# Action2.action
+# )
+
+## Generate added messages and services with any dependencies listed here
+# generate_messages(
+# DEPENDENCIES
+# std_msgs
+# geometry_msgs
+# )
+
+################################################
+## Declare ROS dynamic reconfigure parameters ##
+################################################
+
+## To declare and build dynamic reconfigure parameters within this
+## package, follow these steps:
+## * In the file package.xml:
+## * add a build_depend and a run_depend tag for "dynamic_reconfigure"
+## * In this file (CMakeLists.txt):
+## * add "dynamic_reconfigure" to
+## find_package(catkin REQUIRED COMPONENTS ...)
+## * uncomment the "generate_dynamic_reconfigure_options" section below
+## and list every .cfg file to be processed
+
+## Generate dynamic reconfigure parameters in the 'cfg' folder
+# generate_dynamic_reconfigure_options(
+# cfg/DynReconf1.cfg
+# cfg/DynReconf2.cfg
+# )
+
+###################################
+## catkin specific configuration ##
+###################################
+## The catkin_package macro generates cmake config files for your package
+## Declare things to be passed to dependent projects
+## INCLUDE_DIRS: uncomment this if your package contains header files
+## LIBRARIES: libraries you create in this project that dependent projects also need
+## CATKIN_DEPENDS: catkin_packages dependent projects also need
+## DEPENDS: system dependencies of this project that dependent projects also need
+catkin_package(
+ CATKIN_DEPENDS message_runtime
+# INCLUDE_DIRS include
+# LIBRARIES safety_master_plugin
+# CATKIN_DEPENDS rospy std_msgs
+# DEPENDS system_lib
+)
+
+###########
+## Build ##
+###########
+
+## Specify additional locations of header files
+## Your package locations should be listed before other locations
+include_directories(
+# include
+ ${catkin_INCLUDE_DIRS}
+)
+
+## Declare a C++ library
+# add_library(${PROJECT_NAME}
+# src/${PROJECT_NAME}/safety_master_plugin.cpp
+# )
+
+## Add cmake target dependencies of the library
+## as an example, code may need to be generated before libraries
+## either from message generation or dynamic reconfigure
+# add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
+
+
+## Declare a C++ executable
+## With catkin_make all packages are built within a single CMake context
+## The recommended prefix ensures that target names across packages don't collide
+# add_executable(${PROJECT_NAME}_node src/safety_master_plugin_node.cpp)
+
+## Rename C++ executable without prefix
+## The above recommended prefix causes long target names, the following renames the
+## target back to the shorter version for ease of user use
+## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
+# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")
+
+## Add cmake target dependencies of the executable
+## same as for the library above
+# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
+
+## Specify libraries to link a library or executable target against
+# target_link_libraries(${PROJECT_NAME}_node
+# ${catkin_LIBRARIES}
+# )
+
+#############
+## Install ##
+#############
+
+# all install targets should use catkin DESTINATION variables
+# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html
+
+## Mark executable scripts (Python etc.) for installation
+## in contrast to setup.py, you can choose the destination
+install(PROGRAMS
+# scripts/my_python_script
+ DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
+)
+
+## Mark executables and/or libraries for installation
+# install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_node
+# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
+# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
+# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
+# )
+
+## Mark cpp header files for installation
+# install(DIRECTORY include/${PROJECT_NAME}/
+# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
+# FILES_MATCHING PATTERN "*.h"
+# PATTERN ".svn" EXCLUDE
+# )
+
+## Mark other files for installation (e.g. launch and bag files, etc.)
+# install(FILES
+# # myfile1
+# # myfile2
+# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
+# )
+
+#############
+## Testing ##
+#############
+
+## Add gtest based cpp test target and link libraries
+# catkin_add_gtest(${PROJECT_NAME}-test test/test_safety_master_plugin.cpp)
+# if(TARGET ${PROJECT_NAME}-test)
+# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
+# endif()
+
+## Add folders to be run by python nosetests
+# catkin_add_nosetests(test)
diff --git a/launch/user_plugin.launch b/launch/user_plugin.launch
new file mode 100644
index 0000000..4a14bf8
--- /dev/null
+++ b/launch/user_plugin.launch
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/package.xml b/package.xml
new file mode 100644
index 0000000..6255728
--- /dev/null
+++ b/package.xml
@@ -0,0 +1,35 @@
+
+
+ safety_user_plugin
+ 0.0.0
+ The safety_user_plugin package
+
+ Aleksander Bojda
+
+ MIT
+
+ catkin
+
+ rospy
+ rqt_gui
+ rqt_gui_py
+ std_msgs
+ rosaria_msgs
+
+ rospy
+ rqt_gui
+ rqt_gui_py
+ std_msgs
+ rosaria_msgs
+
+ rospy
+ rqt_gui
+ rqt_gui_py
+ std_msgs
+ message_runtime
+ rosaria_msgs
+
+
+
+
+
diff --git a/plugin.xml b/plugin.xml
new file mode 100644
index 0000000..0b2b84d
--- /dev/null
+++ b/plugin.xml
@@ -0,0 +1,15 @@
+
+
+
+ Safety system user plugin
+
+
+
+
+ folder
+
+
+ system-help
+
+
+
\ No newline at end of file
diff --git a/scripts/english.py b/scripts/english.py
new file mode 100644
index 0000000..e8af3d3
--- /dev/null
+++ b/scripts/english.py
@@ -0,0 +1,65 @@
+#!/usr/bin/env python
+# coding=utf-8
+
+from language import LanguageTexts
+
+class EnglishTexts(LanguageTexts):
+
+ # Warning popup for robot unlocking
+ warning_text_1 = "ATTENTION"
+ warning_text_2 = "Are You sure You want to unlock the robot?"
+
+ # Button texts
+ select_text = 'Select'
+
+ stop_robot_text = "STOP robot"
+ unlock_robot_text = "UNLOCK robot"
+
+ disengage_clutch_text = "Disengage clutch"
+ engage_clutch_text = "Engage clutch"
+
+ release_robot_text = 'Release robot'
+
+
+ # Logger info texts
+ robot_selected_text = 'PIONIER{0} selected!'
+ robot_released_text = 'Robot released'
+ stopped_and_engaged_text = "Robot will be stopped and clutch engaged"
+
+ master_stop_clicked_text = 'MasterSTOP button pressed. Stopping the robots'
+ master_stop_released_text = 'MasterSTOP button released. Robot can be unlocked'
+
+ robot_stopped_text = 'Robot stopped'
+ robot_started_text = 'Robot started'
+
+ clutch_disengaged_text = 'Disengaging the clutch'
+ clutch_engaged_text = 'Engaging the clutch'
+
+ obstacle_detected_text = 'Obstacle detected. Robot stopped'
+ obstacle_removed_text = 'Obstacle removed'
+
+
+ # Logger error/problem messages
+ selection_error_text = 'Select the PIONEER from robots list first'
+ cannot_start_masterstop_text = "Robot can't be started. MasterSTOP pressed!"
+ cannot_start_obstacle_text = "Robot can't be started. Obstacle detected!"
+ cannot_select_robot_text = "Robot can't be selected. It is already selected by another group"
+ connection_to_robot_lost_text = 'Connection lost with robot PIONIER{0}'
+ connection_to_master_lost_text = 'Connection lost with masterSTOP. Ask the teacher to run it'
+
+
+ # Description labels
+ linear_text = '
Linear velocity
'
+ angular_text = '
Angular velocity
'
+ id_text = '
Robot ID
'
+ battery_text = '
Battery state
'
+ masterstop_text = '
Master Stop
'
+ obstacle_text = '
Obstacle Stop
'
+ robot_text = '
Robot state
'
+ restrictions_text = '
Restrictions
'
+ history_text = '
Message history
'
+
+
+
+ def __init__(self):
+ pass
\ No newline at end of file
diff --git a/scripts/enums/__init__.py b/scripts/enums/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/scripts/enums/clutch_state.py b/scripts/enums/clutch_state.py
new file mode 100644
index 0000000..9479b62
--- /dev/null
+++ b/scripts/enums/clutch_state.py
@@ -0,0 +1,6 @@
+
+
+class ClutchState:
+ ENGAGED = 4
+ DISENGAGED = 5
+ UNKNOWN = 6
\ No newline at end of file
diff --git a/scripts/enums/stop_state.py b/scripts/enums/stop_state.py
new file mode 100644
index 0000000..17d5939
--- /dev/null
+++ b/scripts/enums/stop_state.py
@@ -0,0 +1,6 @@
+
+
+class StopState:
+ STOPPED = 1
+ RUNNING = 2
+ UNKNOWN = 3
\ No newline at end of file
diff --git a/scripts/language.py b/scripts/language.py
new file mode 100644
index 0000000..63aceb6
--- /dev/null
+++ b/scripts/language.py
@@ -0,0 +1,61 @@
+
+class LanguageTexts:
+
+ # Warning popup for robot unlocking
+ warning_text_1 = "Text not reimplemented!"
+ warning_text_2 = "Text not reimplemented!"
+
+ # Button texts
+ select_text = "Text not reimplemented!"
+
+ stop_robot_text = "Text not reimplemented!"
+ unlock_robot_text = "Text not reimplemented!"
+
+ disengage_clutch_text = "Text not reimplemented!"
+ engage_clutch_text = "Text not reimplemented!"
+
+ release_robot_text = "Text not reimplemented!"
+
+
+ # Logger info texts
+ robot_selected_text = "Text not reimplemented!"
+ robot_released_text = "Text not reimplemented!"
+ stopped_and_engaged_text = "Text not reimplemented!"
+
+ master_stop_clicked_text = "Text not reimplemented!"
+ master_stop_released_text = "Text not reimplemented!"
+
+ robot_stopped_text = "Text not reimplemented!"
+ robot_started_text = "Text not reimplemented!"
+
+ clutch_disengaged_text = "Text not reimplemented!"
+ clutch_engaged_text = "Text not reimplemented!"
+
+ obstacle_detected_text = "Text not reimplemented!"
+ obstacle_removed_text = "Text not reimplemented!"
+
+
+ # Logger error/problem messages
+ selection_error_text = "Text not reimplemented!"
+ cannot_start_masterstop_text = "Text not reimplemented!"
+ cannot_start_obstacle_text = "Text not reimplemented!"
+ cannot_select_robot_text = "Text not reimplemented!"
+ connection_to_robot_lost_text = "Text not reimplemented!"
+ connection_to_master_lost_text = "Text not reimplemented!"
+
+
+ # Description labels
+ angular_text = "Text not reimplemented!"
+ linear_text = "Text not reimplemented!"
+ id_text = "Text not reimplemented!"
+ battery_text = "Text not reimplemented!"
+ masterstop_text = "Text not reimplemented!"
+ obstacle_text = "Text not reimplemented!"
+ robot_text = "Text not reimplemented!"
+ restrictions_text = "Text not reimplemented!"
+ history_text = "Text not reimplemented!"
+
+
+
+ def __init__(self):
+ pass
\ No newline at end of file
diff --git a/scripts/polish.py b/scripts/polish.py
new file mode 100644
index 0000000..2348d57
--- /dev/null
+++ b/scripts/polish.py
@@ -0,0 +1,63 @@
+#!/usr/bin/env python
+# coding=utf-8
+
+from language import LanguageTexts
+
+class PolishTexts(LanguageTexts):
+
+ # Warning popup for robot unlocking
+ warning_text_1 = "UWAGA"
+ warning_text_2 = "Na pewno chcesz odblokować robota?"
+
+ # Button texts
+ select_text = 'Wybierz'
+
+ stop_robot_text = "Zatrzymaj robota"
+ unlock_robot_text = "Odblokuj robota"
+
+ disengage_clutch_text = "Rozłącz sprzęgło"
+ engage_clutch_text = "Połącz sprzęgło"
+
+ release_robot_text = 'Zwolnij robota'
+
+
+ # Logger info texts
+ robot_selected_text = 'PIONIER{0} wybrany!'
+ robot_released_text = 'Odłączam robota'
+ stopped_and_engaged_text = "Robot zostanie zatrzymany i sprzęgnięty"
+
+ master_stop_clicked_text = 'Przycisk masterSTOP został naciśnięty. Zatrzymuje roboty'
+ master_stop_released_text = 'Przycisk masterSTOP odciśnięty. Mozesz uruchomić robota'
+
+ robot_stopped_text = 'Robot zatrzymany'
+ robot_started_text = 'Robot wystartował'
+
+ clutch_disengaged_text = 'Rozprzęgam sprzęgło'
+ clutch_engaged_text = 'Sprzęgam sprzegło'
+
+ obstacle_detected_text = 'Przeszkoda wykryta. Zatrzymuję robota'
+ obstacle_removed_text = 'Przeszkoda usunięta'
+
+
+ # Logger error/problem messages
+ selection_error_text = 'Najpierw wybierz PIONIERA z listy robotów'
+ cannot_start_masterstop_text = 'Nie można wystartować robota. MasterSTOP wciśnięty!'
+ cannot_start_obstacle_text = 'Nie mozna wystartować. Przeszkoda w polu działania robota'
+ cannot_select_robot_text = 'Nie mozna wybrać robota. Robot został już wybrany przez inną grupę'
+ connection_to_robot_lost_text = 'Utrata połączenia z robotem PIONIER{0}'
+ connection_to_master_lost_text = 'Utrata połączenia z masterstopem. Poproś prowadzącego o jego uruchomienie'
+
+
+ # Description labels
+ linear_text = '