├── prbt_hardware_support ├── .gitignore ├── msg │ ├── ModbusMsgInStamped.msg │ ├── ModbusRegisterBlock.msg │ └── BrakeTestErrorCodes.msg ├── test │ ├── config │ │ ├── joint_names.yaml │ │ ├── prbt_manipulator_driver_nodes.yaml │ │ └── speed_observer_test.xacro │ ├── include │ │ └── prbt_hardware_support │ │ │ ├── client_tests_common.h │ │ │ └── pilz_modbus_client_mock.h │ ├── unit_tests │ │ ├── unittest_filter_pipeline.test │ │ ├── unittest_update_filter.test │ │ ├── unittest_pilz_modbus_client.test │ │ ├── unittest_modbus_adapter_operation_mode.test │ │ ├── unittest_disable_speed_monitoring.test │ │ ├── unittest_brake_test_utils.test │ │ ├── unittest_fake_speed_override.test │ │ ├── unittest_canopen_braketest_adapter.test │ │ ├── unittest_pilz_modbus_exception.cpp │ │ ├── unittest_utils.cpp │ │ ├── unittest_pilz_modbus_client_exception.cpp │ │ ├── unittest_filter_pipeline.cpp │ │ ├── unittest_modbus_msg_in_builder.cpp │ │ └── unittest_modbus_msg_wrapper.cpp │ ├── integration_tests │ │ ├── integrationtest_operation_mode_setup.test │ │ ├── integrationtest_operation_mode.test │ │ └── integrationtest_brake_test_required.test │ └── acceptance_tests │ │ ├── acceptancetest_execute_brake_test.md │ │ └── acceptancetest_execute_brake_test_with_gripper.md ├── doc │ ├── diag_state_stop1_executor.png │ ├── diag_comp_overall_architecture.png │ └── architecture_overview.md ├── config │ ├── modbus_write_api_spec_pss4000.yaml │ ├── modbus_read_api_spec_pss4000.yaml │ └── modbus_read_api_spec_pnoz.yaml ├── rosdoc.yaml ├── srv │ ├── WriteModbusRegister.srv │ ├── BrakeTest.srv │ └── SendBrakeTestResult.srv ├── launch │ ├── fake_safety_interface.launch │ ├── stop1_executor_node.launch │ ├── brake_test_executor_node.launch │ ├── modbus_adapter_brake_test_node.launch │ ├── canopen_braketest_adapter_node.launch │ ├── modbus_adapter_operation_mode_node.launch │ ├── operation_mode_setup_executor_node.launch │ ├── operation_mode.launch │ ├── modbus_adapter_run_permitted_node.launch │ ├── brake_test.launch │ └── fake_operation_mode_setup.launch ├── include │ └── prbt_hardware_support │ │ ├── service_function_decl.h │ │ ├── monitor_cartesian_speed_func_decl.h │ │ ├── get_operation_mode_func_decl.h │ │ ├── utils.h │ │ ├── register_container.h │ │ ├── modbus_topic_definitions.h │ │ ├── pilz_modbus_exceptions.h │ │ ├── pilz_modbus_client_exception.h │ │ ├── modbus_adapter_brake_test_exception.h │ │ ├── modbus_check_ip_connection.h │ │ ├── modbus_msg_wrapper_exception.h │ │ ├── modbus_msg_brake_test_wrapper_exception.h │ │ ├── operation_mode_setup_executor_node_service_calls.h │ │ ├── modbus_msg_operation_mode_wrapper_exception.h │ │ ├── modbus_msg_run_permitted_wrapper_exception.h │ │ ├── brake_test_utils_exception.h │ │ ├── canopen_braketest_adapter_exception.h │ │ ├── modbus_api_definitions.h │ │ ├── param_names.h │ │ ├── write_modbus_register_call.h │ │ ├── libmodbus_client.h │ │ └── modbus_adapter_run_permitted.h ├── cfg │ └── FakeSpeedOverride.cfg ├── src │ ├── canopen_braketest_adapter_exception.cpp │ ├── canopen_braketest_adapter_node.cpp │ ├── modbus_adapter_operation_mode_node.cpp │ ├── modbus_msg_run_permitted_wrapper.cpp │ └── fake_speed_override_node.cpp └── package.xml ├── pilz_status_indicator_rqt ├── src │ └── pilz_status_indicator_rqt │ │ └── __init__.py ├── resource │ ├── t1.png │ ├── t2.png │ ├── auto.png │ └── unknown.png ├── doc │ └── widget_screenshot.png ├── setup.py ├── scripts │ └── pilz_status_indicator_rqt ├── plugin.xml ├── CMakeLists.txt ├── package.xml └── CHANGELOG.rst ├── prbt_moveit_config ├── launch │ ├── prbt_moveit_sensor_manager.launch.xml │ ├── prbt_moveit_controller_manager.launch.xml │ ├── warehouse.launch │ ├── setup_assistant.launch │ ├── fake_moveit_controller_manager.launch.xml │ ├── joystick_control.launch │ ├── sensor_manager.launch.xml │ ├── moveit_rviz.launch │ ├── warehouse_settings.launch.xml │ ├── default_warehouse_db.launch │ ├── planning_pipeline.launch.xml │ ├── run_benchmark_ompl.launch │ ├── trapezoidal_command_planner_planning_pipeline.launch.xml │ ├── pilz_industrial_motion_planner_planning_pipeline.launch.xml │ ├── ompl_planning_pipeline.launch.xml │ ├── trajectory_execution.launch.xml │ └── planning_context.launch ├── img │ └── prbt_rviz_planning_screenshot.png ├── config │ ├── kinematics.yaml │ ├── joint_names.yaml │ ├── cartesian_limits.yaml │ ├── fake_controllers.yaml │ ├── controllers_manipulator.yaml │ ├── prbt.srdf.xacro │ └── joint_limits.yaml ├── .setup_assistant ├── test │ └── integrationtest_prbt_ikfast_manipulator_plugin.test ├── package.xml └── CMakeLists.txt ├── prbt_ikfast_manipulator_plugin ├── .clang-format ├── patches │ ├── series │ ├── compiler-flags.patch │ ├── add-clang-tidy.patch │ ├── add-unittests.patch │ └── drop-lapack.patch ├── prbt_update_ikfast_plugin.sh ├── prbt_manipulator_moveit_ikfast_plugin_description.xml ├── update_ikfast_plugin.sh ├── package.xml └── CMakeLists.txt ├── prbt_support ├── img │ ├── joints.png │ ├── prbt.jpg │ └── pilz-logo.png ├── meshes │ ├── foot.stl │ ├── flange.stl │ ├── link_1.stl │ ├── link_2.stl │ ├── link_3.stl │ ├── link_4.stl │ └── link_5.stl ├── README.md ├── test │ ├── unit_tests │ │ └── unittest_system_info.test │ ├── test_urdf.launch │ ├── urdf_tests.test │ └── acceptance_tests │ │ ├── acceptance_test_tcp.md │ │ ├── acceptance_test_joint_limits.md │ │ └── acceptance_test_gripper.md ├── launch │ └── system_info.launch ├── src │ ├── system_info_exception.cpp │ └── system_info_node.cpp ├── include │ └── prbt_support │ │ ├── system_info_exception.h │ │ └── system_info.h ├── config │ └── manipulator_driver.yaml └── package.xml ├── .gitignore ├── pilz_control ├── test │ ├── config │ │ ├── joint_names.yaml │ │ ├── robot_mock_monitored_links.yaml │ │ ├── prbt_monitored_links.yaml │ │ └── test_controller.yaml │ ├── urdf │ │ ├── robot_mock.srdf │ │ └── robot_mock.launch │ ├── unittest_get_joint_acceleration_limits.test │ ├── unittest_pilz_joint_trajectory_controller.test │ ├── unittest_pilz_joint_trajectory_controller_is_executing.test │ ├── robot_mock_node.cpp │ ├── unittest_joint_states_speed_observer.test │ ├── robot_mock.cpp │ ├── robot_mock.h │ ├── unittest_hold_mode_listener.cpp │ └── integrationtest_pilz_joint_trajectory_controller.test ├── rosdoc.yaml ├── test_utils │ ├── launch │ │ └── joint_states_speed_observer.launch │ └── include │ │ └── pilz_control │ │ └── joint_states_speed_observer.h ├── pilz_control_plugins.xml ├── include │ └── pilz_control │ │ └── cartesian_speed_monitor_exception.h ├── src │ └── pilz_joint_trajectory_controller.cpp ├── package.xml └── README.md ├── pilz_robots ├── CMakeLists.txt └── package.xml ├── prbt_gazebo ├── config │ └── gazebo_pid_gains.yaml ├── README.md ├── test │ └── integrationtest_gazebo_bringup.test ├── package.xml ├── CMakeLists.txt └── CHANGELOG.rst ├── .github └── workflows │ ├── industrial_ci_prerelease.yml │ └── industrial_ci_action.yml └── .clang-format /prbt_hardware_support/.gitignore: -------------------------------------------------------------------------------- 1 | doc/html 2 | manifest.yaml 3 | -------------------------------------------------------------------------------- /pilz_status_indicator_rqt/src/pilz_status_indicator_rqt/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /prbt_moveit_config/launch/prbt_moveit_sensor_manager.launch.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /prbt_ikfast_manipulator_plugin/.clang-format: -------------------------------------------------------------------------------- 1 | --- 2 | SortIncludes: false 3 | DisableFormat: true 4 | ... 5 | -------------------------------------------------------------------------------- /prbt_support/img/joints.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PilzDE/pilz_robots/HEAD/prbt_support/img/joints.png -------------------------------------------------------------------------------- /prbt_support/img/prbt.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PilzDE/pilz_robots/HEAD/prbt_support/img/prbt.jpg -------------------------------------------------------------------------------- /prbt_support/meshes/foot.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PilzDE/pilz_robots/HEAD/prbt_support/meshes/foot.stl -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.autosave 2 | *.swp 3 | *.pyc 4 | .idea/ 5 | *.bag 6 | .vscode/ 7 | doc/html 8 | doc/manifest.yaml 9 | -------------------------------------------------------------------------------- /pilz_control/test/config/joint_names.yaml: -------------------------------------------------------------------------------- 1 | controller_joint_names: [shoulder_to_right_arm, shoulder_to_left_arm] 2 | -------------------------------------------------------------------------------- /prbt_support/img/pilz-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PilzDE/pilz_robots/HEAD/prbt_support/img/pilz-logo.png -------------------------------------------------------------------------------- /prbt_support/meshes/flange.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PilzDE/pilz_robots/HEAD/prbt_support/meshes/flange.stl -------------------------------------------------------------------------------- /prbt_support/meshes/link_1.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PilzDE/pilz_robots/HEAD/prbt_support/meshes/link_1.stl -------------------------------------------------------------------------------- /prbt_support/meshes/link_2.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PilzDE/pilz_robots/HEAD/prbt_support/meshes/link_2.stl -------------------------------------------------------------------------------- /prbt_support/meshes/link_3.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PilzDE/pilz_robots/HEAD/prbt_support/meshes/link_3.stl -------------------------------------------------------------------------------- /prbt_support/meshes/link_4.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PilzDE/pilz_robots/HEAD/prbt_support/meshes/link_4.stl -------------------------------------------------------------------------------- /prbt_support/meshes/link_5.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PilzDE/pilz_robots/HEAD/prbt_support/meshes/link_5.stl -------------------------------------------------------------------------------- /pilz_status_indicator_rqt/resource/t1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PilzDE/pilz_robots/HEAD/pilz_status_indicator_rqt/resource/t1.png -------------------------------------------------------------------------------- /pilz_status_indicator_rqt/resource/t2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PilzDE/pilz_robots/HEAD/pilz_status_indicator_rqt/resource/t2.png -------------------------------------------------------------------------------- /pilz_status_indicator_rqt/resource/auto.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PilzDE/pilz_robots/HEAD/pilz_status_indicator_rqt/resource/auto.png -------------------------------------------------------------------------------- /prbt_ikfast_manipulator_plugin/patches/series: -------------------------------------------------------------------------------- 1 | compiler-flags.patch 2 | add-unittests.patch 3 | drop-lapack.patch 4 | add-clang-tidy.patch 5 | -------------------------------------------------------------------------------- /pilz_status_indicator_rqt/resource/unknown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PilzDE/pilz_robots/HEAD/pilz_status_indicator_rqt/resource/unknown.png -------------------------------------------------------------------------------- /pilz_robots/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.0.2) 2 | project(pilz_robots) 3 | find_package(catkin REQUIRED) 4 | catkin_metapackage() 5 | -------------------------------------------------------------------------------- /prbt_hardware_support/msg/ModbusMsgInStamped.msg: -------------------------------------------------------------------------------- 1 | std_msgs/Header header 2 | std_msgs/UInt16MultiArray holding_registers 3 | std_msgs/Bool disconnect 4 | -------------------------------------------------------------------------------- /pilz_status_indicator_rqt/doc/widget_screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PilzDE/pilz_robots/HEAD/pilz_status_indicator_rqt/doc/widget_screenshot.png -------------------------------------------------------------------------------- /prbt_hardware_support/test/config/joint_names.yaml: -------------------------------------------------------------------------------- 1 | controller_joint_names: [prbt_joint_1, prbt_joint_2, prbt_joint_3, prbt_joint_4, prbt_joint_5, prbt_joint_6] 2 | -------------------------------------------------------------------------------- /prbt_hardware_support/doc/diag_state_stop1_executor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PilzDE/pilz_robots/HEAD/prbt_hardware_support/doc/diag_state_stop1_executor.png -------------------------------------------------------------------------------- /prbt_moveit_config/img/prbt_rviz_planning_screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PilzDE/pilz_robots/HEAD/prbt_moveit_config/img/prbt_rviz_planning_screenshot.png -------------------------------------------------------------------------------- /pilz_control/test/config/robot_mock_monitored_links.yaml: -------------------------------------------------------------------------------- 1 | monitored_link_names: 2 | [arm_right_link, 3 | hand_right_link, 4 | arm_left_link, 5 | hand_left_link] 6 | -------------------------------------------------------------------------------- /prbt_hardware_support/doc/diag_comp_overall_architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PilzDE/pilz_robots/HEAD/prbt_hardware_support/doc/diag_comp_overall_architecture.png -------------------------------------------------------------------------------- /pilz_control/test/config/prbt_monitored_links.yaml: -------------------------------------------------------------------------------- 1 | monitored_link_names: 2 | [prbt_link_1, 3 | prbt_link_2, 4 | prbt_link_3, 5 | prbt_link_4, 6 | prbt_link_5, 7 | prbt_flange, 8 | prbt_tcp] 9 | -------------------------------------------------------------------------------- /prbt_moveit_config/config/kinematics.yaml: -------------------------------------------------------------------------------- 1 | manipulator: 2 | kinematics_solver: prbt_manipulator/IKFastKinematicsPlugin 3 | kinematics_solver_search_resolution: 0.005 4 | kinematics_solver_timeout: 0.005 5 | link_prefix: prbt_ 6 | -------------------------------------------------------------------------------- /pilz_control/rosdoc.yaml: -------------------------------------------------------------------------------- 1 | - builder: doxygen 2 | name: Documentation of pilz_control package 3 | output_dir: pilz_control 4 | file_patterns: '*.c *.cpp *.h *.cc *.hh *.dox *.md' 5 | exclude_patterns: 'test' 6 | aliases: ' 7 | definereq{1}="\b Spec - \b \1 8 | ' 9 | use_mdfile_as_mainpage: 'README.md' 10 | -------------------------------------------------------------------------------- /prbt_moveit_config/.setup_assistant: -------------------------------------------------------------------------------- 1 | moveit_setup_assistant_config: 2 | URDF: 3 | package: prbt_support 4 | relative_path: urdf/prbt.xacro 5 | SRDF: 6 | relative_path: config/prbt.srdf.xacro 7 | CONFIG: 8 | author_name: Pilz GmbH and Co. KG 9 | author_email: ros@pilz.de 10 | generated_timestamp: 1495550770 11 | -------------------------------------------------------------------------------- /prbt_ikfast_manipulator_plugin/prbt_update_ikfast_plugin.sh: -------------------------------------------------------------------------------- 1 | # unapply all patches 2 | quilt pop -a 3 | 4 | robot_name=prbt 5 | srdf_path="$(rospack find ${robot_name}_moveit_config)/config/${robot_name}.srdf" 6 | xacro $srdf_path.xacro > $srdf_path 7 | ./update_ikfast_plugin.sh 8 | rm $srdf_path 9 | 10 | # apply all patches 11 | quilt push -a 12 | 13 | -------------------------------------------------------------------------------- /prbt_gazebo/config/gazebo_pid_gains.yaml: -------------------------------------------------------------------------------- 1 | gazebo_ros_control: 2 | pid_gains: 3 | prbt_joint_1: {p: 50000.0, i: 1, d: 0.0} 4 | prbt_joint_2: {p: 50000.0, i: 1, d: 0.0} 5 | prbt_joint_3: {p: 50000.0, i: 1, d: 0.0} 6 | prbt_joint_4: {p: 5000.0, i: 0.1, d: 0.0} 7 | prbt_joint_5: {p: 5000.0, i: 0.1, d: 0.0} 8 | prbt_joint_6: {p: 5000.0, i: 0.1, d: 0.0} -------------------------------------------------------------------------------- /prbt_gazebo/README.md: -------------------------------------------------------------------------------- 1 | # prbt_gazebo 2 | Package providing a launch file which can be used to launch Gazebo with the 3 | Pilz PRBT robot and an empty world. 4 | 5 | To start Gazebo in combination with the Pilz PRBT robot type: 6 | `roslaunch prbt_gazebo sim_prbt_gazebo.launch`. 7 | 8 | For the execution of commands see [here](https://github.com/PilzDE/pilz_robots#package-prbt_moveit_config). 9 | -------------------------------------------------------------------------------- /pilz_status_indicator_rqt/setup.py: -------------------------------------------------------------------------------- 1 | # ! DO NOT MANUALLY INVOKE THIS setup.py, USE CATKIN INSTEAD 2 | 3 | from distutils.core import setup 4 | from catkin_pkg.python_setup import generate_distutils_setup 5 | 6 | # fetch values from package.xml 7 | setup_args = generate_distutils_setup( 8 | packages=['pilz_status_indicator_rqt'], 9 | package_dir={'': 'src'} 10 | ) 11 | 12 | setup(**setup_args) 13 | -------------------------------------------------------------------------------- /prbt_hardware_support/test/include/prbt_hardware_support/client_tests_common.h: -------------------------------------------------------------------------------- 1 | #ifndef PRBT_HARDWARE_SUPPORT_CLIENT_TESTS_COMMON_H 2 | #define PRBT_HARDWARE_SUPPORT_CLIENT_TESTS_COMMON_H 3 | 4 | // This file contains constants used by all client tests. 5 | namespace prbt_hardware_support 6 | { 7 | constexpr const char* const LOCALHOST = "127.0.0.1"; 8 | } 9 | 10 | #endif // PRBT_HARDWARE_SUPPORT_CLIENT_TESTS_COMMON_H -------------------------------------------------------------------------------- /prbt_support/README.md: -------------------------------------------------------------------------------- 1 | # Overview 2 | 3 | The prbt_support package contains files to start the PRBT manipulator. To start the robot run `roslaunch prbt_support robot.launch`. 4 | 5 | # ROS API 6 | 7 | ## SystemInfoNode 8 | 9 | Logs important system information. 10 | 11 | ### Used Services 12 | 13 | - /prbt/driver/get_object (canopen_chain_node/GetObject) 14 | - Read CANOpen object holding firmware information. 15 | -------------------------------------------------------------------------------- /prbt_hardware_support/config/modbus_write_api_spec_pss4000.yaml: -------------------------------------------------------------------------------- 1 | # Braketest: Disabled per default, can be enabled in robot.launch with parameter "has_braketest_support" 2 | ENABLE_TEMPORARY_MOVEMENT: 979 # 1 = Enable temporary movement for 20 min when brake test wasn't successfull 3 | BRAKETEST_PERFORMED: 982 # 1 = Test not performed, 2 = Test performed 4 | BRAKETEST_RESULT: 983 # 1 = Test not passed, 2 = Test passed 5 | -------------------------------------------------------------------------------- /prbt_ikfast_manipulator_plugin/prbt_manipulator_moveit_ikfast_plugin_description.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | IKFast61 plugin for closed-form kinematics of prbt manipulator 5 | 6 | 7 | -------------------------------------------------------------------------------- /prbt_hardware_support/doc/architecture_overview.md: -------------------------------------------------------------------------------- 1 | ## Overall system architecture 2 | The following diagram shows all components of the system and the connections 3 | between them. 4 | 5 | ![Component diagram of overall architecture](diag_comp_overall_architecture.png) 6 | 7 | ## State machine of stop 1 executor 8 | The following diagram shows the internal state machine of the stop 1 executor. 9 | 10 | ![State diagram of stop1 executor](diag_state_stop1_executor.png) 11 | -------------------------------------------------------------------------------- /pilz_control/test/urdf/robot_mock.srdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /pilz_status_indicator_rqt/scripts/pilz_status_indicator_rqt: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import sys 4 | 5 | from pilz_status_indicator_rqt.status_indicator import PilzStatusIndicatorRqt 6 | from rqt_gui.main import Main 7 | 8 | plugin = 'pilz_status_indicator_rqt.status_indicator.PilzStatusIndicatorRqt' 9 | main = Main(filename=plugin) 10 | # starting and rqt instance with the -t flag to make it float on top of other windows. 11 | sys.exit(main.main(standalone=plugin, argv=sys.argv + ['-t'])) 12 | -------------------------------------------------------------------------------- /.github/workflows/industrial_ci_prerelease.yml: -------------------------------------------------------------------------------- 1 | name: CI-Noetic-Prerelease 2 | 3 | on: pull_request 4 | 5 | jobs: 6 | prerelease: 7 | name: "Build + Test with package dependencies with Testing Repo of noetic (http://packages.ros.org/ros-testing/ubuntu)" 8 | runs-on: ubuntu-20.04 9 | steps: 10 | - uses: actions/checkout@v1 11 | - uses: 'ros-industrial/industrial_ci@master' 12 | env: 13 | PRERELEASE: true 14 | ROS_REPO: testing 15 | ROS_DISTRO: noetic 16 | -------------------------------------------------------------------------------- /prbt_moveit_config/launch/prbt_moveit_controller_manager.launch.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /prbt_hardware_support/rosdoc.yaml: -------------------------------------------------------------------------------- 1 | - builder: doxygen 2 | name: Documentation of prbt_hardware_support package 3 | output_dir: prbt_hardware_support 4 | file_patterns: '*.c *.cpp *.h *.cc *.hh *.dox *.md' 5 | aliases: ' 6 | definereq{1}="\b Spec - \b \1 (\ref test_list_\1 \"Tests\") \anchor spec_def_\1" 7 | refspec{1}="\ref spec_def_\1 \"Spec - \1\"" 8 | tests{2}="\xrefitem test_list_\1 \"\" \"Test list for specification: \1\" - \2 (\ref spec_def_\1 \"Spec\")" 9 | ' 10 | exclude_patterns: '*/test/acceptance_tests/*' 11 | use_mdfile_as_mainpage: 'README.md' 12 | -------------------------------------------------------------------------------- /pilz_status_indicator_rqt/plugin.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | A status indicator to show e.g. operation modes 5 | 6 | 7 | 8 | applications-other 9 | Showing information about operation mode, status and speed override of the robot. 10 | 11 | 12 | -------------------------------------------------------------------------------- /prbt_moveit_config/launch/warehouse.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /prbt_moveit_config/launch/setup_assistant.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /prbt_hardware_support/config/modbus_read_api_spec_pss4000.yaml: -------------------------------------------------------------------------------- 1 | # Operation mode: Disabled per default, can be enabled in robot.launch with parameter "has_operation_mode_support" 2 | OPERATION_MODE: 970 # 0 = No Operation mode, 1 = T1, 2 = T2, 3 = Automatik, Operation modes according to EN ISO 10218 3 | 4 | # Braketest: Disabled per default, can be enabled in robot.launch with parameter "has_braketest_support" 5 | BRAKETEST_REQUEST: 973 # 0 = Test not required, 1 = Test required 6 | 7 | # Generic: Enabled the whole time 8 | RUN_PERMITTED: 974 # robot is only allowed to move when the signal is 1 9 | VERSION: 977 # version of modbus register specification 10 | -------------------------------------------------------------------------------- /prbt_hardware_support/config/modbus_read_api_spec_pnoz.yaml: -------------------------------------------------------------------------------- 1 | # PNOZMulti Software V2.1dev 2 | # Generic: Enabled the whole time 3 | RUN_PERMITTED: 512 # robot is only allowed to move when the signal is 1 4 | VERSION: 513 # version of modbus register specification 5 | 6 | # Braketest: This is used to signalize that a brake test is requested by the safety controller 7 | BRAKETEST_REQUEST: 514 # 0 = Test not required, 1 = Test required 8 | 9 | # Operation mode: Disabled per default, can be enabled in robot.launch with parameter "has_operation_mode_support" 10 | OPERATION_MODE: 515 # 0 = No Operation mode, 1 = T1, 2 = T2, 3 = Automatik, Operation modes according to EN ISO 10218 11 | -------------------------------------------------------------------------------- /prbt_moveit_config/launch/fake_moveit_controller_manager.launch.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /prbt_moveit_config/launch/joystick_control.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /prbt_moveit_config/launch/sensor_manager.launch.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /prbt_moveit_config/launch/moveit_rviz.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /prbt_moveit_config/launch/warehouse_settings.launch.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /prbt_moveit_config/config/joint_names.yaml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright © 2018 Pilz GmbH & Co. KG 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | 16 | 17 | controller_joint_names: [prbt_joint_1, prbt_joint_2, prbt_joint_3, prbt_joint_4, prbt_joint_5, prbt_joint_6] 18 | -------------------------------------------------------------------------------- /prbt_moveit_config/config/cartesian_limits.yaml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright © 2018 Pilz GmbH & Co. KG 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | 16 | cartesian_limits: 17 | max_trans_vel: 1 18 | max_trans_acc: 2.25 19 | max_trans_dec: -5 20 | max_rot_vel: 1.57 21 | -------------------------------------------------------------------------------- /prbt_moveit_config/launch/default_warehouse_db.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /prbt_moveit_config/launch/planning_pipeline.launch.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /prbt_ikfast_manipulator_plugin/update_ikfast_plugin.sh: -------------------------------------------------------------------------------- 1 | search_mode=OPTIMIZE_MAX_JOINT 2 | srdf_filename=prbt.srdf 3 | robot_name_in_srdf=prbt 4 | moveit_config_pkg=prbt_moveit_config 5 | robot_name=prbt 6 | planning_group_name=manipulator 7 | ikfast_plugin_pkg=prbt_ikfast_manipulator_plugin 8 | base_link_name=base_link 9 | eef_link_name=flange 10 | ikfast_output_path=$(rospack find ${robot_name}_ikfast_manipulator_plugin)/src/prbt_manipulator_ikfast_solver.cpp 11 | 12 | rosrun moveit_kinematics create_ikfast_moveit_plugin.py\ 13 | --search_mode=$search_mode\ 14 | --srdf_filename=$srdf_filename\ 15 | --robot_name_in_srdf=$robot_name_in_srdf\ 16 | --moveit_config_pkg=$moveit_config_pkg\ 17 | $robot_name\ 18 | $planning_group_name\ 19 | $ikfast_plugin_pkg\ 20 | $base_link_name\ 21 | $eef_link_name\ 22 | $ikfast_output_path 23 | -------------------------------------------------------------------------------- /prbt_hardware_support/srv/WriteModbusRegister.srv: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2019 Pilz GmbH & Co. KG 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Lesser General Public License as published by 6 | # the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Lesser General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Lesser General Public License 15 | # along with this program. If not, see . 16 | 17 | ModbusRegisterBlock holding_register_block 18 | 19 | --- 20 | bool success 21 | -------------------------------------------------------------------------------- /prbt_moveit_config/config/fake_controllers.yaml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright © 2018 Pilz GmbH & Co. KG 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | 16 | controller_list: 17 | - name: fake_manipulator_controller 18 | joints: 19 | - prbt_joint_1 20 | - prbt_joint_2 21 | - prbt_joint_3 22 | - prbt_joint_4 23 | - prbt_joint_5 24 | - prbt_joint_6 25 | -------------------------------------------------------------------------------- /prbt_hardware_support/launch/fake_safety_interface.launch: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /prbt_support/test/unit_tests/unittest_system_info.test: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /prbt_hardware_support/launch/stop1_executor_node.launch: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /prbt_moveit_config/config/controllers_manipulator.yaml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright © 2018 Pilz GmbH & Co. KG 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | 16 | 17 | controller_list: 18 | - name: "prbt/manipulator_joint_trajectory_controller/" 19 | action_ns: follow_joint_trajectory 20 | type: FollowJointTrajectory 21 | joints: [prbt_joint_1, prbt_joint_2, prbt_joint_3, prbt_joint_4, prbt_joint_5, prbt_joint_6] 22 | -------------------------------------------------------------------------------- /prbt_hardware_support/test/unit_tests/unittest_filter_pipeline.test: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /prbt_hardware_support/test/unit_tests/unittest_update_filter.test: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /prbt_support/test/test_urdf.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /prbt_ikfast_manipulator_plugin/patches/compiler-flags.patch: -------------------------------------------------------------------------------- 1 | Enable more restrictive compiler flags 2 | Index: prbt_ikfast_manipulator_plugin/CMakeLists.txt 3 | =================================================================== 4 | --- prbt_ikfast_manipulator_plugin.orig/CMakeLists.txt 5 | +++ prbt_ikfast_manipulator_plugin/CMakeLists.txt 6 | @@ -4,6 +4,19 @@ project(prbt_ikfast_manipulator_plugin) 7 | set(CMAKE_CXX_STANDARD 14) 8 | set(CMAKE_CXX_EXTENSIONS OFF) 9 | 10 | +add_compile_options(-Wall) 11 | +add_compile_options(-Wextra) 12 | +add_compile_options(-Wno-unused-parameter) 13 | +add_compile_options(-Wno-unused-variable) 14 | +add_compile_options(-Werror) 15 | + 16 | +# enable aligned new in gcc7+ 17 | +if(CMAKE_COMPILER_IS_GNUCXX) 18 | + if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 7.0) 19 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -faligned-new") 20 | + endif() 21 | +endif() 22 | + 23 | find_package(catkin REQUIRED COMPONENTS 24 | moveit_core 25 | pluginlib 26 | -------------------------------------------------------------------------------- /prbt_hardware_support/test/unit_tests/unittest_pilz_modbus_client.test: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /prbt_support/launch/system_info.launch: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /prbt_hardware_support/launch/brake_test_executor_node.launch: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /prbt_hardware_support/launch/modbus_adapter_brake_test_node.launch: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /prbt_hardware_support/launch/canopen_braketest_adapter_node.launch: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /prbt_hardware_support/msg/ModbusRegisterBlock.msg: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2019 Pilz GmbH & Co. KG 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Lesser General Public License as published by 6 | # the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Lesser General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Lesser General Public License 15 | # along with this program. If not, see . 16 | 17 | # Defines the start index of the Modbus register block. A block can consist 18 | # of one or more registers. 19 | uint16 start_idx 20 | 21 | # The values of the registers (in order). 22 | uint16[] values 23 | -------------------------------------------------------------------------------- /prbt_hardware_support/srv/BrakeTest.srv: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2019 Pilz GmbH & Co. KG 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Lesser General Public License as published by 6 | # the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Lesser General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Lesser General Public License 15 | # along with this program. If not, see . 16 | 17 | 18 | --- 19 | bool success 20 | 21 | # Number representing failure of the brake test 22 | BrakeTestErrorCodes error_code 23 | 24 | # Contains message explaining failure of the brake test execution 25 | string error_msg 26 | -------------------------------------------------------------------------------- /prbt_hardware_support/test/unit_tests/unittest_modbus_adapter_operation_mode.test: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /prbt_hardware_support/launch/modbus_adapter_operation_mode_node.launch: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /prbt_hardware_support/launch/operation_mode_setup_executor_node.launch: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 22 | 23 | -------------------------------------------------------------------------------- /prbt_hardware_support/launch/operation_mode.launch: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /prbt_moveit_config/launch/run_benchmark_ompl.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /prbt_hardware_support/launch/modbus_adapter_run_permitted_node.launch: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /prbt_moveit_config/config/prbt.srdf.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /prbt_hardware_support/srv/SendBrakeTestResult.srv: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2019 Pilz GmbH & Co. KG 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Lesser General Public License as published by 6 | # the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Lesser General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Lesser General Public License 15 | # along with this program. If not, see . 16 | 17 | # Variable to state the result of the last brake test. 18 | # TRUE <-> Brake test successful 19 | # FALSE <-> Brake test failed 20 | bool result 21 | 22 | --- 23 | bool success 24 | 25 | # Contains message explaining failure 26 | string error_msg 27 | -------------------------------------------------------------------------------- /prbt_support/test/urdf_tests.test: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /prbt_gazebo/test/integrationtest_gazebo_bringup.test: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /prbt_support/src/system_info_exception.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #include 19 | 20 | namespace prbt_support 21 | { 22 | SystemInfoException::SystemInfoException(const std::string& what_arg) : std::runtime_error(what_arg) 23 | { 24 | } 25 | 26 | } // namespace prbt_support 27 | -------------------------------------------------------------------------------- /pilz_robots/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | pilz_robots 4 | 0.6.0 5 | The metapackage 6 | 7 | http://ros.org/wiki/pilz_robots 8 | 9 | Immanuel Martini 10 | 11 | Apache 2.0 12 | 13 | https://wiki.ros.org/pilz_robots 14 | https://github.com/PilzDE/pilz_robots/issues 15 | https://github.com/PilzDE/pilz_robots 16 | 17 | catkin 18 | 19 | prbt_support 20 | prbt_ikfast_manipulator_plugin 21 | prbt_moveit_config 22 | pilz_control 23 | prbt_hardware_support 24 | pilz_status_indicator_rqt 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /prbt_gazebo/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | prbt_gazebo 4 | 0.6.0 5 | Launch prbt robot in an empty Gazebo world. 6 | 7 | Immanuel Martini 8 | 9 | Apache 2.0 10 | 11 | https://wiki.ros.org/prbt_gazebo 12 | https://github.com/PilzDE/pilz_robots/issues 13 | https://github.com/PilzDE/pilz_robots 14 | 15 | catkin 16 | 17 | 18 | xacro 19 | roslaunch 20 | gazebo_ros 21 | prbt_moveit_config 22 | prbt_support 23 | gazebo_ros_control 24 | 25 | rostest 26 | roscpp 27 | actionlib 28 | trajectory_msgs 29 | 30 | 31 | -------------------------------------------------------------------------------- /prbt_hardware_support/test/unit_tests/unittest_disable_speed_monitoring.test: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | 23 | 24 | -------------------------------------------------------------------------------- /prbt_hardware_support/include/prbt_hardware_support/service_function_decl.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef SERVICE_FUNCTION_DECL_H 19 | #define SERVICE_FUNCTION_DECL_H 20 | 21 | #include 22 | 23 | namespace prbt_hardware_support 24 | { 25 | using TServiceCallFunc = std::function; 26 | } 27 | 28 | #endif // SERVICE_FUNCTION_DECL_H 29 | -------------------------------------------------------------------------------- /prbt_hardware_support/launch/brake_test.launch: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /prbt_hardware_support/test/unit_tests/unittest_brake_test_utils.test: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /prbt_hardware_support/test/unit_tests/unittest_fake_speed_override.test: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /pilz_control/test_utils/launch/joint_states_speed_observer.launch: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /pilz_control/test/unittest_get_joint_acceleration_limits.test: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 22 | 23 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /prbt_hardware_support/cfg/FakeSpeedOverride.cfg: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | # Copyright (c) 2018 Pilz GmbH & Co. KG 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Lesser General Public License as published by 7 | # the Free Software Foundation, either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU Lesser General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU Lesser General Public License 16 | # along with this program. If not, see . 17 | 18 | PACKAGE = "prbt_hardware_support" 19 | 20 | from dynamic_reconfigure.parameter_generator_catkin import * 21 | 22 | gen = ParameterGenerator() 23 | 24 | gen.add("speed_override", double_t, 0, "A fake speed override", 1.0, 0.1, 1.0) 25 | 26 | exit(gen.generate(PACKAGE, "prbt_hardware_support", "FakeSpeedOverride")) 27 | -------------------------------------------------------------------------------- /prbt_ikfast_manipulator_plugin/patches/add-clang-tidy.patch: -------------------------------------------------------------------------------- 1 | Add clang-tidy to CMakeLists.txt 2 | Index: prbt_ikfast_manipulator_plugin/CMakeLists.txt 3 | =================================================================== 4 | --- prbt_ikfast_manipulator_plugin.orig/CMakeLists.txt 5 | +++ prbt_ikfast_manipulator_plugin/CMakeLists.txt 6 | @@ -34,6 +34,23 @@ target_link_libraries(${IKFAST_LIBRARY_N 7 | # suppress warnings about unused variables in OpenRave's solver code 8 | target_compile_options(${IKFAST_LIBRARY_NAME} PRIVATE -Wno-unused-variable) 9 | 10 | +################ 11 | +## Clang tidy ## 12 | +################ 13 | +if(CATKIN_ENABLE_CLANG_TIDY) 14 | + find_program( 15 | + CLANG_TIDY_EXE 16 | + NAMES "clang-tidy" 17 | + DOC "Path to clang-tidy executable" 18 | + ) 19 | + if(NOT CLANG_TIDY_EXE) 20 | + message(FATAL_ERROR "clang-tidy not found.") 21 | + else() 22 | + message(STATUS "clang-tidy found: ${CLANG_TIDY_EXE}") 23 | + set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_EXE}") 24 | + endif() 25 | +endif() 26 | + 27 | install(TARGETS 28 | ${IKFAST_LIBRARY_NAME} 29 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}) 30 | -------------------------------------------------------------------------------- /prbt_hardware_support/include/prbt_hardware_support/monitor_cartesian_speed_func_decl.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | #ifndef MONITOR_CARTESIAN_SPEED_FUNC_DECL_H 18 | #define MONITOR_CARTESIAN_SPEED_FUNC_DECL_H 19 | 20 | #include 21 | 22 | namespace prbt_hardware_support 23 | { 24 | using MonitorCartesianSpeedFunc = std::function; 25 | } 26 | 27 | #endif // MONITOR_CARTESIAN_SPEED_FUNC_DECL_H 28 | -------------------------------------------------------------------------------- /pilz_status_indicator_rqt/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.0.2) 2 | project(pilz_status_indicator_rqt) 3 | 4 | find_package(catkin REQUIRED COMPONENTS 5 | rospy 6 | rqt_gui 7 | rqt_gui_py 8 | ) 9 | catkin_package() 10 | catkin_python_setup() 11 | 12 | install(PROGRAMS scripts/${PROJECT_NAME} 13 | DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 14 | ) 15 | 16 | install(DIRECTORY 17 | resource 18 | DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 19 | ) 20 | 21 | install(FILES 22 | plugin.xml 23 | DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 24 | ) 25 | 26 | ############# 27 | ## Testing ## 28 | ############# 29 | 30 | if(CATKIN_ENABLE_TESTING) 31 | find_package(rostest REQUIRED) 32 | 33 | catkin_add_nosetests(test/unit_tests/status_indicator_unit_test.py) 34 | catkin_add_nosetests(test/unit_tests/status_indicator_widget_unit_test.py) 35 | 36 | # To generate coverage run: 37 | # python-coverage run -a --source src test/unit_tests/status_indicator_unit_test.py && \ 38 | # python-coverage run -a --source src test/unit_tests/status_indicator_widget_unit_test.py && \ 39 | # python-coverage html && see htmlcov/index.html 40 | endif() -------------------------------------------------------------------------------- /prbt_hardware_support/test/unit_tests/unittest_canopen_braketest_adapter.test: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 22 | 23 | 24 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /prbt_hardware_support/include/prbt_hardware_support/get_operation_mode_func_decl.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef GET_OPERATION_MODE_FUNC_DECL_H 19 | #define GET_OPERATION_MODE_FUNC_DECL_H 20 | 21 | #include 22 | #include 23 | 24 | namespace prbt_hardware_support 25 | { 26 | using GetOpModeFunc = std::function; 27 | } 28 | 29 | #endif // GET_OPERATION_MODE_FUNC_DECL_H 30 | -------------------------------------------------------------------------------- /prbt_hardware_support/include/prbt_hardware_support/utils.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef UTILS_H 19 | #define UTILS_H 20 | 21 | namespace prbt_hardware_support 22 | { 23 | // Extract pure class name from full class name (foo::Foo -> Foo) 24 | inline std::string className(std::string full_name) 25 | { 26 | return full_name.substr(full_name.rfind("::") + 2); 27 | } 28 | 29 | } // namespace prbt_hardware_support 30 | 31 | #endif // UTILS_H 32 | -------------------------------------------------------------------------------- /prbt_hardware_support/launch/fake_operation_mode_setup.launch: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | 22 | 24 | -------------------------------------------------------------------------------- /pilz_control/pilz_control_plugins.xml: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 22 | 23 | The PilzJointTrajectoryController is directly derived from ros_controllers::PilzJointTrajectoryController. 24 | It extends its base class by services to switch the controller into and out of a holding mode. 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /prbt_hardware_support/include/prbt_hardware_support/register_container.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | #ifndef REGISTER_CONTAINER_H 18 | #define REGISTER_CONTAINER_H 19 | 20 | #include 21 | #include 22 | 23 | namespace prbt_hardware_support 24 | { 25 | //! Convenience data type defining the data type for a collection of registers. 26 | using RegCont = std::vector; 27 | 28 | } // namespace prbt_hardware_support 29 | 30 | #endif // REGISTER_CONTAINER_H 31 | -------------------------------------------------------------------------------- /prbt_hardware_support/src/canopen_braketest_adapter_exception.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #include 19 | 20 | namespace prbt_hardware_support 21 | { 22 | CANOpenBrakeTestAdapterException::CANOpenBrakeTestAdapterException(const std::string& what_arg, 23 | const int8_t error_value) 24 | : std::runtime_error(what_arg), error_value_(error_value) 25 | { 26 | } 27 | 28 | } // namespace prbt_hardware_support 29 | -------------------------------------------------------------------------------- /prbt_hardware_support/test/config/prbt_manipulator_driver_nodes.yaml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2019 Pilz GmbH & Co. KG 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Lesser General Public License as published by 6 | # the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Lesser General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Lesser General Public License 15 | # along with this program. If not, see . 16 | 17 | nodes: 18 | prbt_joint_1: 19 | id: 3 20 | braketest_required: true 21 | prbt_joint_2: 22 | id: 4 23 | braketest_required: true 24 | prbt_joint_3: 25 | id: 5 26 | braketest_required: true 27 | prbt_joint_4: 28 | id: 6 29 | braketest_required: true 30 | gripper_joint: 31 | id: 99 32 | prbt_joint_5: 33 | id: 7 34 | braketest_required: true 35 | prbt_joint_6: 36 | id: 8 37 | braketest_required: true 38 | -------------------------------------------------------------------------------- /prbt_hardware_support/src/canopen_braketest_adapter_node.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #include 19 | #include 20 | 21 | /** 22 | * @brief Provides service to execute a braketest 23 | */ 24 | int main(int argc, char** argv) 25 | { 26 | ros::init(argc, argv, "canopen_braketest_adapter_node"); 27 | ros::NodeHandle nh{ "~" }; 28 | 29 | prbt_hardware_support::CANOpenBrakeTestAdapter brake_test_adapter(nh); 30 | 31 | ros::spin(); 32 | 33 | return EXIT_FAILURE; 34 | } 35 | -------------------------------------------------------------------------------- /prbt_ikfast_manipulator_plugin/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | prbt_ikfast_manipulator_plugin 4 | 0.6.0 5 | The prbt_ikfast_manipulator_plugin package 6 | Immanuel Martini 7 | Apache 2.0 8 | catkin 9 | https://wiki.ros.org/prbt_ikfast_manipulator_plugin 10 | https://github.com/PilzDE/pilz_robots/issues 11 | https://github.com/PilzDE/pilz_robots 12 | 13 | 14 | 15 | eigen_conversions 16 | moveit_core 17 | pluginlib 18 | roscpp 19 | tf2_eigen 20 | tf2_kdl 21 | eigen_conversions 22 | moveit_core 23 | pluginlib 24 | roscpp 25 | tf2_kdl 26 | 27 | -------------------------------------------------------------------------------- /pilz_status_indicator_rqt/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | pilz_status_indicator_rqt 4 | 0.6.0 5 | Showing information about operation mode, status and speed override of the robot. 6 | 7 | Immanuel Martini 8 | 9 | Apache 2.0 10 | 11 | https://github.com/PilzDE/pilz_robots/issues 12 | https://github.com/PilzDE/pilz_robots 13 | 14 | catkin 15 | 16 | pilz_msgs 17 | rospy 18 | rqt_gui 19 | rqt_gui_py 20 | std_msgs 21 | 22 | rospy 23 | rqt_gui 24 | rqt_gui_py 25 | 26 | rostest 27 | python-mock 28 | python3-mock 29 | rosunit 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /prbt_hardware_support/include/prbt_hardware_support/modbus_topic_definitions.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2018 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef PRBT_HARDWARE_SUPPORT_COMMON_H 19 | #define PRBT_HARDWARE_SUPPORT_COMMON_H 20 | 21 | #include 22 | 23 | namespace prbt_hardware_support 24 | { 25 | // Topic names 26 | static const std::string TOPIC_MODBUS_READ = "/pilz_modbus_client_node/modbus_read"; 27 | static const std::string SERVICE_MODBUS_WRITE = "/pilz_modbus_client_node/modbus_write"; 28 | 29 | } // namespace prbt_hardware_support 30 | #endif // PRBT_HARDWARE_SUPPORT_COMMON_H 31 | -------------------------------------------------------------------------------- /prbt_support/include/prbt_support/system_info_exception.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef PRBT_SUPPORT_SYSTEM_INFO_EXCEPTION_H 19 | #define PRBT_SUPPORT_SYSTEM_INFO_EXCEPTION_H 20 | 21 | #include 22 | 23 | namespace prbt_support 24 | { 25 | /** 26 | * @brief Exception thrown by the SystemInfo class in case of an error. 27 | */ 28 | class SystemInfoException : public std::runtime_error 29 | { 30 | public: 31 | SystemInfoException(const std::string& what_arg); 32 | }; 33 | 34 | } // namespace prbt_support 35 | 36 | #endif // PRBT_SUPPORT_SYSTEM_INFO_EXCEPTION_H 37 | -------------------------------------------------------------------------------- /prbt_hardware_support/include/prbt_hardware_support/pilz_modbus_exceptions.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2018 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef PILZ_MODBUS_EXCEPTIONS_H 19 | #define PILZ_MODBUS_EXCEPTIONS_H 20 | 21 | #include 22 | 23 | /** 24 | * @brief Expection thrown by prbt_hardware_support::LibModbusClient::readHoldingRegister 25 | * if a disconnect from the server occured. 26 | * 27 | */ 28 | class ModbusExceptionDisconnect : public std::runtime_error 29 | { 30 | public: 31 | ModbusExceptionDisconnect(const std::string& what_arg) : std::runtime_error(what_arg){}; 32 | }; 33 | 34 | #endif // PILZ_MODBUS_EXCEPTIONS_H 35 | -------------------------------------------------------------------------------- /pilz_control/test/unittest_pilz_joint_trajectory_controller.test: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 26 | 27 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /prbt_moveit_config/launch/trapezoidal_command_planner_planning_pipeline.launch.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /prbt_moveit_config/launch/pilz_industrial_motion_planner_planning_pipeline.launch.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /pilz_status_indicator_rqt/CHANGELOG.rst: -------------------------------------------------------------------------------- 1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2 | Changelog for package pilz_status_indicator_rqt 3 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 4 | 5 | 0.6.0 (2021-04-19) 6 | ------------------ 7 | * Ports the driver to noetic. Includes moveing the trajectory planner to moveit 8 | * changes the references of the pilz_command_planner to the pilz_industrial_command_planner in moveit 9 | * fixes compatibility with ubuntu 20, noetic and colcon 10 | * changes CI to noetic and ubuntu 20 11 | * Contributors: Pilz GmbH and Co. KG 12 | 13 | 0.5.21 (2020-11-23) 14 | ------------------- 15 | * Update references to OperationMode msg and GetOperationMode srv (moved to pilz_msgs) 16 | * Contributors: Pilz GmbH and Co. KG 17 | 18 | 0.5.20 (2020-11-17) 19 | ------------------- 20 | * Update package.xml for python 3 21 | * Contributors: Pilz GmbH and Co. KG 22 | 23 | 0.5.19 (2020-09-07) 24 | ------------------- 25 | * Hide currently unsupported ui elements 26 | * Contributors: Pilz GmbH and Co. KG 27 | 28 | 0.5.18 (2020-07-02) 29 | ------------------- 30 | 31 | 0.5.17 (2020-06-22) 32 | ------------------- 33 | 34 | 0.5.16 (2020-05-15) 35 | ------------------- 36 | 37 | 0.5.15 (2020-05-03) 38 | ------------------- 39 | 40 | 0.5.14 (2020-03-11) 41 | ------------------- 42 | * Adds basic view for operation_mode, status, speed 43 | * Contributors: Pilz GmbH and Co. KG 44 | -------------------------------------------------------------------------------- /prbt_hardware_support/include/prbt_hardware_support/pilz_modbus_client_exception.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2018 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef PILZ_MODBUS_CLIENT_EXCEPTION_H 19 | #define PILZ_MODBUS_CLIENT_EXCEPTION_H 20 | 21 | #include 22 | 23 | namespace prbt_hardware_support 24 | { 25 | /** 26 | * @brief Expection thrown by prbt_hardware_support::PilzModbusClient 27 | */ 28 | class PilzModbusClientException : public std::runtime_error 29 | { 30 | public: 31 | PilzModbusClientException(const std::string& what_arg) : std::runtime_error(what_arg) 32 | { 33 | } 34 | }; 35 | } // namespace prbt_hardware_support 36 | 37 | #endif // PILZ_MODBUS_CLIENT_EXCEPTION_H 38 | -------------------------------------------------------------------------------- /prbt_hardware_support/test/integration_tests/integrationtest_operation_mode_setup.test: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 26 | 27 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /pilz_control/include/pilz_control/cartesian_speed_monitor_exception.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Pilz GmbH & Co. KG 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | #ifndef PILZ_CONTROL_CARTESIAN_SPEED_MONITOR_EXCEPTION_H 18 | #define PILZ_CONTROL_CARTESIAN_SPEED_MONITOR_EXCEPTION_H 19 | 20 | #include 21 | #include 22 | 23 | namespace pilz_control 24 | { 25 | /** 26 | * @brief Throw this exception when given names do not match the robot model variable names. 27 | */ 28 | class RobotModelVariableNamesMismatch : public std::invalid_argument 29 | { 30 | public: 31 | RobotModelVariableNamesMismatch() 32 | : std::invalid_argument("The given names do not match the robot model variable names.") 33 | { 34 | } 35 | }; 36 | 37 | } // namespace pilz_control 38 | 39 | #endif // PILZ_CONTROL_CARTESIAN_SPEED_MONITOR_EXCEPTION_H 40 | -------------------------------------------------------------------------------- /prbt_ikfast_manipulator_plugin/patches/add-unittests.patch: -------------------------------------------------------------------------------- 1 | Add compilation instructions for test cases and coverage 2 | Index: prbt_ikfast_manipulator_plugin/CMakeLists.txt 3 | =================================================================== 4 | --- prbt_ikfast_manipulator_plugin.orig/CMakeLists.txt 5 | +++ prbt_ikfast_manipulator_plugin/CMakeLists.txt 6 | @@ -45,3 +45,35 @@ install( 7 | DESTINATION 8 | ${CATKIN_PACKAGE_SHARE_DESTINATION} 9 | ) 10 | + 11 | +# unittest of ikfast plugin 12 | +if(CATKIN_ENABLE_TESTING) 13 | + 14 | + find_package(rostest REQUIRED) 15 | + find_package(code_coverage REQUIRED) 16 | + find_package(moveit_ros_planning REQUIRED) 17 | + 18 | + include_directories(include ${catkin_INCLUDE_DIR}) 19 | + 20 | + add_rostest_gtest(unittest_${PROJECT_NAME} 21 | + test/unit_tests/tst_${PROJECT_NAME}.test 22 | + test/unit_tests/tst_${PROJECT_NAME}.cpp 23 | + ) 24 | + 25 | + target_link_libraries(unittest_${PROJECT_NAME} 26 | + ${catkin_LIBRARIES} 27 | + ${moveit_ros_planning_LIBRARIES} 28 | + ) 29 | + 30 | + # run: catkin_make -DENABLE_COVERAGE_TESTING=ON package_name_coverage 31 | + if(ENABLE_COVERAGE_TESTING) 32 | + include(CodeCoverage) 33 | + APPEND_COVERAGE_COMPILER_FLAGS() 34 | + set(COVERAGE_EXCLUDES "*/${PROJECT_NAME}/test*") 35 | + add_code_coverage( 36 | + NAME ${PROJECT_NAME}_coverage 37 | + DEPENDS tests 38 | + ) 39 | + endif() 40 | + 41 | +endif() 42 | -------------------------------------------------------------------------------- /pilz_control/test/unittest_pilz_joint_trajectory_controller_is_executing.test: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /prbt_hardware_support/include/prbt_hardware_support/modbus_adapter_brake_test_exception.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef MODBUS_ADAPTER_BRAKE_TEST_EXCEPTION_H 19 | #define MODBUS_ADAPTER_BRAKE_TEST_EXCEPTION_H 20 | 21 | #include 22 | 23 | namespace prbt_hardware_support 24 | { 25 | /** 26 | * @brief Exception thrown by the ModbusAdapterBrakeTest class. 27 | */ 28 | class ModbusAdapterBrakeTestException : public std::runtime_error 29 | { 30 | public: 31 | ModbusAdapterBrakeTestException(const std::string& what_arg) : std::runtime_error(what_arg) 32 | { 33 | } 34 | }; 35 | } // namespace prbt_hardware_support 36 | 37 | #endif // MODBUS_ADAPTER_BRAKE_TEST_EXCEPTION_H 38 | -------------------------------------------------------------------------------- /prbt_gazebo/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.0.2) 2 | project(prbt_gazebo) 3 | 4 | add_definitions(-std=c++11) 5 | 6 | find_package(catkin REQUIRED COMPONENTS actionlib roscpp trajectory_msgs) 7 | 8 | catkin_package() 9 | 10 | ################ 11 | ## Clang tidy ## 12 | ################ 13 | if(CATKIN_ENABLE_CLANG_TIDY) 14 | find_program( 15 | CLANG_TIDY_EXE 16 | NAMES "clang-tidy" 17 | DOC "Path to clang-tidy executable" 18 | ) 19 | if(NOT CLANG_TIDY_EXE) 20 | message(FATAL_ERROR "clang-tidy not found.") 21 | else() 22 | message(STATUS "clang-tidy found: ${CLANG_TIDY_EXE}") 23 | set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_EXE}") 24 | endif() 25 | endif() 26 | 27 | ############# 28 | ## Install ## 29 | ############# 30 | 31 | ## Install launch and config files 32 | install(DIRECTORY launch DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}) 33 | install(DIRECTORY config DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}) 34 | 35 | ############# 36 | ## Testing ## 37 | ############# 38 | 39 | if(CATKIN_ENABLE_TESTING) 40 | 41 | find_package(rostest REQUIRED) 42 | 43 | include_directories(${catkin_INCLUDE_DIRS}) 44 | 45 | add_rostest_gtest(integrationtest_gazebo_bringup 46 | test/integrationtest_gazebo_bringup.test 47 | test/integrationtest_gazebo_bringup.cpp) 48 | target_link_libraries(integrationtest_gazebo_bringup ${catkin_LIBRARIES}) 49 | 50 | endif() 51 | -------------------------------------------------------------------------------- /prbt_hardware_support/include/prbt_hardware_support/modbus_check_ip_connection.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef MODBUS_SOCKET_CONNECTION_CHECK_H 19 | #define MODBUS_SOCKET_CONNECTION_CHECK_H 20 | 21 | namespace prbt_hardware_support 22 | { 23 | /** 24 | * @brief Test the ip connection by connecting to the modbus server 25 | * 26 | * @param ip of the modbus server 27 | * @param port of the modbus server 28 | * @return true if the connection to the server succeeded 29 | * @return false if the connection to the server failed 30 | */ 31 | bool checkIPConnection(const char* ip, const unsigned int& port); 32 | 33 | } // namespace prbt_hardware_support 34 | 35 | #endif // MODBUS_SOCKET_CONNECTION_CHECK_H 36 | -------------------------------------------------------------------------------- /prbt_support/test/acceptance_tests/acceptance_test_tcp.md: -------------------------------------------------------------------------------- 1 | Copyright © 2018 Pilz GmbH & Co. KG 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. 14 | 15 | --- 16 | 17 | # Acceptance Test TCP 18 | 19 | ## Prerequisites 20 | 21 | ## Test Sequence: 22 | 1. Open the model in rviz `roslaunch prbt_support test_urdf.launch`. 23 | 2. In Rviz display the tf-frames (Add->rviz->tf). 24 | 3. Close everything. 25 | 4. prbt_support/urdf/prbt.xacro 26 | 27 | Edit the lines 28 | ``` 29 | 30 | 31 | ``` 32 | to some desired offset 33 | 5. Open again like before. 34 | 35 | ## Expected Results: 36 | 1. Everything opens with no errors. 37 | 2. You see a tf-frame named: "[robotname]_tcp". 38 | 3. - 39 | 4. - 40 | 5. Check that the tcp frame now has the desired offset from its preceiding frame. 41 | 42 | 43 | --- 44 | -------------------------------------------------------------------------------- /prbt_support/src/system_info_node.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #include 19 | #include 20 | 21 | using namespace prbt_support; 22 | 23 | /** 24 | * @brief Logs important system information. 25 | */ 26 | // LCOV_EXCL_START 27 | int main(int argc, char** argv) 28 | { 29 | ros::init(argc, argv, "system_info"); 30 | ros::NodeHandle nh{ "~" }; 31 | 32 | prbt_support::SystemInfo system_info(nh); 33 | FirmwareCont versions{ system_info.getFirmwareVersions() }; 34 | for (const auto& curr_elem : versions) 35 | { 36 | ROS_INFO("Firmware version [%s]: %s", curr_elem.first.c_str(), curr_elem.second.c_str()); 37 | } 38 | return EXIT_SUCCESS; 39 | } 40 | // LCOV_EXCL_STOP 41 | -------------------------------------------------------------------------------- /prbt_moveit_config/launch/ompl_planning_pipeline.launch.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 14 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /prbt_moveit_config/test/integrationtest_prbt_ikfast_manipulator_plugin.test: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | [prbt_joint_1, prbt_joint_2, prbt_joint_3, prbt_joint_4, prbt_joint_5, prbt_joint_6] 14 | 15 | 17 | 18 | 19 | 20 | 21 | [prbt_joint_1, prbt_joint_2, prbt_joint_3, prbt_joint_4, prbt_joint_5, prbt_joint_6] 22 | 23 | 24 | -------------------------------------------------------------------------------- /prbt_support/config/manipulator_driver.yaml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright © 2018 Pilz GmbH & Co. KG 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | 16 | # FILE DESCRIPTION: 17 | # 18 | # This file mappes the robot joints to the corresponding CAN-IDs. In this file 19 | # only the robot joints are considered (no gripper joint). 20 | # 21 | 22 | name: manipulator 23 | 24 | bus: 25 | device: can0 26 | sync: 27 | interval_ms: 10 28 | overflow: 0 29 | 30 | defaults: 31 | eds_pkg: prbt_support 32 | eds_file: "config/prbt_0_1.dcf" 33 | 34 | nodes: 35 | prbt_joint_1: 36 | id: 3 37 | braketest_required: true 38 | prbt_joint_2: 39 | id: 4 40 | braketest_required: true 41 | prbt_joint_3: 42 | id: 5 43 | braketest_required: true 44 | prbt_joint_4: 45 | id: 6 46 | braketest_required: true 47 | prbt_joint_5: 48 | id: 7 49 | braketest_required: true 50 | prbt_joint_6: 51 | id: 8 52 | braketest_required: true 53 | -------------------------------------------------------------------------------- /prbt_hardware_support/src/modbus_adapter_operation_mode_node.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #include 19 | 20 | #include 21 | #include 22 | 23 | /** 24 | * @brief Starts a modbus operation mode adapter and runs it until a failure occurs. 25 | */ 26 | int main(int argc, char** argv) 27 | { 28 | ros::init(argc, argv, "modbus_adapter_operation_mode"); 29 | ros::NodeHandle pnh{ "~" }; 30 | ros::NodeHandle nh{}; 31 | 32 | prbt_hardware_support::ModbusApiSpec api_spec(nh); 33 | 34 | prbt_hardware_support::ModbusAdapterOperationMode adapter_operation_mode(pnh, api_spec); 35 | 36 | ros::spin(); 37 | 38 | return EXIT_FAILURE; 39 | } 40 | -------------------------------------------------------------------------------- /prbt_hardware_support/include/prbt_hardware_support/modbus_msg_wrapper_exception.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef MODBUS_MSG_WRAPPER_EXCEPTION_H 19 | #define MODBUS_MSG_WRAPPER_EXCEPTION_H 20 | 21 | #include 22 | #include 23 | 24 | namespace prbt_hardware_support 25 | { 26 | /** 27 | * @brief Expection thrown upon construction of ModbusMsgWrapperBase 28 | * of the message does not contain the required information. 29 | * 30 | */ 31 | class ModbusMsgWrapperException : public std::runtime_error 32 | { 33 | public: 34 | ModbusMsgWrapperException(const std::string& what_arg) : std::runtime_error(what_arg) 35 | { 36 | } 37 | }; 38 | 39 | } // namespace prbt_hardware_support 40 | 41 | #endif // MODBUS_MSG_WRAPPER_EXCEPTION_H 42 | -------------------------------------------------------------------------------- /prbt_hardware_support/test/config/speed_observer_test.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 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 | -------------------------------------------------------------------------------- /pilz_control/src/pilz_joint_trajectory_controller.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2018 Pilz GmbH & Co. KG 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | // Pluginlib 18 | #include 19 | 20 | // Project 21 | #include 22 | #include 23 | 24 | namespace position_controllers 25 | { 26 | /** 27 | * \brief Joint trajectory controller that represents trajectory segments as quintic splines and sends 28 | * commands to a \b position interface. 29 | */ 30 | typedef pilz_joint_trajectory_controller::PilzJointTrajectoryController< 31 | trajectory_interface::QuinticSplineSegment, hardware_interface::PositionJointInterface> 32 | PilzJointTrajectoryController; 33 | 34 | } // namespace position_controllers 35 | 36 | PLUGINLIB_EXPORT_CLASS(position_controllers::PilzJointTrajectoryController, controller_interface::ControllerBase) 37 | -------------------------------------------------------------------------------- /prbt_hardware_support/msg/BrakeTestErrorCodes.msg: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2019 Pilz GmbH & Co. KG 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Lesser General Public License as published by 6 | # the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Lesser General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Lesser General Public License 15 | # along with this program. If not, see . 16 | 17 | int8 value 18 | 19 | # values of CANopen object brake_test_status, see 20 | # https://www.pilz.com/download/open/PRBT_6_Operat_Manual_1004685-EN-02.pdf (p.100) 21 | int8 STATUS_UNKNOWN = 0 22 | int8 STATUS_PERFORMING = 1 23 | int8 STATUS_SUCCESS = 2 24 | int8 STATUS_NO_SUCCESS = 3 25 | int8 STATUS_NO_CONTROL = 4 26 | 27 | # service call failures 28 | int8 TRIGGER_BRAKETEST_SERVICE_FAILURE = 50 29 | int8 GET_NODE_NAMES_FAILURE = 51 30 | int8 GET_DURATION_FAILURE = 52 31 | int8 GET_STATUS_FAILURE = 53 32 | int8 START_BRAKE_TEST_FAILURE = 54 33 | 34 | # other reasons for blocking the execution of brake tests 35 | int8 BRAKETEST_ALREADY_EXECUTING = 70 36 | int8 ROBOT_MOTION_DETECTED = 71 37 | 38 | # other 39 | int8 FAILURE = 99 40 | -------------------------------------------------------------------------------- /prbt_hardware_support/test/unit_tests/unittest_pilz_modbus_exception.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2018 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #include 19 | #include 20 | #include 21 | 22 | #include 23 | 24 | namespace pilz_modbus_exception_test 25 | { 26 | /** 27 | * @brief Test message setting 28 | */ 29 | TEST(PilzModbusExceptionTests, testMsgWhat) 30 | { 31 | const std::string test_string{ "TEST_STRING" }; 32 | std::shared_ptr exception(new ModbusExceptionDisconnect(test_string)); 33 | EXPECT_EQ(test_string, exception->what()); 34 | } 35 | 36 | } // namespace pilz_modbus_exception_test 37 | 38 | int main(int argc, char* argv[]) 39 | { 40 | testing::InitGoogleTest(&argc, argv); 41 | return RUN_ALL_TESTS(); 42 | } 43 | -------------------------------------------------------------------------------- /prbt_moveit_config/launch/trajectory_execution.launch.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /prbt_hardware_support/test/unit_tests/unittest_utils.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #include 19 | 20 | #include 21 | #include 22 | 23 | using namespace prbt_hardware_support; 24 | 25 | namespace test_namespace 26 | { 27 | class TestClass 28 | { 29 | }; 30 | } // namespace test_namespace 31 | 32 | /** 33 | * @brief Test the function turning a given instance into a string of its classname 34 | */ 35 | TEST(ClassNameTest, testGettingClassName) 36 | { 37 | test_namespace::TestClass test_instance; 38 | auto full_name = boost::core::demangle(typeid(test_instance).name()); 39 | EXPECT_EQ("TestClass", className(full_name)); 40 | } 41 | 42 | int main(int argc, char* argv[]) 43 | { 44 | testing::InitGoogleTest(&argc, argv); 45 | return RUN_ALL_TESTS(); 46 | } 47 | -------------------------------------------------------------------------------- /prbt_ikfast_manipulator_plugin/patches/drop-lapack.patch: -------------------------------------------------------------------------------- 1 | Drop unused lapack dependency 2 | Index: prbt_ikfast_manipulator_plugin/CMakeLists.txt 3 | =================================================================== 4 | --- prbt_ikfast_manipulator_plugin.orig/CMakeLists.txt 5 | +++ prbt_ikfast_manipulator_plugin/CMakeLists.txt 6 | @@ -23,7 +23,6 @@ find_package(catkin REQUIRED COMPONENTS 7 | tf2_eigen 8 | eigen_conversions 9 | ) 10 | -find_package(LAPACK REQUIRED) 11 | 12 | include_directories(${catkin_INCLUDE_DIRS} include) 13 | 14 | @@ -31,7 +30,7 @@ catkin_package() 15 | 16 | set(IKFAST_LIBRARY_NAME prbt_manipulator_moveit_ikfast_plugin) 17 | add_library(${IKFAST_LIBRARY_NAME} src/prbt_manipulator_ikfast_moveit_plugin.cpp) 18 | -target_link_libraries(${IKFAST_LIBRARY_NAME} ${catkin_LIBRARIES} ${Boost_LIBRARIES} ${LAPACK_LIBRARIES}) 19 | +target_link_libraries(${IKFAST_LIBRARY_NAME} ${catkin_LIBRARIES} ${Boost_LIBRARIES}) 20 | # suppress warnings about unused variables in OpenRave's solver code 21 | target_compile_options(${IKFAST_LIBRARY_NAME} PRIVATE -Wno-unused-variable) 22 | 23 | Index: prbt_ikfast_manipulator_plugin/package.xml 24 | =================================================================== 25 | --- prbt_ikfast_manipulator_plugin.orig/package.xml 26 | +++ prbt_ikfast_manipulator_plugin/package.xml 27 | @@ -31,6 +31,4 @@ 28 | rostest 29 | rosunit 30 | code_coverage 31 | - liblapack-dev 32 | - liblapack-dev 33 | 34 | -------------------------------------------------------------------------------- /prbt_support/test/acceptance_tests/acceptance_test_joint_limits.md: -------------------------------------------------------------------------------- 1 | Copyright © 2018 Pilz GmbH & Co. KG 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. 14 | 15 | --- 16 | 17 | # Acceptance Test Joint Limits using the real robot 18 | 19 | ## Prerequisites 20 | - Properly connect and startup the robot. Make sure an emergency stop is within reach and the operation mode is T1. 21 | - Note that the robot will try to move exactly to the limits of each joint. Make sure that collisions are avoided or 22 | skip the test for certain joints. 23 | 24 | ## Starting the joint limit acceptance tests 25 | - Run `roslaunch prbt_support robot.launch`. Once the startup is complete press the enabling switch. 26 | - Run `rosrun prbt_support acceptance_test_joint_limits.py`. 27 | - Please note: Each test must be confirmed before it is executed. Confirm by entering `y` or `n` to skip test. 28 | 29 | ## Test descriptions 30 | - The concrete test descriptions consisting of test-summary, test-sequence and expected results can be found in 31 | `acceptance_test_joint_limits.py`. 32 | 33 | --- 34 | -------------------------------------------------------------------------------- /prbt_hardware_support/test/unit_tests/unittest_pilz_modbus_client_exception.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2018 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #include 19 | #include 20 | #include 21 | 22 | #include 23 | 24 | using namespace prbt_hardware_support; 25 | 26 | namespace pilz_modbus_client_exception 27 | { 28 | /** 29 | * @brief Test message setting 30 | */ 31 | TEST(PilzModbusClientExceptionTests, testMsgWhat) 32 | { 33 | const std::string test_string{ "TEST_STRING" }; 34 | std::shared_ptr exception(new PilzModbusClientException(test_string)); 35 | EXPECT_EQ(test_string, exception->what()); 36 | } 37 | 38 | } // namespace pilz_modbus_client_exception 39 | 40 | int main(int argc, char* argv[]) 41 | { 42 | testing::InitGoogleTest(&argc, argv); 43 | return RUN_ALL_TESTS(); 44 | } 45 | -------------------------------------------------------------------------------- /prbt_hardware_support/include/prbt_hardware_support/modbus_msg_brake_test_wrapper_exception.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef MODBUS_MSG_BRAKE_TEST_WRAPPER_EXCEPTION_H 19 | #define MODBUS_MSG_BRAKE_TEST_WRAPPER_EXCEPTION_H 20 | 21 | #include 22 | #include 23 | 24 | namespace prbt_hardware_support 25 | { 26 | /** 27 | * @brief Expection thrown upon construction of ModbusMsgBrakeTestWrapper 28 | * of the message does not contain the required information. 29 | */ 30 | class ModbusMsgBrakeTestWrapperException : public ModbusMsgWrapperException 31 | { 32 | public: 33 | ModbusMsgBrakeTestWrapperException(const std::string& what_arg) : ModbusMsgWrapperException(what_arg) 34 | { 35 | } 36 | }; 37 | 38 | } // namespace prbt_hardware_support 39 | 40 | #endif // MODBUS_MSG_BRAKE_TEST_WRAPPER_EXCEPTION_H 41 | -------------------------------------------------------------------------------- /prbt_hardware_support/test/unit_tests/unittest_filter_pipeline.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #include 19 | 20 | #include 21 | 22 | #include 23 | 24 | namespace prbt_hardware_support 25 | { 26 | /** 27 | * @brief Tests that exception is thrown if empty callback function is 28 | * specified. 29 | */ 30 | TEST(FilterPipelineTest, testEmptyCallbackFunction) 31 | { 32 | { 33 | ros::NodeHandle nh{ "~" }; 34 | FilterPipeline::TCallbackFunc cb; 35 | EXPECT_THROW(FilterPipeline(nh, cb), std::invalid_argument); 36 | } 37 | } 38 | 39 | } // namespace prbt_hardware_support 40 | 41 | int main(int argc, char** argv) 42 | { 43 | ros::init(argc, argv, "unittest_filter_pipeline"); 44 | ros::NodeHandle nh; 45 | 46 | testing::InitGoogleTest(&argc, argv); 47 | return RUN_ALL_TESTS(); 48 | } 49 | -------------------------------------------------------------------------------- /prbt_hardware_support/include/prbt_hardware_support/operation_mode_setup_executor_node_service_calls.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef OPERATION_MODE_SETUP_EXECUTOR_NODE_SERVICE_CALLS_H 19 | #define OPERATION_MODE_SETUP_EXECUTOR_NODE_SERVICE_CALLS_H 20 | 21 | #include 22 | 23 | #include 24 | 25 | namespace prbt_hardware_support 26 | { 27 | template 28 | static bool monitorCartesianSpeedSrv(T& srv_client, const bool active) 29 | { 30 | std_srvs::SetBool srv_msg; 31 | srv_msg.request.data = active; 32 | bool call_success = srv_client.call(srv_msg); 33 | if (!call_success) 34 | { 35 | ROS_ERROR_STREAM("No success calling service: " << srv_client.getService()); 36 | } 37 | return call_success; 38 | } 39 | 40 | } // namespace prbt_hardware_support 41 | 42 | #endif // OPERATION_MODE_SETUP_EXECUTOR_NODE_SERVICE_CALLS_H 43 | -------------------------------------------------------------------------------- /pilz_control/test/robot_mock_node.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Pilz GmbH & Co. KG 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | #include 18 | 19 | #include "robot_mock.h" 20 | 21 | static const std::string CONTROLLER_NS_PARAM_NAME{ "controller_ns_string" }; 22 | static constexpr double UPDATE_PERIOD{ 0.01 }; 23 | 24 | int main(int argc, char** argv) 25 | { 26 | ros::init(argc, argv, "robot_mock"); 27 | 28 | std::string controller_ns; 29 | ros::param::get(CONTROLLER_NS_PARAM_NAME, controller_ns); 30 | ros::NodeHandle nh{ controller_ns }; 31 | 32 | RobotMock robot; 33 | controller_manager::ControllerManager cm(&robot, nh); 34 | 35 | ros::Rate rate(1.0 / UPDATE_PERIOD); 36 | ros::Duration update_period{ UPDATE_PERIOD }; 37 | ros::AsyncSpinner spinner(1); 38 | spinner.start(); 39 | 40 | while (ros::ok()) 41 | { 42 | robot.read(); 43 | cm.update(ros::Time::now(), update_period); 44 | robot.write(update_period); 45 | rate.sleep(); 46 | } 47 | spinner.stop(); 48 | 49 | return 0; 50 | } 51 | -------------------------------------------------------------------------------- /prbt_hardware_support/include/prbt_hardware_support/modbus_msg_operation_mode_wrapper_exception.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef MODBUS_MSG_OPERATION_MODE_WRAPPER_EXCEPTION_H 19 | #define MODBUS_MSG_OPERATION_MODE_WRAPPER_EXCEPTION_H 20 | 21 | #include 22 | #include 23 | 24 | namespace prbt_hardware_support 25 | { 26 | /** 27 | * @brief Expection thrown upon construction of ModbusMsgOperationModeWrapper 28 | * of the message does not contain the required information. 29 | * 30 | */ 31 | class ModbusMsgOperationModeWrapperException : public ModbusMsgWrapperException 32 | { 33 | public: 34 | ModbusMsgOperationModeWrapperException(const std::string& what_arg) : ModbusMsgWrapperException(what_arg) 35 | { 36 | } 37 | }; 38 | 39 | } // namespace prbt_hardware_support 40 | 41 | #endif // MODBUS_MSG_OPERATION_MODE_WRAPPER_EXCEPTION_H 42 | -------------------------------------------------------------------------------- /prbt_hardware_support/src/modbus_msg_run_permitted_wrapper.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #include 19 | 20 | #include 21 | #include 22 | 23 | using namespace prbt_hardware_support; 24 | 25 | ModbusMsgRunPermittedWrapper::ModbusMsgRunPermittedWrapper(const ModbusMsgInStampedConstPtr& modbus_msg_raw, 26 | const ModbusApiSpec& api_spec) 27 | : ModbusMsgWrapper(modbus_msg_raw, api_spec) 28 | { 29 | } 30 | 31 | void ModbusMsgRunPermittedWrapper::checkStructuralIntegrity() const 32 | { 33 | ModbusMsgWrapper::checkStructuralIntegrity(); 34 | 35 | if (!hasRunPermitted()) 36 | { 37 | throw ModbusMsgRunPermittedStatusMissing("Received message does not contain a RUN_PERMITTED status."); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /prbt_ikfast_manipulator_plugin/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.1.3) 2 | project(prbt_ikfast_manipulator_plugin) 3 | 4 | set(CMAKE_CXX_STANDARD 14) 5 | set(CMAKE_CXX_EXTENSIONS OFF) 6 | 7 | add_compile_options(-Wall) 8 | add_compile_options(-Wextra) 9 | add_compile_options(-Wno-unused-parameter) 10 | add_compile_options(-Wno-unused-variable) 11 | add_compile_options(-Werror) 12 | 13 | # enable aligned new in gcc7+ 14 | if(CMAKE_COMPILER_IS_GNUCXX) 15 | if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 7.0) 16 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -faligned-new") 17 | endif() 18 | endif() 19 | 20 | find_package(catkin REQUIRED COMPONENTS 21 | moveit_core 22 | pluginlib 23 | roscpp 24 | tf2_kdl 25 | tf2_eigen 26 | eigen_conversions 27 | ) 28 | 29 | include_directories(${catkin_INCLUDE_DIRS} include) 30 | 31 | catkin_package() 32 | 33 | set(IKFAST_LIBRARY_NAME prbt_manipulator_moveit_ikfast_plugin) 34 | add_library(${IKFAST_LIBRARY_NAME} src/prbt_manipulator_ikfast_moveit_plugin.cpp) 35 | target_link_libraries(${IKFAST_LIBRARY_NAME} ${catkin_LIBRARIES} ${Boost_LIBRARIES}) 36 | # suppress warnings about unused variables in OpenRave's solver code 37 | target_compile_options(${IKFAST_LIBRARY_NAME} PRIVATE -Wno-unused-variable) 38 | 39 | install(TARGETS 40 | ${IKFAST_LIBRARY_NAME} 41 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 42 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 43 | RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}) 44 | 45 | install( 46 | FILES 47 | prbt_manipulator_moveit_ikfast_plugin_description.xml 48 | DESTINATION 49 | ${CATKIN_PACKAGE_SHARE_DESTINATION} 50 | ) 51 | -------------------------------------------------------------------------------- /prbt_hardware_support/include/prbt_hardware_support/modbus_msg_run_permitted_wrapper_exception.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef MODBUS_MSG_RUN_PERMITTED_WRAPPER_EXCEPTION_H 19 | #define MODBUS_MSG_RUN_PERMITTED_WRAPPER_EXCEPTION_H 20 | 21 | #include 22 | #include 23 | 24 | #include 25 | 26 | namespace prbt_hardware_support 27 | { 28 | /** 29 | * @brief Expection thrown upon construction of ModbusMsgRunPermittedWrapper if the message 30 | * does not contain the required information. 31 | * 32 | */ 33 | class ModbusMsgRunPermittedStatusMissing : public ModbusMsgWrapperException 34 | { 35 | public: 36 | ModbusMsgRunPermittedStatusMissing(const std::string& what_arg) : ModbusMsgWrapperException(what_arg) 37 | { 38 | } 39 | }; 40 | 41 | } // namespace prbt_hardware_support 42 | 43 | #endif // MODBUS_MSG_RUN_PERMITTED_WRAPPER_EXCEPTION_H 44 | -------------------------------------------------------------------------------- /pilz_control/test/unittest_joint_states_speed_observer.test: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 32 | 34 | 35 | -------------------------------------------------------------------------------- /pilz_control/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | pilz_control 4 | 0.6.0 5 | 6 | This package provides a specialized joint_trajectory_controller that can be moved into holding state via service call. 7 | No further trajectories will be accepted/followed in this state. 8 | 9 | 10 | http://ros.org/wiki/pilz_control 11 | https://github.com/PilzDE/pilz_robots/issues 12 | https://github.com/PilzDE/pilz_robots 13 | 14 | Immanuel Martini 15 | 16 | Apache 2.0 17 | 18 | catkin 19 | 20 | cmake_modules 21 | roslint 22 | 23 | roscpp 24 | joint_trajectory_controller 25 | std_srvs 26 | controller_manager 27 | controller_interface 28 | moveit_core 29 | moveit_ros_planning 30 | pilz_msgs 31 | 32 | rostest 33 | rosunit 34 | code_coverage 35 | geometry_msgs 36 | tf2 37 | tf2_geometry_msgs 38 | pilz_utils 39 | pilz_testutils 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /prbt_moveit_config/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | prbt_moveit_config 4 | 0.6.0 5 | 6 | An automatically generated package with all the configuration and launch files for using the prbt with the MoveIt! Motion Planning Framework 7 | 8 | 9 | Immanuel Martini 10 | 11 | Apache 2.0 12 | 13 | https://wiki.ros.org/prbt_moveit_config 14 | https://github.com/PilzDE/pilz_robots/issues 15 | https://github.com/PilzDE/pilz_robots 16 | 17 | catkin 18 | 19 | moveit_ros_move_group 20 | moveit_kinematics 21 | moveit_planners_ompl 22 | moveit_ros_visualization 23 | moveit_fake_controller_manager 24 | moveit_simple_controller_manager 25 | joint_state_publisher 26 | robot_state_publisher 27 | xacro 28 | rviz 29 | prbt_support 30 | prbt_ikfast_manipulator_plugin 31 | prbt_hardware_support 32 | 33 | roslaunch 34 | moveit_core 35 | moveit_ros_planning 36 | pluginlib 37 | roscpp 38 | rostest 39 | rosunit 40 | 41 | 42 | -------------------------------------------------------------------------------- /pilz_control/README.md: -------------------------------------------------------------------------------- 1 | # Overview 2 | This package provides a joint trajectory controller which can be put into a holding mode through a service call. 3 | It contains a specialized version of `ros_controllers::JointTrajectoryController` providing the holding mode functionality. 4 | A controlled stop using a hold trajectory is performed thus stopping the manipulator without the mechanical stress of a hard brake. 5 | 6 | **Topic interface deprecated:** 7 | Due to safety reasons, the command interface of the `PilzJointTrajectoryController` is deactivated. For more information 8 | see issue [#493](https://github.com/ros-controls/ros_controllers/issues/493) on ros-controls/ros_controllers. 9 | 10 | ## Speed monitoring 11 | The controller can perform a speed monitoring of the robot links in cartesian space. If one or more robot links move faster than 250 mm/s, a controlled stop is executed. This is a requirement in operation mode T1 from DIN EN ISO 10218-1. See [prbt_hardware_support](https://github.com/PilzDE/pilz_robots/blob/melodic-devel/prbt_hardware_support). 12 | 13 | The speed monitoring is activated by default. 14 | 15 | Additionally the controller limits the joint acceleration of the performed trajectories. In the file [manipulator_controller.yaml](https://github.com/PilzDE/pilz_robots/blob/melodic-devel/prbt_support/config/manipulator_controller.yaml) these limits can be adjusted. 16 | 17 | # ROS API 18 | ## Advertised service 19 | - `is_executing` (std_srvs/Trigger) 20 | - Detect if the controller is currently executing a trajectory 21 | - `monitor_cartesian_speed` (std_srvs/SetBool) 22 | - Activate/deactivate speed monitoring 23 | - `hold` (std_srvs/Trigger) 24 | - Switch into holding mode 25 | - `unhold` (std_srvs/Trigger) 26 | - Leave holding mode 27 | -------------------------------------------------------------------------------- /prbt_hardware_support/include/prbt_hardware_support/brake_test_utils_exception.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef PRBT_HARDWARE_SUPPORT_BRAKE_TEST_UTILS_EXCEPTION_H 19 | #define PRBT_HARDWARE_SUPPORT_BRAKE_TEST_UTILS_EXCEPTION_H 20 | 21 | #include 22 | 23 | namespace prbt_hardware_support 24 | { 25 | /** 26 | * @brief Exception thrown by a BrakeTestUtils function. 27 | */ 28 | class BrakeTestUtilsException : public std::runtime_error 29 | { 30 | public: 31 | BrakeTestUtilsException(const std::string& what_arg) : std::runtime_error(what_arg) 32 | { 33 | } 34 | }; 35 | 36 | /** 37 | * @brief Expection thrown by BrakeTestUtils::getCurrentJointStates(). 38 | */ 39 | class GetCurrentJointStatesException : public BrakeTestUtilsException 40 | { 41 | public: 42 | GetCurrentJointStatesException(const std::string& what_arg) : BrakeTestUtilsException(what_arg) 43 | { 44 | } 45 | }; 46 | } // namespace prbt_hardware_support 47 | 48 | #endif // PRBT_HARDWARE_SUPPORT_BRAKE_TEST_UTILS_EXCEPTION_H 49 | -------------------------------------------------------------------------------- /pilz_control/test/urdf/robot_mock.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 26 | 27 | 28 | 29 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /prbt_support/test/acceptance_tests/acceptance_test_gripper.md: -------------------------------------------------------------------------------- 1 | Copyright © 2018 Pilz GmbH & Co. KG 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. 14 | 15 | --- 16 | 17 | # Acceptance Test Gripper 18 | 19 | ## Prerequisites 20 | 21 | ## Test Sequence: 22 | 1. Open the model in rviz `roslaunch prbt_support test_urdf.launch gripper:=pg70`. 23 | 2. In Rviz display the robot model (Add->rviz->RobotModel). 24 | 3. Move the sliders of the "joint_state_publisher" window. 25 | 4. Close everything. 26 | 5. Open the model in rviz `roslaunch prbt_support test_urdf.launch`. 27 | 6. In Rviz display the robot model (Add->rviz->RobotModel). 28 | 7. Close everything. 29 | 8. Open the model in rviz `roslaunch prbt_support test_urdf.launch`. 30 | 9. In Rviz display the robot model (Add->rviz->RobotModel). 31 | 32 | ## Expected Results: 33 | 1. Everything opens with no errors. A window for a rviz and a window "joint_state_publisher" has appeared. 34 | 2. You see a gripper attached to the end of the robot. 35 | 3. The gripper should move along with the robot in a physical possible manner. 36 | 4. - 37 | 5. Everything opens with no errors. 38 | 6. You don't see the gripper anymore. 39 | 7. - 40 | 8. Everything opens with no errors. 41 | 9. You don't see the gripper anymore. 42 | 43 | --- 44 | -------------------------------------------------------------------------------- /prbt_hardware_support/include/prbt_hardware_support/canopen_braketest_adapter_exception.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef PRBT_HARDWARE_SUPPORT_CANOPEN_BRAKETEST_ADAPTER_EXCEPTION_H 19 | #define PRBT_HARDWARE_SUPPORT_CANOPEN_BRAKETEST_ADAPTER_EXCEPTION_H 20 | 21 | #include 22 | 23 | #include 24 | 25 | namespace prbt_hardware_support 26 | { 27 | /** 28 | * @brief Exception thrown by the CANOpenBrakeTestAdapter. 29 | */ 30 | class CANOpenBrakeTestAdapterException : public std::runtime_error 31 | { 32 | public: 33 | CANOpenBrakeTestAdapterException(const std::string& what_arg, 34 | const int8_t error_value = BrakeTestErrorCodes::FAILURE); 35 | 36 | public: 37 | int8_t getErrorValue() const; 38 | 39 | private: 40 | int8_t error_value_; 41 | }; 42 | 43 | inline int8_t CANOpenBrakeTestAdapterException::getErrorValue() const 44 | { 45 | return error_value_; 46 | } 47 | 48 | } // namespace prbt_hardware_support 49 | 50 | #endif // PRBT_HARDWARE_SUPPORT_CANOPEN_BRAKETEST_ADAPTER_EXCEPTION_H 51 | -------------------------------------------------------------------------------- /prbt_hardware_support/test/unit_tests/unittest_modbus_msg_in_builder.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #include 19 | #include 20 | 21 | #include 22 | 23 | #include 24 | 25 | namespace pilz_modbus_msg_in_utils_test 26 | { 27 | using namespace prbt_hardware_support; 28 | 29 | /** 30 | * @brief Tests that exception is thrown if the register container size 31 | * exceeds the size allowed by the std_msgs::MultiArrayLayout class. 32 | */ 33 | TEST(ModbusMsgInBuilderTest, testOutOfRangeRegister) 34 | { 35 | std::unique_ptr layout{ new std_msgs::MultiArrayLayout() }; 36 | const RegCont::size_type n{ 37 | static_cast(std::numeric_limits::max()) + 1 38 | }; 39 | EXPECT_THROW(ModbusMsgInBuilder::setDefaultLayout(layout.get(), 1, n), std::invalid_argument); 40 | } 41 | 42 | } // namespace pilz_modbus_msg_in_utils_test 43 | 44 | int main(int argc, char* argv[]) 45 | { 46 | testing::InitGoogleTest(&argc, argv); 47 | return RUN_ALL_TESTS(); 48 | } 49 | -------------------------------------------------------------------------------- /prbt_hardware_support/test/include/prbt_hardware_support/pilz_modbus_client_mock.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2018 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef PRBT_HARDWARE_SUPPORT_PILZ_MODBUS_SERVER_MOCK_H 19 | #define PRBT_HARDWARE_SUPPORT_PILZ_MODBUS_SERVER_MOCK_H 20 | 21 | #include 22 | 23 | #include 24 | 25 | /** 26 | * @brief Mock used in the unittest of the PilzModbusClient 27 | */ 28 | 29 | class PilzModbusClientMock : public prbt_hardware_support::ModbusClient 30 | { 31 | public: 32 | MOCK_METHOD2(init, bool(const char* ip, unsigned int port)); 33 | MOCK_METHOD0(connect, void()); 34 | MOCK_METHOD1(setResponseTimeoutInMs, void(unsigned long timeout_ms)); 35 | MOCK_METHOD2(readHoldingRegister, std::vector(int addr, int nb)); 36 | MOCK_METHOD4(writeReadHoldingRegister, 37 | std::vector(const int write_addr, const std::vector& write_reg, const int read_addr, 38 | const int read_nb)); 39 | MOCK_METHOD0(getResponseTimeoutInMs, unsigned long()); 40 | }; 41 | 42 | #endif // PRBT_HARDWARE_SUPPORT_PILZ_MODBUS_SERVER_MOCK_H 43 | -------------------------------------------------------------------------------- /prbt_moveit_config/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.0.2) 2 | project(prbt_moveit_config) 3 | 4 | add_compile_options(-Wall) 5 | add_compile_options(-Wextra) 6 | add_compile_options(-Wno-unused-parameter) 7 | add_compile_options(-Wno-unused-variable) 8 | add_compile_options(-Werror) 9 | 10 | find_package(catkin REQUIRED COMPONENTS) 11 | 12 | catkin_package() 13 | 14 | install(DIRECTORY launch DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 15 | PATTERN "setup_assistant.launch" EXCLUDE) 16 | install(DIRECTORY config DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}) 17 | 18 | if (CATKIN_ENABLE_TESTING) 19 | find_package(roslaunch REQUIRED) 20 | find_package(Eigen3 REQUIRED) 21 | find_package(moveit_core REQUIRED) 22 | find_package(moveit_ros_planning REQUIRED) 23 | find_package(pluginlib REQUIRED) 24 | find_package(roscpp REQUIRED) 25 | find_package(rostest REQUIRED) 26 | 27 | include_directories(SYSTEM ${EIGEN3_INCLUDE_DIRS}) 28 | include_directories(${roscpp_INCLUDE_DIRS}) 29 | 30 | if (CATKIN_ENABLE_CLANG_TIDY) 31 | find_program( 32 | CLANG_TIDY_EXE 33 | NAMES "clang-tidy" 34 | DOC "Path to clang-tidy executable" 35 | ) 36 | if(NOT CLANG_TIDY_EXE) 37 | message(FATAL_ERROR "clang-tidy not found.") 38 | else() 39 | message(STATUS "clang-tidy found: ${CLANG_TIDY_EXE}") 40 | set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_EXE}") 41 | endif() 42 | endif() 43 | 44 | add_rostest_gtest(integrationtest_prbt_ikfast_manipulator_plugin 45 | test/integrationtest_prbt_ikfast_manipulator_plugin.test 46 | test/integrationtest_prbt_ikfast_manipulator_plugin.cpp 47 | ) 48 | target_link_libraries(integrationtest_prbt_ikfast_manipulator_plugin 49 | ${catkin_LIBRARIES} 50 | ${moveit_ros_planning_LIBRARIES} 51 | ) 52 | 53 | roslaunch_add_file_check(launch/moveit_planning_execution.launch) 54 | endif() 55 | -------------------------------------------------------------------------------- /prbt_hardware_support/include/prbt_hardware_support/modbus_api_definitions.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2018 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef MODBUS_API_DEFINITIONS_H 19 | #define MODBUS_API_DEFINITIONS_H 20 | 21 | #include 22 | 23 | namespace prbt_hardware_support 24 | { 25 | namespace modbus_api 26 | { 27 | namespace v3 28 | { 29 | static constexpr uint16_t MODBUS_API_VERSION_REQUIRED{ 3 }; 30 | 31 | static constexpr uint16_t MODBUS_BRAKE_TEST_PASSED{ 2 }; 32 | static constexpr uint16_t MODBUS_BRAKE_TEST_NOT_PASSED{ 1 }; 33 | static constexpr uint16_t MODBUS_BRAKE_TEST_PERFORMED{ 2 }; 34 | static constexpr uint16_t MODBUS_BRAKE_TEST_NOT_PERFORMED{ 1 }; 35 | 36 | static constexpr uint16_t MODBUS_OPERATION_MODE_NONE{ 0 }; 37 | static constexpr uint16_t MODBUS_OPERATION_MODE_T1{ 1 }; 38 | static constexpr uint16_t MODBUS_OPERATION_MODE_T2{ 2 }; 39 | static constexpr uint16_t MODBUS_OPERATION_MODE_AUTO{ 3 }; 40 | 41 | static constexpr uint16_t MODBUS_RUN_PERMITTED_TRUE{ 1 }; 42 | static constexpr uint16_t MODBUS_RUN_PERMITTED_FALSE{ 0 }; 43 | } // namespace v3 44 | } // namespace modbus_api 45 | 46 | } // namespace prbt_hardware_support 47 | #endif // MODBUS_API_DEFINITIONS_H 48 | -------------------------------------------------------------------------------- /prbt_hardware_support/include/prbt_hardware_support/param_names.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2018 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef PRBT_HARDWARE_SUPPORT_PARAM_NAMES_H 19 | #define PRBT_HARDWARE_SUPPORT_PARAM_NAMES_H 20 | 21 | #include 22 | 23 | namespace prbt_hardware_support 24 | { 25 | static const std::string PARAM_MODBUS_SERVER_IP_STR{ "modbus_server_ip" }; 26 | static const std::string PARAM_MODBUS_SERVER_PORT_STR{ "modbus_server_port" }; 27 | static const std::string PARAM_MODBUS_RESPONSE_TIMEOUT_STR{ "modbus_response_timeout" }; 28 | static const std::string PARAM_MODBUS_READ_TOPIC_NAME_STR{ "modbus_read_topic_name" }; 29 | static const std::string PARAM_MODBUS_WRITE_SERVICE_NAME_STR{ "modbus_write_service_name" }; 30 | static const std::string PARAM_INDEX_OF_FIRST_REGISTER_TO_READ_STR{ "index_of_first_register_to_read" }; 31 | static const std::string PARAM_NUM_REGISTERS_TO_READ_STR{ "num_registers_to_read" }; 32 | static const std::string PARAM_MODBUS_CONNECTION_RETRIES{ "modbus_connection_retries" }; 33 | static const std::string PARAM_MODBUS_CONNECTION_RETRY_TIMEOUT{ "modbus_connection_retry_timeout" }; 34 | 35 | } // namespace prbt_hardware_support 36 | 37 | #endif // PARAM_NAMES_H 38 | -------------------------------------------------------------------------------- /prbt_hardware_support/test/integration_tests/integrationtest_operation_mode.test: -------------------------------------------------------------------------------- 1 | 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 | -------------------------------------------------------------------------------- /prbt_moveit_config/config/joint_limits.yaml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright © 2018 Pilz GmbH & Co. KG 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | 16 | # joint_limits.yaml allows the dynamics properties specified in the URDF to be overwritten or augmented as needed 17 | # Specific joint properties can be changed with the keys [max_position, min_position, max_velocity, max_acceleration] 18 | # Joint limits can be turned off with [has_velocity_limits, has_acceleration_limits] 19 | joint_limits: 20 | prbt_joint_1: 21 | has_velocity_limits: true 22 | max_velocity: 1.57 23 | has_acceleration_limits: true 24 | max_acceleration: 3.49 25 | prbt_joint_2: 26 | has_velocity_limits: true 27 | max_velocity: 1.57 28 | has_acceleration_limits: true 29 | max_acceleration: 3.49 30 | prbt_joint_3: 31 | has_velocity_limits: true 32 | max_velocity: 1.57 33 | has_acceleration_limits: true 34 | max_acceleration: 3.49 35 | prbt_joint_4: 36 | has_velocity_limits: true 37 | max_velocity: 1.57 38 | has_acceleration_limits: true 39 | max_acceleration: 3.49 40 | prbt_joint_5: 41 | has_velocity_limits: true 42 | max_velocity: 1.57 43 | has_acceleration_limits: true 44 | max_acceleration: 3.49 45 | prbt_joint_6: 46 | has_velocity_limits: true 47 | max_velocity: 1.57 48 | has_acceleration_limits: true 49 | max_acceleration: 3.49 50 | -------------------------------------------------------------------------------- /prbt_hardware_support/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | prbt_hardware_support 4 | 0.6.0 5 | Control hardware functions of the PRBT manipulator like RUN_PERMITTED for Stop1 functionality. 6 | 7 | Immanuel Martini 8 | 9 | LGPLv3 10 | 11 | https://wiki.ros.org/prbt_hardware_support 12 | https://github.com/PilzDE/pilz_robots/issues 13 | https://github.com/PilzDE/pilz_robots 14 | 15 | catkin 16 | 17 | canopen_chain_node 18 | roscpp 19 | libmodbus-dev 20 | message_generation 21 | std_msgs 22 | std_srvs 23 | sensor_msgs 24 | message_filters 25 | tf2 26 | tf2_geometry_msgs 27 | tf2_ros 28 | urdf 29 | dynamic_reconfigure 30 | pilz_utils 31 | pilz_msgs 32 | 33 | roscpp 34 | message_runtime 35 | std_msgs 36 | std_srvs 37 | sensor_msgs 38 | pilz_msgs 39 | rosservice 40 | 41 | 42 | rostest 43 | rosunit 44 | cmake_modules 45 | code_coverage 46 | pilz_testutils 47 | 48 | 49 | -------------------------------------------------------------------------------- /prbt_hardware_support/include/prbt_hardware_support/write_modbus_register_call.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef WRITE_MODBUS_REGISTER_CALL_H 19 | #define WRITE_MODBUS_REGISTER_CALL_H 20 | 21 | #include 22 | 23 | #include 24 | #include 25 | 26 | namespace prbt_hardware_support 27 | { 28 | template 29 | static bool writeModbusRegisterCall(T& modbus_service, const uint16_t& start_idx, const RegCont& values) 30 | { 31 | WriteModbusRegister srv; 32 | srv.request.holding_register_block.start_idx = start_idx; 33 | srv.request.holding_register_block.values = values; 34 | 35 | ROS_DEBUG_STREAM("Calling service: " << modbus_service.getService()); 36 | bool call_success = modbus_service.call(srv); 37 | if (!call_success) 38 | { 39 | ROS_ERROR_STREAM("Service call " << modbus_service.getService() << " failed."); 40 | return false; 41 | } 42 | 43 | if (!srv.response.success) 44 | { 45 | ROS_ERROR_STREAM("Writing of modbus register failed."); 46 | return false; 47 | } 48 | 49 | return true; 50 | } 51 | 52 | } // namespace prbt_hardware_support 53 | 54 | #endif // WRITE_MODBUS_REGISTER_CALL_H 55 | -------------------------------------------------------------------------------- /pilz_control/test/robot_mock.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2018 Pilz GmbH & Co. KG 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | #include 18 | 19 | #include "robot_mock.h" 20 | 21 | RobotMock::RobotMock() 22 | { 23 | for (unsigned int i = 0; i < NUM_JOINTS; ++i) 24 | { 25 | std::ostringstream os; 26 | os << JOINT_NAMES.at(i); 27 | hardware_interface::JointStateHandle jnt_state_handle{ os.str(), &(data_.at(i).pos), &(data_.at(i).vel), 28 | &(data_.at(i).eff) }; 29 | hardware_interface::JointHandle jnt_handle{ jnt_state_handle, &(data_.at(i).cmd) }; 30 | pos_jnt_interface_.registerHandle(jnt_handle); 31 | jnt_state_interface_.registerHandle(jnt_handle); 32 | } 33 | 34 | registerInterface(&pos_jnt_interface_); 35 | registerInterface(&jnt_state_interface_); 36 | } 37 | 38 | std::array RobotMock::read() const 39 | { 40 | return data_; 41 | } 42 | 43 | void RobotMock::write(const ros::Duration& period) 44 | { 45 | for (unsigned int i = 0; i < NUM_JOINTS; ++i) 46 | { 47 | data_.at(i).vel = (data_.at(i).cmd - data_.at(i).pos) / period.toSec(); 48 | data_.at(i).pos = data_.at(i).cmd; 49 | } 50 | } 51 | 52 | bool RobotMock::isMoving(const double& eps) const 53 | { 54 | return std::any_of(data_.begin(), data_.end(), [eps](const JointData& data) { return std::abs(data.vel) > eps; }); 55 | } 56 | -------------------------------------------------------------------------------- /prbt_moveit_config/launch/planning_context.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 16 | 17 | 18 | 20 | 21 | 22 | 23 | 24 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /pilz_control/test/config/test_controller.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2018 Pilz GmbH & Co. KG 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | # FILE DESCRIPTION: 16 | # 17 | # This file declares the different controller types which can then be 18 | # instanciated by the controller manager. In this file only controllers 19 | # for the arm are declared (no gripper). 20 | # 21 | # See also: http://wiki.ros.org/joint_trajectory_controller?distro=lunar 22 | # 23 | 24 | ## joint_names 25 | joint_names: 26 | - shoulder_to_right_arm 27 | - shoulder_to_left_arm 28 | 29 | test_joint_state_controller: 30 | type: joint_state_controller/JointStateController 31 | publish_rate: 50 32 | 33 | ## joint trajectory controller 34 | test_joint_trajectory_controller: 35 | type: position_controllers/PilzJointTrajectoryController 36 | joints: 37 | - shoulder_to_right_arm 38 | - shoulder_to_left_arm 39 | constraints: 40 | goal_time: 0.6 41 | stopped_velocity_tolerance: 0.05 42 | shoulder_to_right_arm: {trajectory: 0.157, goal: 0.01} 43 | shoulder_to_left_arm: {trajectory: 0.157, goal: 0.01} 44 | stop_trajectory_duration: 0.2 45 | state_publish_rate: 25 46 | action_monitor_rate: 10 47 | required_drive_mode: 7 48 | limits: 49 | shoulder_to_right_arm: 50 | has_acceleration_limits: true 51 | max_acceleration: 4.0 52 | shoulder_to_left_arm: 53 | has_acceleration_limits: true 54 | max_acceleration: 4.0 55 | -------------------------------------------------------------------------------- /prbt_hardware_support/test/integration_tests/integrationtest_brake_test_required.test: -------------------------------------------------------------------------------- 1 | 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 | -------------------------------------------------------------------------------- /prbt_support/package.xml: -------------------------------------------------------------------------------- 1 | 2 | prbt_support 3 | 0.6.0 4 | Mechanical, kinematic and visual description 5 | of the Pilz light weight arm PRBT. 6 | 7 | Immanuel Martini 8 | 9 | Apache 2.0 10 | 11 | https://wiki.ros.org/prbt_support 12 | https://github.com/PilzDE/pilz_robots/issues 13 | https://github.com/PilzDE/pilz_robots 14 | 15 | catkin 16 | 17 | roscpp 18 | 19 | canopen_chain_node 20 | pilz_utils 21 | roslint 22 | sensor_msgs 23 | 24 | canopen_motor_node 25 | joint_state_controller 26 | robot_state_publisher 27 | topic_tools 28 | rosservice 29 | xacro 30 | controller_manager 31 | pilz_control 32 | pilz_status_indicator_rqt 33 | prbt_hardware_support 34 | 35 | rostest 36 | moveit_core 37 | moveit_ros_planning 38 | cmake_modules 39 | eigen 40 | roslaunch 41 | rviz 42 | joint_state_publisher 43 | prbt_hardware_support 44 | rosunit 45 | code_coverage 46 | pilz_testutils 47 | 48 | -------------------------------------------------------------------------------- /prbt_hardware_support/src/fake_speed_override_node.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #include 19 | 20 | #include 21 | 22 | #include 23 | #include 24 | #include 25 | 26 | std::atomic SPEED_OVERRIDE{ 1.0 }; 27 | 28 | void dynamic_set_speed_override(prbt_hardware_support::FakeSpeedOverrideConfig& config, uint32_t level) 29 | { 30 | ROS_INFO("Reconfigure Request: %f", config.speed_override); 31 | SPEED_OVERRIDE = config.speed_override; 32 | } 33 | 34 | bool getSpeedOverride(pilz_msgs::GetSpeedOverride::Request& /*req*/, pilz_msgs::GetSpeedOverride::Response& res) 35 | { 36 | res.speed_override = SPEED_OVERRIDE; 37 | return true; 38 | } 39 | 40 | int main(int argc, char** argv) 41 | { 42 | ros::init(argc, argv, "fake_speed_override"); 43 | ros::NodeHandle n; 44 | 45 | ros::ServiceServer service = n.advertiseService("/prbt/get_speed_override", getSpeedOverride); 46 | 47 | dynamic_reconfigure::Server server; 48 | dynamic_reconfigure::Server::CallbackType f; 49 | 50 | f = boost::bind(&dynamic_set_speed_override, _1, _2); 51 | server.setCallback(f); 52 | 53 | ros::spin(); 54 | return 0; 55 | } -------------------------------------------------------------------------------- /prbt_hardware_support/test/unit_tests/unittest_modbus_msg_wrapper.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #include 19 | 20 | #include 21 | #include 22 | 23 | #include 24 | #include 25 | #include 26 | #include 27 | 28 | using namespace prbt_hardware_support; 29 | 30 | namespace modbus_msg_wrapper 31 | { 32 | static const ModbusApiSpec TEST_API_SPEC{ { modbus_api_spec::VERSION, 0 } }; 33 | 34 | /** 35 | * @brief Test increases function coverage by ensuring that all Dtor variants 36 | * are called. 37 | */ 38 | TEST(ModbusMsgWrapperTest, testModbusMsgWrapperDtor) 39 | { 40 | uint32_t offset{ 0 }; 41 | const uint16_t modbus_api_version{ 1 }; 42 | RegCont holding_register{ modbus_api_version }; 43 | ModbusMsgInStampedPtr msg{ ModbusMsgInBuilder::createDefaultModbusMsgIn(offset, holding_register) }; 44 | 45 | ModbusMsgInStampedConstPtr msg_const_ptr{ msg }; 46 | std::shared_ptr ex(new ModbusMsgWrapper(msg_const_ptr, TEST_API_SPEC)); 47 | } 48 | 49 | } // namespace modbus_msg_wrapper 50 | 51 | int main(int argc, char* argv[]) 52 | { 53 | testing::InitGoogleTest(&argc, argv); 54 | return RUN_ALL_TESTS(); 55 | } 56 | -------------------------------------------------------------------------------- /pilz_control/test/robot_mock.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Pilz GmbH & Co. KG 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | #ifndef PILZ_CONTROL_ROBOT_MOCK_H 18 | #define PILZ_CONTROL_ROBOT_MOCK_H 19 | 20 | #include 21 | 22 | #include 23 | #include 24 | #include 25 | 26 | constexpr unsigned int NUM_JOINTS{ 2 }; 27 | constexpr std::array JOINT_NAMES = { "shoulder_to_right_arm", "shoulder_to_left_arm" }; 28 | constexpr double JOINT_VELOCITY_EPS{ 0.0001 }; 29 | 30 | struct JointData 31 | { 32 | double pos{ 0.0 }; 33 | double vel{ 0.0 }; 34 | double eff{ 0.0 }; 35 | double cmd{ 0.0 }; 36 | }; 37 | 38 | /** 39 | * @brief The RobotMock used by the unit- and integrationtest of the pilz_joint_trajectory_controller. 40 | * Registers NUM_JOINTS JointStateHandles with the interface to allow interaction with the controller_manager. 41 | */ 42 | class RobotMock : public hardware_interface::RobotHW 43 | { 44 | public: 45 | RobotMock(); 46 | 47 | std::array read() const; 48 | void write(const ros::Duration& period); 49 | 50 | bool isMoving(const double& eps = JOINT_VELOCITY_EPS) const; 51 | 52 | private: 53 | std::array data_{ JointData(), JointData() }; 54 | hardware_interface::PositionJointInterface pos_jnt_interface_; 55 | hardware_interface::JointStateInterface jnt_state_interface_; 56 | }; 57 | 58 | #endif // PILZ_CONTROL_ROBOT_MOCK_H 59 | -------------------------------------------------------------------------------- /pilz_control/test/unittest_hold_mode_listener.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Pilz GmbH & Co. KG 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | #include 18 | #include 19 | #include 20 | #include 21 | 22 | #include 23 | 24 | #include 25 | 26 | namespace pilz_joint_trajectory_controller 27 | { 28 | static constexpr int WAIT_FOR_RESULT_TIMEOUT{ 1 }; 29 | 30 | TEST(HoldModeListenerTest, testWaitAndTrigger) 31 | { 32 | HoldModeListener listener; 33 | 34 | std::future wait_future = std::async(std::launch::async, std::bind(&HoldModeListener::wait, &listener)); 35 | 36 | std::chrono::seconds timeout{ std::chrono::seconds(WAIT_FOR_RESULT_TIMEOUT) }; 37 | EXPECT_EQ(wait_future.wait_for(timeout), std::future_status::timeout); 38 | 39 | listener.triggerListener(); 40 | EXPECT_EQ(wait_future.wait_for(timeout), std::future_status::ready); 41 | } 42 | 43 | TEST(HoldModeListenerTest, testTriggerBeforeWait) 44 | { 45 | HoldModeListener listener; 46 | 47 | listener.triggerListener(); 48 | 49 | std::future wait_future = std::async(std::launch::async, std::bind(&HoldModeListener::wait, &listener)); 50 | 51 | std::chrono::seconds timeout{ std::chrono::seconds(WAIT_FOR_RESULT_TIMEOUT) }; 52 | EXPECT_EQ(wait_future.wait_for(timeout), std::future_status::ready); 53 | } 54 | 55 | } // namespace pilz_joint_trajectory_controller 56 | 57 | int main(int argc, char* argv[]) 58 | { 59 | testing::InitGoogleTest(&argc, argv); 60 | return RUN_ALL_TESTS(); 61 | } 62 | -------------------------------------------------------------------------------- /.clang-format: -------------------------------------------------------------------------------- 1 | --- 2 | BasedOnStyle: Google 3 | AccessModifierOffset: -2 4 | ConstructorInitializerIndentWidth: 2 5 | AlignEscapedNewlinesLeft: false 6 | AlignTrailingComments: true 7 | AllowAllParametersOfDeclarationOnNextLine: false 8 | AllowShortIfStatementsOnASingleLine: false 9 | AllowShortLoopsOnASingleLine: false 10 | AllowShortFunctionsOnASingleLine: None 11 | AllowShortLoopsOnASingleLine: false 12 | AlwaysBreakTemplateDeclarations: true 13 | AlwaysBreakBeforeMultilineStrings: false 14 | BreakBeforeBinaryOperators: false 15 | BreakBeforeTernaryOperators: false 16 | BreakConstructorInitializersBeforeComma: true 17 | BinPackParameters: true 18 | ColumnLimit: 120 19 | ConstructorInitializerAllOnOneLineOrOnePerLine: true 20 | DerivePointerBinding: false 21 | PointerBindsToType: true 22 | ExperimentalAutoDetectBinPacking: false 23 | IndentCaseLabels: true 24 | MaxEmptyLinesToKeep: 1 25 | NamespaceIndentation: None 26 | ObjCSpaceBeforeProtocolList: true 27 | PenaltyBreakBeforeFirstCallParameter: 19 28 | PenaltyBreakComment: 60 29 | PenaltyBreakString: 100 30 | PenaltyBreakFirstLessLess: 1000 31 | PenaltyExcessCharacter: 1000 32 | PenaltyReturnTypeOnItsOwnLine: 70 33 | SpacesBeforeTrailingComments: 2 34 | Cpp11BracedListStyle: false 35 | Standard: Auto 36 | IndentWidth: 2 37 | TabWidth: 2 38 | UseTab: Never 39 | IndentFunctionDeclarationAfterType: false 40 | SpacesInParentheses: false 41 | SpacesInAngles: false 42 | SpaceInEmptyParentheses: false 43 | SpacesInCStyleCastParentheses: false 44 | SpaceAfterControlStatementKeyword: true 45 | SpaceBeforeAssignmentOperators: true 46 | ContinuationIndentWidth: 4 47 | SortIncludes: false 48 | SpaceAfterCStyleCast: false 49 | 50 | # Configure each individual brace in BraceWrapping 51 | BreakBeforeBraces: Custom 52 | 53 | # Control of individual brace wrapping cases 54 | BraceWrapping: { 55 | AfterClass: 'true' 56 | AfterControlStatement: 'true' 57 | AfterEnum : 'true' 58 | AfterFunction : 'true' 59 | AfterNamespace : 'true' 60 | AfterStruct : 'true' 61 | AfterUnion : 'true' 62 | BeforeCatch : 'true' 63 | BeforeElse : 'true' 64 | IndentBraces : 'false' 65 | } 66 | ... 67 | -------------------------------------------------------------------------------- /prbt_support/include/prbt_support/system_info.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef PRBT_SUPPORT_SYSTEM_INFO_H 19 | #define PRBT_SUPPORT_SYSTEM_INFO_H 20 | 21 | #include 22 | 23 | #include 24 | #include 25 | #include 26 | 27 | #include 28 | 29 | namespace prbt_support 30 | { 31 | //! key = joint_name 32 | //! value = firmware version of joint 33 | using FirmwareCont = std::map; 34 | 35 | /** 36 | * @brief Provides easy access to system information which are of importance 37 | * when analyzing bugs. 38 | */ 39 | class SystemInfo 40 | { 41 | public: 42 | SystemInfo(ros::NodeHandle& nh); 43 | 44 | /** 45 | * @returns a container comprised of the firmware version of each joint 46 | * of the robot. 47 | */ 48 | FirmwareCont getFirmwareVersions(); 49 | 50 | /** 51 | * @returns the firmware version of the specified joint. 52 | */ 53 | std::string getFirmwareVersionOfJoint(const std::string& joint_name); 54 | 55 | private: 56 | /** 57 | * @returns the names of all joints/nodes. 58 | */ 59 | static std::vector getNodeNames(const ros::NodeHandle& nh); 60 | 61 | private: 62 | const std::vector joint_names_; 63 | ros::ServiceClient canopen_srv_get_client_; 64 | }; 65 | 66 | } // namespace prbt_support 67 | #endif // PRBT_SUPPORT_SYSTEM_INFO_H 68 | -------------------------------------------------------------------------------- /.github/workflows/industrial_ci_action.yml: -------------------------------------------------------------------------------- 1 | name: CI-Noetic 2 | 3 | on: [push, pull_request] 4 | 5 | env: 6 | ADDITIONAL_DEBS: "clang-tidy libclang-dev" 7 | CATKIN_LINT: true 8 | CMAKE_ARGS: "-DCATKIN_ENABLE_CLANG_TIDY=true" 9 | 10 | jobs: 11 | build_test_main: 12 | name: "Build + Test with Main Repo (http://packages.ros.org/ros/ubuntu)" 13 | runs-on: ubuntu-20.04 14 | steps: 15 | - uses: actions/checkout@v1 16 | - uses: 'ros-industrial/industrial_ci@master' 17 | env: 18 | ROS_REPO: main 19 | ROS_DISTRO: noetic 20 | continue-on-error: true 21 | 22 | build_test_testing: 23 | name: "Build + Test with Testing Repo (http://packages.ros.org/ros-testing/ubuntu)" 24 | runs-on: ubuntu-20.04 25 | steps: 26 | - uses: actions/checkout@v1 27 | - uses: 'ros-industrial/industrial_ci@master' 28 | env: 29 | ROS_REPO: testing 30 | ROS_DISTRO: noetic 31 | 32 | clang-format: 33 | name: "Build + Test with clang format with Testing Repo of noetic (http://packages.ros.org/ros-testing/ubuntu)" 34 | runs-on: ubuntu-20.04 35 | steps: 36 | - uses: actions/checkout@v1 37 | - uses: 'ros-industrial/industrial_ci@master' 38 | env: 39 | ROS_REPO: testing 40 | ROS_DISTRO: noetic 41 | CLANG_FORMAT_CHECK: file 42 | 43 | coverage: 44 | name: "Check coverage with Testing Repo of noetic (http://packages.ros.org/ros-testing/ubuntu)" 45 | runs-on: ubuntu-20.04 46 | steps: 47 | - uses: actions/checkout@v1 48 | - uses: 'ros-industrial/industrial_ci@master' 49 | env: 50 | ROS_REPO: testing 51 | ROS_DISTRO: noetic 52 | ADDITIONAL_DEBS: git 53 | CATKIN_LINT: false 54 | NOT_TEST_BUILD: true 55 | PARALLEL_TESTS: true 56 | AFTER_SCRIPT: 'git clone --depth=1 --branch master https://github.com/PilzDE/industrial_ci_addons.git /industrial_ci_addons && source /industrial_ci_addons/check_coverage.sh && check_coverage pilz_control prbt_hardware_support' 57 | CMAKE_ARGS: '-DENABLE_COVERAGE_TESTING=ON -DCMAKE_BUILD_TYPE=Debug' 58 | -------------------------------------------------------------------------------- /pilz_control/test/integrationtest_pilz_joint_trajectory_controller.test: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 37 | 38 | 40 | 41 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /prbt_hardware_support/test/acceptance_tests/acceptancetest_execute_brake_test.md: -------------------------------------------------------------------------------- 1 | 17 | 18 | # Acceptance Test for the braketest feature 19 | These acceptance tests check that the real robot system reacts to a BrakeTest service call properly. 20 | 21 | ## Prerequisites 22 | - Properly connect and startup the robot and power cabinet containing the PSS4000. 23 | Make sure an emergency stop is within reach. 24 | 25 | ### Test Sequence 26 | 1. Press the acknowledge button. Make sure the green light on the power cabinet is on. 27 | Run `roslaunch prbt_moveit_config moveit_planning_execution.launch sim:=False pipeline:=pilz_industrial_motion_planner` 28 | 2. Run `rosservice call /prbt/brake_test_required` 29 | 3. Run `rosservice call /prbt/execute_braketest` 30 | 4. Try to perform a robot motion via Rviz during the braketest execution 31 | 5. Perform a long robot motion via Rviz and run `rosservice call /prbt/execute_braketest` 32 | 6. Run `rosservice call /prbt/brake_test_required` 33 | ### Expected Results 34 | 1. The robot starts properly and is moveable via Rviz. 35 | 2. Service returns `result: 1` 36 | 3. The brake test is executed for all joints (Multiple *clicks* should be audible). 37 | The service responds with `success: True`. 38 | 4. No robot motion is executed. 39 | 5. No brake test is executed. The service responds with `success: False` and a descriptive error message. 40 | 6. Service returns `result: -1` 41 | -------------------------------------------------------------------------------- /prbt_hardware_support/test/acceptance_tests/acceptancetest_execute_brake_test_with_gripper.md: -------------------------------------------------------------------------------- 1 | 17 | 18 | # Acceptance Test for the braketest feature 19 | These acceptance tests check that the real robot system reacts to a BrakeTest service call properly. 20 | 21 | ## Prerequisites 22 | - Properly connect and startup the robot and power cabinet containing the PSS4000. 23 | Make sure an emergency stop is within reach. 24 | 25 | ### Test Sequence 26 | 1. Press the acknowledge button. Make sure the green light on the power cabinet is on. 27 | Run `roslaunch prbt_moveit_config moveit_planning_execution.launch sim:=False pipeline:=pilz_industrial_motion_planner gripper:=pg70` 28 | 2. Run `rosservice call /prbt/brake_test_required` 29 | 3. Run `rosservice call /prbt/execute_braketest` 30 | 4. Try to perform a robot motion via Rviz during the braketest execution 31 | 5. Perform a long robot motion via Rviz and run `rosservice call /prbt/execute_braketest` 32 | 6. Run `rosservice call /prbt/brake_test_required` 33 | ### Expected Results 34 | 1. The robot starts properly and is moveable via Rviz. 35 | 2. Service returns `result: 1` 36 | 3. The brake test is executed for all joints (Multiple *clicks* should be audible). 37 | The service responds with `success: True`. 38 | 4. No robot motion is executed. 39 | 5. No brake test is executed. The service responds with `success: False` and a descriptive error message. 40 | 6. Service returns `result: -1` 41 | -------------------------------------------------------------------------------- /prbt_hardware_support/include/prbt_hardware_support/libmodbus_client.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2018 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef LIBMODBUS_CLIENT_H 19 | #define LIBMODBUS_CLIENT_H 20 | 21 | #include 22 | 23 | #include 24 | 25 | #include 26 | 27 | namespace prbt_hardware_support 28 | { 29 | /** 30 | * @brief Wrapper around libmodbus, see https://libmodbus.org/ 31 | * 32 | * Used by PilzModbusClient to access a modbus server 33 | */ 34 | class LibModbusClient : public ModbusClient 35 | { 36 | public: 37 | //! @brief See base class. 38 | virtual ~LibModbusClient() override; 39 | 40 | //! @brief See base class. 41 | bool init(const char* ip, unsigned int port) override; 42 | 43 | //! @brief See base class. 44 | void setResponseTimeoutInMs(unsigned long timeout_ms) override; 45 | 46 | //! @brief See base class. 47 | unsigned long getResponseTimeoutInMs() override; 48 | 49 | //! @brief See base class. 50 | RegCont readHoldingRegister(int addr, int nb) override; 51 | 52 | //! @brief See base class. 53 | RegCont writeReadHoldingRegister(const int write_addr, const RegCont& write_reg, const int read_addr, 54 | const int read_nb) override; 55 | 56 | /** 57 | * @brief Close connection with server 58 | */ 59 | void close(); 60 | 61 | private: 62 | modbus_t* modbus_connection_{ nullptr }; 63 | }; 64 | 65 | } // namespace prbt_hardware_support 66 | 67 | #endif // LIBMODBUS_CLIENT_H 68 | -------------------------------------------------------------------------------- /prbt_hardware_support/include/prbt_hardware_support/modbus_adapter_run_permitted.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef MODBUS_ADAPTER_RUN_PERMITTED_H 19 | #define MODBUS_ADAPTER_RUN_PERMITTED_H 20 | 21 | #include 22 | #include 23 | 24 | #include 25 | 26 | #include 27 | #include 28 | 29 | namespace prbt_hardware_support 30 | { 31 | using UpdateRunPermittedFunc = std::function; 32 | 33 | /** 34 | * @brief Listens to the modbus_read topic and reacts to updated RUN_PERMITTED states. 35 | */ 36 | class ModbusAdapterRunPermitted 37 | { 38 | public: 39 | ModbusAdapterRunPermitted(UpdateRunPermittedFunc&& update_run_permitted_func, const ModbusApiSpec& api_spec); 40 | 41 | public: 42 | /** 43 | * @brief Called whenever a new modbus messages arrives. 44 | * 45 | * @note Filters like for example the UpdateFilter can restrict 46 | * the number of incoming messages. 47 | * 48 | * @note A STOP1 is triggered in case: 49 | * - of a disconnect from the modbus server, 50 | * - the modbus message does not contain the expected registers, 51 | * - the modbus API version is incorrect, 52 | * - the RUN_PERMITTED state changes to false. 53 | */ 54 | void modbusMsgCallback(const ModbusMsgInStampedConstPtr& msg_raw); 55 | 56 | private: 57 | const ModbusApiSpec api_spec_; 58 | UpdateRunPermittedFunc update_run_permitted_; 59 | }; 60 | 61 | } // namespace prbt_hardware_support 62 | #endif // MODBUS_ADAPTER_RUN_PERMITTED_H 63 | -------------------------------------------------------------------------------- /pilz_control/test_utils/include/pilz_control/joint_states_speed_observer.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Pilz GmbH & Co. KG 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef PILZ_CONTROL_JOINT_STATES_SPEED_OBSERVER_H 19 | #define PILZ_CONTROL_JOINT_STATES_SPEED_OBSERVER_H 20 | 21 | #include 22 | #include 23 | #include 24 | 25 | #include 26 | 27 | #include 28 | #include 29 | #include 30 | 31 | #include 32 | 33 | namespace pilz_control 34 | { 35 | /** 36 | * @brief Computes frame speeds from joint_states data. 37 | */ 38 | class JointStatesSpeedObserver 39 | { 40 | public: 41 | JointStatesSpeedObserver(const ros::NodeHandle& nh); 42 | 43 | private: 44 | void setupKinematics(); 45 | bool validateLinkNames(); 46 | void jointStatesCallback(const sensor_msgs::JointStateConstPtr& msg); 47 | void publishMaxFrameSpeed(const double& speed); 48 | 49 | private: 50 | ros::NodeHandle nh_; 51 | ros::Subscriber joint_states_sub_; 52 | ros::Publisher max_frame_speed_pub_; 53 | 54 | std::string reference_frame_; 55 | std::vector frames_to_observe_; 56 | ros::Time previous_time_stamp_; 57 | std::map previous_tfs_; 58 | 59 | robot_model_loader::RobotModelLoaderPtr robot_model_loader_; 60 | robot_model::RobotModelPtr kinematic_model_; 61 | robot_state::RobotStatePtr kinematic_state_; // Needed for foward calculations 62 | }; 63 | 64 | } // namespace pilz_control 65 | 66 | #endif // PILZ_CONTROL_JOINT_STATES_SPEED_OBSERVER_H 67 | -------------------------------------------------------------------------------- /prbt_gazebo/CHANGELOG.rst: -------------------------------------------------------------------------------- 1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2 | Changelog for package prbt_gazebo 3 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 4 | 5 | 0.6.0 (2021-04-19) 6 | ------------------ 7 | * Ports the driver to noetic. Includes moveing the trajectory planner to moveit 8 | * changes the references of the pilz_command_planner to the pilz_industrial_command_planner in moveit 9 | * fixes compatibility with ubuntu 20, noetic and colcon 10 | * changes CI to noetic and ubuntu 20 11 | * Contributors: Pilz GmbH and Co. KG 12 | 13 | 0.5.21 (2020-11-23) 14 | ------------------- 15 | 16 | 0.5.20 (2020-11-17) 17 | ------------------- 18 | 19 | 0.5.19 (2020-09-07) 20 | ------------------- 21 | 22 | 0.5.18 (2020-07-02) 23 | ------------------- 24 | 25 | 0.5.17 (2020-06-22) 26 | ------------------- 27 | 28 | 0.5.16 (2020-05-15) 29 | ------------------- 30 | * Update and apply clang-format (#387) 31 | * Contributors: Pilz GmbH and Co. KG 32 | 33 | 0.5.15 (2020-05-03) 34 | ------------------- 35 | 36 | 0.5.14 (2020-03-11) 37 | ------------------- 38 | 39 | 0.5.13 (2019-12-04) 40 | ------------------- 41 | 42 | 0.5.12 (2019-11-28) 43 | ------------------- 44 | 45 | 0.5.11 (2019-11-22) 46 | ------------------- 47 | 48 | 0.5.10 (2019-10-08) 49 | ------------------- 50 | 51 | 0.5.9 (2019-10-07) 52 | ------------------ 53 | 54 | 0.5.8 (2019-09-10) 55 | ------------------ 56 | * integrate clang-tidy via CMake flag 57 | * Contributors: Pilz GmbH and Co. KG 58 | 59 | 0.5.7 (2019-08-29) 60 | ------------------ 61 | 62 | 0.5.6 (2019-06-12) 63 | ------------------ 64 | 65 | 0.5.5 (2019-06-12) 66 | ------------------ 67 | 68 | 0.5.4 (2019-05-27) 69 | ------------------ 70 | 71 | 0.5.3 (2019-04-24) 72 | ------------------ 73 | * Remove rosparam block no longer needed 74 | * Add world_name argument to gazebo launch file. 75 | * Install launch and config folder of prbt_gazebo 76 | * Contributors: Pilz GmbH and Co. KG 77 | 78 | 0.5.2 (2019-02-21) 79 | ------------------ 80 | * With this change the integrationtest loads the blank.world which 81 | has no models. 82 | * Install launch and config files 83 | * Contributors: Pilz GmbH and Co. KG 84 | 85 | 0.4.6 (2019-01-18) 86 | ------------------ 87 | 88 | 0.4.5 (2019-01-16) 89 | ------------------ 90 | 91 | 0.4.4 (2019-01-16) 92 | ------------------ 93 | * Provide prbt_gazebo package 94 | * Contributors: Pilz GmbH and Co. KG 95 | --------------------------------------------------------------------------------