diff --git a/can_filter_chain: b/can_filter_chain: new file mode 100644 index 000000000..c7a7a1ac9 --- /dev/null +++ b/can_filter_chain: @@ -0,0 +1,22718 @@ +diff --git a/cob_bringup/components/cob4_base.launch b/cob_bringup/components/cob4_base.launch +index bedfbac..d496dc1 100644 +--- a/cob_bringup/components/cob4_base.launch ++++ b/cob_bringup/components/cob4_base.launch +@@ -5,6 +5,7 @@ +  +  +  ++  +  +  +  +@@ -14,9 +15,9 @@ +  +  +  +- +  +  ++  +  +  +  +diff --git a/cob_bringup/components/raw3_base.launch b/cob_bringup/components/raw3_base.launch +index 65ea310..2808b69 100644 +--- a/cob_bringup/components/raw3_base.launch ++++ b/cob_bringup/components/raw3_base.launch +@@ -5,6 +5,7 @@ +  +  +  ++  +  +  +  +@@ -19,6 +20,7 @@ +  +  +  ++  +  +  +  +diff --git a/cob_bringup/components/ros_control_base.launch b/cob_bringup/components/ros_control_base.launch +index 36ada43..ba8d37a 100644 +--- a/cob_bringup/components/ros_control_base.launch ++++ b/cob_bringup/components/ros_control_base.launch +@@ -3,6 +3,7 @@ +  +  +  ++  +  +  +  +@@ -37,9 +38,18 @@ +  +  +  +-  +-  +-  ++  ++  ++  ++  ++  ++  ++ ++  ++  ++  ++  ++  +  +  +  +diff --git a/cob_bringup/robot.launch b/cob_bringup/robot.launch +index 0e911fc..2c3c12a 100644 +--- a/cob_bringup/robot.launch ++++ b/cob_bringup/robot.launch +@@ -1,12 +1,16 @@ +  +  +  +-  ++  ++  +  +  ++  +  +  +  ++  ++  +  +  +  +diff --git a/cob_bringup/robots/cob4-18.launch b/cob_bringup/robots/cob4-18.launch +index 0bbd51c..671d45d 100644 +--- a/cob_bringup/robots/cob4-18.launch ++++ b/cob_bringup/robots/cob4-18.launch +@@ -1,11 +1,17 @@ +  +  +  ++  +  ++  +  +  +-  ++  ++  +  ++  ++  ++ +  +  +  +diff --git a/cob_bringup/robots/cob4-18.xml b/cob_bringup/robots/cob4-18.xml +index d4242f2..ee89854 100644 +--- a/cob_bringup/robots/cob4-18.xml ++++ b/cob_bringup/robots/cob4-18.xml +@@ -1,11 +1,11 @@ +  +  +- +  +  +  +  +  ++  +  +  +  +@@ -56,6 +56,7 @@ +  +  +  ++  +  +  +  +diff --git a/cob_bringup/robots/raw3-1.launch b/cob_bringup/robots/raw3-1.launch +index 120c73b..40d20e5 100644 +--- a/cob_bringup/robots/raw3-1.launch ++++ b/cob_bringup/robots/raw3-1.launch +@@ -1,13 +1,14 @@ +  +  +  ++  +  ++  +  +  +-  +-  +-  +  ++  ++  +  +  +  +diff --git a/cob_bringup/robots/raw3-1.xml b/cob_bringup/robots/raw3-1.xml +index 0dff155..b323896 100644 +--- a/cob_bringup/robots/raw3-1.xml ++++ b/cob_bringup/robots/raw3-1.xml +@@ -8,7 +8,7 @@ +  +  +  +-  ++  +  +  +  +@@ -51,6 +51,7 @@ +  +  +  ++  +  +  +  +@@ -61,7 +62,6 @@ +  +  +  +-  +  +  +  +diff --git a/cob_bringup/robots/raw3-3.launch b/cob_bringup/robots/raw3-3.launch +index b22fe8e..712de56 100644 +--- a/cob_bringup/robots/raw3-3.launch ++++ b/cob_bringup/robots/raw3-3.launch +@@ -1,10 +1,14 @@ +  +  +  ++  +  ++  +  +  +  ++  ++  +  +  +- ++ +\ No newline at end of file +diff --git a/cob_bringup/robots/raw3-3.xml b/cob_bringup/robots/raw3-3.xml +index 68fe058..d4e4449 100644 +--- a/cob_bringup/robots/raw3-3.xml ++++ b/cob_bringup/robots/raw3-3.xml +@@ -8,6 +8,7 @@ +  +  +  ++  +  +  +  +@@ -54,6 +55,7 @@ +  +  +  ++  +  +  +  +diff --git a/cob_bringup/tools/base_collision_observer.launch b/cob_bringup/tools/base_collision_observer.launch +index 96b7658..735228c 100644 +--- a/cob_bringup/tools/base_collision_observer.launch ++++ b/cob_bringup/tools/base_collision_observer.launch +@@ -7,10 +7,10 @@ +  +  +  +-  ++  +  +-  +-  ++  ++  +  +  +  +diff --git a/cob_bringup/tools/battery_monitor.launch b/cob_bringup/tools/battery_monitor.launch +index 20e49a8..850d3bf 100644 +--- a/cob_bringup/tools/battery_monitor.launch ++++ b/cob_bringup/tools/battery_monitor.launch +@@ -7,7 +7,6 @@ +  +  +  +-  +  +  +  +diff --git a/cob_bringup/tools/robot_state_publisher.launch b/cob_bringup/tools/robot_state_publisher.launch +index 0773a17..00ce6cb 100644 +--- a/cob_bringup/tools/robot_state_publisher.launch ++++ b/cob_bringup/tools/robot_state_publisher.launch +@@ -3,12 +3,15 @@ +  +  +  ++  +  +-  ++  ++  ++  +  +  +-  +-  ++  ++  +  +  +  +diff --git a/cob_hardware_config/robots/cob4-18/config/base_controller.yaml b/cob_hardware_config/robots/cob4-18/config/base_controller.yaml +new file mode 120000 +index 0000000..6fec99b +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-18/config/base_controller.yaml +@@ -0,0 +1 @@ ++../../cob4/config/cob4_base_controller.yaml +\ No newline at end of file +diff --git a/cob_hardware_config/robots/cob4-18/config/base_laser_filter.yaml b/cob_hardware_config/robots/cob4-18/config/base_laser_filter.yaml +new file mode 100644 +index 0000000..bd5152b +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-18/config/base_laser_filter.yaml +@@ -0,0 +1,7 @@ ++scan_filter_chain: ++ - name: range ++ type: LaserScanRangeFilter ++ params: ++ use_message_range_limits: true ++ upper_threshold: 29.5 ++ upper_replacement_value: 29.5 +diff --git a/cob_hardware_config/robots/cob4-18/config/joint_state_publisher.yaml b/cob_hardware_config/robots/cob4-18/config/joint_state_publisher.yaml +index 3b850ea..9fb44b5 100644 +--- a/cob_hardware_config/robots/cob4-18/config/joint_state_publisher.yaml ++++ b/cob_hardware_config/robots/cob4-18/config/joint_state_publisher.yaml +@@ -1,2 +1,2 @@ + rate: 100 #Hz +-source_list: [/base/joint_states] +\ No newline at end of file ++source_list: [base/joint_states] +\ No newline at end of file +diff --git a/cob_hardware_config/robots/cob4-19/cob4-19.rviz b/cob_hardware_config/robots/cob4-19/cob4-19.rviz +new file mode 120000 +index 0000000..d271133 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/cob4-19.rviz +@@ -0,0 +1 @@ ++../cob4/cob4_base.rviz +\ No newline at end of file +diff --git a/cob_hardware_config/robots/cob4-19/config/base_controller.yaml b/cob_hardware_config/robots/cob4-19/config/base_controller.yaml +new file mode 120000 +index 0000000..e3ab0fc +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/base_controller.yaml +@@ -0,0 +1 @@ ++/home/srd-rd/catkin_ws/src/cob_robots/cob_hardware_config/robots/common/cob4_base_controller.yaml +\ No newline at end of file +diff --git a/cob_hardware_config/robots/cob4-19/config/base_driver.yaml b/cob_hardware_config/robots/cob4-19/config/base_driver.yaml +new file mode 100644 +index 0000000..69bc1b0 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/base_driver.yaml +@@ -0,0 +1,12 @@ ++nodes: ++ fl_caster_rotation_joint: ++ dcf_overlay: # "ObjectID" : "ParameterValue" (both as strings) ++ "607C": "127621.5" # home offset ++ ++ b_caster_rotation_joint: ++ dcf_overlay: # "ObjectID" : "ParameterValue" (both as strings) ++ "607C": "9528.0" # home offset ++ ++ fr_caster_rotation_joint: ++ dcf_overlay: # "ObjectID" : "ParameterValue" (both as strings) ++ "607C": "-108166.0" # home offset +diff --git a/cob_hardware_config/robots/cob4-19/config/base_laser_filter.yaml b/cob_hardware_config/robots/cob4-19/config/base_laser_filter.yaml +new file mode 100644 +index 0000000..bd5152b +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/base_laser_filter.yaml +@@ -0,0 +1,7 @@ ++scan_filter_chain: ++ - name: range ++ type: LaserScanRangeFilter ++ params: ++ use_message_range_limits: true ++ upper_threshold: 29.5 ++ upper_replacement_value: 29.5 +diff --git a/cob_hardware_config/robots/cob4-19/config/base_laser_front.xml b/cob_hardware_config/robots/cob4-19/config/base_laser_front.xml +new file mode 120000 +index 0000000..f9704b5 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/base_laser_front.xml +@@ -0,0 +1 @@ ++../../cob4/config/base_laser_front.xml +\ No newline at end of file +diff --git a/cob_hardware_config/robots/cob4-19/config/base_laser_front.yaml b/cob_hardware_config/robots/cob4-19/config/base_laser_front.yaml +new file mode 120000 +index 0000000..6312c8e +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/base_laser_front.yaml +@@ -0,0 +1 @@ ++../../cob4/config/base_laser_front.yaml +\ No newline at end of file +diff --git a/cob_hardware_config/robots/cob4-19/config/base_laser_left.xml b/cob_hardware_config/robots/cob4-19/config/base_laser_left.xml +new file mode 120000 +index 0000000..c2d18d5 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/base_laser_left.xml +@@ -0,0 +1 @@ ++../../cob4/config/base_laser_left.xml +\ No newline at end of file +diff --git a/cob_hardware_config/robots/cob4-19/config/base_laser_left.yaml b/cob_hardware_config/robots/cob4-19/config/base_laser_left.yaml +new file mode 120000 +index 0000000..04690a3 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/base_laser_left.yaml +@@ -0,0 +1 @@ ++../../cob4/config/base_laser_left.yaml +\ No newline at end of file +diff --git a/cob_hardware_config/robots/cob4-19/config/base_laser_right.xml b/cob_hardware_config/robots/cob4-19/config/base_laser_right.xml +new file mode 120000 +index 0000000..4ad4535 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/base_laser_right.xml +@@ -0,0 +1 @@ ++../../cob4/config/base_laser_right.xml +\ No newline at end of file +diff --git a/cob_hardware_config/robots/cob4-19/config/base_laser_right.yaml b/cob_hardware_config/robots/cob4-19/config/base_laser_right.yaml +new file mode 120000 +index 0000000..dde5468 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/base_laser_right.yaml +@@ -0,0 +1 @@ ++../../cob4/config/base_laser_right.yaml +\ No newline at end of file +diff --git a/cob_hardware_config/robots/cob4-19/config/battery_monitor.yaml b/cob_hardware_config/robots/cob4-19/config/battery_monitor.yaml +new file mode 100644 +index 0000000..dc3b908 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/battery_monitor.yaml +@@ -0,0 +1,7 @@ ++threshold_warning: 20 # % of battery level ++threshold_error: 10 # % of battery level ++threshold_critical: 5 # % of battery level ++ ++enable_light: false ++enable_sound: false ++ +diff --git a/cob_hardware_config/robots/cob4-19/config/bms.yaml b/cob_hardware_config/robots/cob4-19/config/bms.yaml +new file mode 120000 +index 0000000..f487e3f +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/bms.yaml +@@ -0,0 +1 @@ ++../../cob4/config/bms.yaml +\ No newline at end of file +diff --git a/cob_hardware_config/robots/cob4-19/config/collision_velocity_filter_params.yaml b/cob_hardware_config/robots/cob4-19/config/collision_velocity_filter_params.yaml +new file mode 120000 +index 0000000..3ec452a +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/collision_velocity_filter_params.yaml +@@ -0,0 +1 @@ ++../../cob4/config/collision_velocity_filter_params.yaml +\ No newline at end of file +diff --git a/cob_hardware_config/robots/cob4-19/config/diagnostics_analyzers.yaml b/cob_hardware_config/robots/cob4-19/config/diagnostics_analyzers.yaml +new file mode 100644 +index 0000000..98138bf +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/diagnostics_analyzers.yaml +@@ -0,0 +1,64 @@ ++pub_rate: 1.0 # Optional ++base_path: '' # Optional, prepended to all diagnostic output ++analyzers: ++ computers: ++ type: diagnostic_aggregator/AnalyzerGroup ++ path: Computers ++ analyzers: ++ b1: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: b1 ++ contains: '-b1' ++# network: ++# type: diagnostic_aggregator/AnalyzerGroup ++# path: Network ++# analyzers: ++# wifi: ++# type: diagnostic_aggregator/GenericAnalyzer ++# path: wifi ++# num_items: 1 ++# expected: ['Wifi Status (ddwrt)'] ++ ++ io: ++ type: diagnostic_aggregator/AnalyzerGroup ++ path: IO ++ analyzers: ++ joystick: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: Joystick ++ contains: 'joy' ++ ++ sensors: ++ type: diagnostic_aggregator/AnalyzerGroup ++ path: Sensors ++ analyzers: ++ laser_top: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: Scan Front ++ contains: 'laser_front' ++ laser_rear: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: Scan Right ++ contains: 'laser_right' ++ laser_front: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: Scan Left ++ contains: 'laser_left' ++ battery: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: Battery Status ++ contains: 'bms' ++ ++ motors: ++ type: diagnostic_aggregator/AnalyzerGroup ++ path: Actuators ++ analyzers: ++ base: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: Base ++ contains: 'base/' ++ ++ safety: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: Safety ++ contains: 'safety' +diff --git a/cob_hardware_config/robots/cob4-19/config/docking_laser_filter.yaml b/cob_hardware_config/robots/cob4-19/config/docking_laser_filter.yaml +new file mode 120000 +index 0000000..e17f566 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/docking_laser_filter.yaml +@@ -0,0 +1 @@ ++../../cob4/config/docking_laser_filter.yaml +\ No newline at end of file +diff --git a/cob_hardware_config/robots/cob4-19/config/docking_linear_nav.yaml b/cob_hardware_config/robots/cob4-19/config/docking_linear_nav.yaml +new file mode 120000 +index 0000000..c2da1fc +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/docking_linear_nav.yaml +@@ -0,0 +1 @@ ++../../cob4/config/docking_linear_nav.yaml +\ No newline at end of file +diff --git a/cob_hardware_config/robots/cob4-19/config/docking_stations.yaml b/cob_hardware_config/robots/cob4-19/config/docking_stations.yaml +new file mode 120000 +index 0000000..1ef4f7b +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/docking_stations.yaml +@@ -0,0 +1 @@ ++../../cob4/config/docking_stations.yaml +\ No newline at end of file +diff --git a/cob_hardware_config/robots/cob4-19/config/emergency_stop_monitor.yaml b/cob_hardware_config/robots/cob4-19/config/emergency_stop_monitor.yaml +new file mode 100644 +index 0000000..9ffab12 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/emergency_stop_monitor.yaml +@@ -0,0 +1,9 @@ ++enable_light: true ++light_components: ['light_base'] ++color_ok: cyan ++ ++enable_sound: false ++sound_components: ['sound'] ++ ++diagnostics_based: true ++motion_based: true +diff --git a/cob_hardware_config/robots/cob4-19/config/flexisoft.yaml b/cob_hardware_config/robots/cob4-19/config/flexisoft.yaml +new file mode 100644 +index 0000000..3c702c5 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/flexisoft.yaml +@@ -0,0 +1,14 @@ ++port: "9100" # alternative syntax: !!str 9100 ++odometry_timeout: 1.0 ++threshold_linear_slow: 0.4 ++threshold_linear_fast: 0.9 ++threshold_angular_fast: 1.0 ++marker_type: 11 # http://www.ros.org/wiki/rviz/DisplayTypes/Marker, not all are supported ++scale_x: 1.0 ++scale_y: 1.0 ++scale_z: 1.0 ++footprint_angular_slow: [[0.4,0.4], [-0.4,0.4], [-0.4,-0.4], [0.4,-0.4]] ++footprint_angular_fast: [[0.5,0.5], [-0.5,0.5], [-0.5,-0.5], [0.5,-0.5]] ++footprint_linear_slow: [[0.6,0.4], [-0.4,0.4], [-0.4,-0.4], [0.6,-0.4]] ++footprint_linear_fast: [[0.8,0.4], [-0.4,0.4], [-0.4,-0.4], [0.8,-0.4]] ++ +diff --git a/cob_hardware_config/robots/cob4-19/config/footprint_observer_params.yaml b/cob_hardware_config/robots/cob4-19/config/footprint_observer_params.yaml +new file mode 120000 +index 0000000..eb83c5a +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/footprint_observer_params.yaml +@@ -0,0 +1 @@ ++../../cob4/config/footprint_observer_params.yaml +\ No newline at end of file +diff --git a/cob_hardware_config/robots/cob4-19/config/joint_state_publisher.yaml b/cob_hardware_config/robots/cob4-19/config/joint_state_publisher.yaml +new file mode 100644 +index 0000000..9fb44b5 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/joint_state_publisher.yaml +@@ -0,0 +1,2 @@ ++rate: 100 #Hz ++source_list: [base/joint_states] +\ No newline at end of file +diff --git a/cob_hardware_config/robots/cob4-19/config/joy.yaml b/cob_hardware_config/robots/cob4-19/config/joy.yaml +new file mode 120000 +index 0000000..cf1fd49 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/joy.yaml +@@ -0,0 +1 @@ ++../../cob4/config/joy.yaml +\ No newline at end of file +diff --git a/cob_hardware_config/robots/cob4-19/config/light_base.yaml b/cob_hardware_config/robots/cob4-19/config/light_base.yaml +new file mode 120000 +index 0000000..1f02f87 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/light_base.yaml +@@ -0,0 +1 @@ ++../../cob4/config/light_base.yaml +\ No newline at end of file +diff --git a/cob_hardware_config/robots/cob4-19/config/local_costmap_params.yaml b/cob_hardware_config/robots/cob4-19/config/local_costmap_params.yaml +new file mode 120000 +index 0000000..a440aed +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/local_costmap_params.yaml +@@ -0,0 +1 @@ ++../../cob4/config/local_costmap_params.yaml +\ No newline at end of file +diff --git a/cob_hardware_config/robots/cob4-19/config/ntp_monitor.yaml b/cob_hardware_config/robots/cob4-19/config/ntp_monitor.yaml +new file mode 120000 +index 0000000..41b6c29 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/ntp_monitor.yaml +@@ -0,0 +1 @@ ++../../cob4/config/ntp_monitor.yaml +\ No newline at end of file +diff --git a/cob_hardware_config/robots/cob4-19/config/pc_monitor_cob4-18-b1.yaml b/cob_hardware_config/robots/cob4-19/config/pc_monitor_cob4-18-b1.yaml +new file mode 120000 +index 0000000..43d2ce8 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/pc_monitor_cob4-18-b1.yaml +@@ -0,0 +1 @@ ++../../cob4/config/pc_monitor_cob4-b1.yaml +\ No newline at end of file +diff --git a/cob_hardware_config/robots/cob4-19/config/pc_monitor_localhost.yaml b/cob_hardware_config/robots/cob4-19/config/pc_monitor_localhost.yaml +new file mode 120000 +index 0000000..2c1d202 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/pc_monitor_localhost.yaml +@@ -0,0 +1 @@ ++../../cob4/config/pc_monitor_localhost.yaml +\ No newline at end of file +diff --git a/cob_hardware_config/robots/cob4-19/config/scan_unifier_filter.yaml b/cob_hardware_config/robots/cob4-19/config/scan_unifier_filter.yaml +new file mode 120000 +index 0000000..4e20cd0 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/scan_unifier_filter.yaml +@@ -0,0 +1 @@ ++../../cob4/config/scan_unifier_filter.yaml +\ No newline at end of file +diff --git a/cob_hardware_config/robots/cob4-19/config/teleop.yaml b/cob_hardware_config/robots/cob4-19/config/teleop.yaml +new file mode 100644 +index 0000000..70d7ca6 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/teleop.yaml +@@ -0,0 +1,39 @@ ++#cob4-19 ++########## ++# common params ++run_factor: 2.0 ++apply_ramp: false ++joy_num_buttons: 12 ++joy_num_axes: 6 ++joy_num_modes: 4 ++mode_switch_button: 8 ++ ++enable_light: false ++light_action_name: /light_torso/set_light ++enable_sound: false ++sound_action_name: /sound/say ++ ++# axes ++axis_vx: 1 ++axis_vy: 0 ++axis_vz: 5 ++axis_roll: 4 ++axis_pitch: 3 ++axis_yaw: 2 ++ ++# buttons ++deadman_button: 5 ++safety_button: 4 ++init_button: 9 ++ ++#mode1: Base ++run_button: 7 ++ ++components: { ++ base: { ++ twist_topic_name: '/base/twist_mux/command_teleop_joy', ++ twist_safety_topic_name: '/base/collision_velocity_filter/command', ++ twist_max_velocity: [0.3, 0.2, 0.3], ++ twist_max_acc: [0.5, 0.5, 0.7] ++ } ++} +diff --git a/cob_hardware_config/robots/cob4-19/config/twist_mux_locks.yaml b/cob_hardware_config/robots/cob4-19/config/twist_mux_locks.yaml +new file mode 120000 +index 0000000..5a4acfd +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/twist_mux_locks.yaml +@@ -0,0 +1 @@ ++../../cob4/config/twist_mux_locks.yaml +\ No newline at end of file +diff --git a/cob_hardware_config/robots/cob4-19/config/twist_mux_topics.yaml b/cob_hardware_config/robots/cob4-19/config/twist_mux_topics.yaml +new file mode 120000 +index 0000000..28072f1 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/twist_mux_topics.yaml +@@ -0,0 +1 @@ ++../../cob4/config/twist_mux_topics.yaml +\ No newline at end of file +diff --git a/cob_hardware_config/robots/cob4-19/config/velocity_smoother.yaml b/cob_hardware_config/robots/cob4-19/config/velocity_smoother.yaml +new file mode 120000 +index 0000000..5ce45e5 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/config/velocity_smoother.yaml +@@ -0,0 +1 @@ ++../../cob4/config/velocity_smoother.yaml +\ No newline at end of file +diff --git a/cob_hardware_config/robots/cob4-19/urdf/calibration_default.urdf.xacro b/cob_hardware_config/robots/cob4-19/urdf/calibration_default.urdf.xacro +new file mode 100644 +index 0000000..aec33c7 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/urdf/calibration_default.urdf.xacro +@@ -0,0 +1,30 @@ ++ ++ ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++ ++  ++  ++  ++  ++  ++  ++  ++ ++  ++  ++  ++  ++  ++  ++  ++ ++ +diff --git a/cob_hardware_config/robots/cob4-19/urdf/cob4-19.urdf.xacro b/cob_hardware_config/robots/cob4-19/urdf/cob4-19.urdf.xacro +new file mode 100644 +index 0000000..b0c72b6 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/urdf/cob4-19.urdf.xacro +@@ -0,0 +1,32 @@ ++ ++ ++ ++  ++  ++  ++ ++  ++  ++ ++  ++  ++ ++  ++  ++ ++ ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++ ++ +diff --git a/cob_hardware_config/robots/cob4-19/urdf/properties.urdf.xacro b/cob_hardware_config/robots/cob4-19/urdf/properties.urdf.xacro +new file mode 100644 +index 0000000..bbbc362 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19/urdf/properties.urdf.xacro +@@ -0,0 +1,33 @@ ++ ++ ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++ ++  ++  ++  ++  ++  ++  ++  ++ ++  ++  ++  ++  ++  ++  ++  ++ ++ +diff --git a/cob_hardware_config/robots/cob4-19_tmp/cob4-19.rviz b/cob_hardware_config/robots/cob4-19_tmp/cob4-19.rviz +new file mode 100644 +index 0000000..bfad9e9 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/cob4-19.rviz +@@ -0,0 +1,807 @@ ++Panels: ++ - Class: rviz/Displays ++ Help Height: 78 ++ Name: Displays ++ Property Tree Widget: ++ Expanded: ++ - /Global Options1 ++ - /TF1/Frames1 ++ Splitter Ratio: 0.804714 ++ Tree Height: 843 ++ - Class: rviz/Selection ++ Name: Selection ++ - Class: rviz/Tool Properties ++ Expanded: ++ - /2D Pose Estimate1 ++ - /2D Nav Goal1 ++ Name: Tool Properties ++ Splitter Ratio: 0.588679 ++ - Class: rviz/Views ++ Expanded: ++ - /Current View1 ++ Name: Views ++ Splitter Ratio: 0.5 ++ - Class: rviz/Time ++ Experimental: false ++ Name: Time ++ SyncMode: 0 ++ SyncSource: LaserScan Left ++Visualization Manager: ++ Class: "" ++ Displays: ++ - Alpha: 0.5 ++ Cell Size: 1 ++ Class: rviz/Grid ++ Color: 160; 160; 164 ++ Enabled: true ++ Line Style: ++ Line Width: 0.03 ++ Value: Lines ++ Name: Grid ++ Normal Cell Count: 0 ++ Offset: ++ X: 0 ++ Y: 0 ++ Z: 0 ++ Plane: XY ++ Plane Cell Count: 10 ++ Reference Frame:  ++ Value: true ++ - Alpha: 1 ++ Class: rviz/RobotModel ++ Collision Enabled: false ++ Enabled: true ++ Links: ++ All Links Enabled: true ++ Expand Joint Details: false ++ Expand Link Details: false ++ Expand Tree: false ++ Link Tree Style: Links in Alphabetic Order ++ arm_left_1_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ arm_left_2_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ arm_left_3_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ arm_left_4_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ arm_left_5_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ arm_left_6_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ arm_left_7_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ arm_left_base_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ arm_right_1_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ arm_right_2_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ arm_right_3_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ arm_right_4_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ arm_right_5_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ arm_right_6_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ arm_right_7_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ arm_right_base_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ base_footprint: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ base_laser_front_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ base_laser_left_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ base_laser_right_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ base_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ bl_caster_r_wheel_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ bl_caster_rotation_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ br_caster_r_wheel_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ br_caster_rotation_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ fl_caster_r_wheel_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ fl_caster_rotation_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ gripper_left_base_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ gripper_left_camera_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ gripper_left_finger_1_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ gripper_left_finger_2_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ gripper_left_grasp_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ gripper_left_palm_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ gripper_right_base_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ gripper_right_camera_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ gripper_right_finger_1_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ gripper_right_finger_2_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ gripper_right_grasp_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ gripper_right_palm_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ head_1_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ head_2_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ head_3_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ head_base_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ head_center_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ sensorring_base_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ sensorring_cam3d_frame: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ sensorring_cam3d_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ sensorring_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ torso_1_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ torso_2_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ torso_3_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ torso_base_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ torso_cam3d_down_frame: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ torso_cam3d_down_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ torso_cam3d_down_optical_frame: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ torso_cam3d_left_frame: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ torso_cam3d_left_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ torso_cam3d_right_frame: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ torso_cam3d_right_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ torso_center_link: ++ Alpha: 1 ++ Show Axes: false ++ Show Trail: false ++ Value: true ++ Name: RobotModel ++ Robot Description: robot_description ++ TF Prefix: "" ++ Update Interval: 0 ++ Value: true ++ Visual Enabled: true ++ - Class: rviz/TF ++ Enabled: false ++ Frame Timeout: 15 ++ Frames: ++ All Enabled: false ++ Marker Scale: 1 ++ Name: TF ++ Show Arrows: true ++ Show Axes: true ++ Show Names: true ++ Tree: ++ {} ++ Update Interval: 0 ++ Value: false ++ - Alpha: 1 ++ Autocompute Intensity Bounds: true ++ Autocompute Value Bounds: ++ Max Value: 10 ++ Min Value: -10 ++ Value: true ++ Axis: Z ++ Channel Name: x ++ Class: rviz/LaserScan ++ Color: 0; 255; 0 ++ Color Transformer: FlatColor ++ Decay Time: 0 ++ Enabled: true ++ Invert Rainbow: false ++ Max Color: 0; 255; 0 ++ Max Intensity: 10.454 ++ Min Color: 0; 255; 0 ++ Min Intensity: 0.227896 ++ Name: LaserScan Front ++ Position Transformer: XYZ ++ Queue Size: 10 ++ Selectable: true ++ Size (Pixels): 3 ++ Size (m): 0.025 ++ Style: Spheres ++ Topic: /base_laser_front/scan ++ Use Fixed Frame: true ++ Use rainbow: true ++ Value: true ++ - Alpha: 1 ++ Autocompute Intensity Bounds: true ++ Autocompute Value Bounds: ++ Max Value: 10 ++ Min Value: -10 ++ Value: true ++ Axis: Z ++ Channel Name: intensity ++ Class: rviz/LaserScan ++ Color: 0; 255; 0 ++ Color Transformer: FlatColor ++ Decay Time: 0 ++ Enabled: true ++ Invert Rainbow: false ++ Max Color: 255; 255; 255 ++ Max Intensity: 0 ++ Min Color: 0; 255; 0 ++ Min Intensity: 0 ++ Name: LaserScan Left ++ Position Transformer: XYZ ++ Queue Size: 10 ++ Selectable: true ++ Size (Pixels): 3 ++ Size (m): 0.025 ++ Style: Spheres ++ Topic: /base_laser_left/scan ++ Use Fixed Frame: true ++ Use rainbow: true ++ Value: true ++ - Alpha: 1 ++ Autocompute Intensity Bounds: true ++ Autocompute Value Bounds: ++ Max Value: 10 ++ Min Value: -10 ++ Value: true ++ Axis: Z ++ Channel Name: intensity ++ Class: rviz/LaserScan ++ Color: 0; 255; 0 ++ Color Transformer: FlatColor ++ Decay Time: 0 ++ Enabled: true ++ Invert Rainbow: false ++ Max Color: 255; 255; 255 ++ Max Intensity: 4096 ++ Min Color: 0; 0; 0 ++ Min Intensity: 0 ++ Name: LaserScan Right ++ Position Transformer: XYZ ++ Queue Size: 10 ++ Selectable: true ++ Size (Pixels): 3 ++ Size (m): 0.025 ++ Style: Spheres ++ Topic: /base_laser_right/scan ++ Use Fixed Frame: true ++ Use rainbow: true ++ Value: true ++ - Arrow Length: 0.3 ++ Class: rviz/PoseArray ++ Color: 255; 25; 0 ++ Enabled: true ++ Name: PoseArray ++ Topic: /particlecloud ++ Value: true ++ - Alpha: 1 ++ Buffer Length: 1 ++ Class: rviz/Path ++ Color: 0; 255; 0 ++ Enabled: true ++ Line Style: Lines ++ Line Width: 0.03 ++ Name: Path dwa global ++ Offset: ++ X: 0 ++ Y: 0 ++ Z: 0 ++ Topic: /move_base/DWAPlannerROS/global_plan ++ Value: true ++ - Alpha: 1 ++ Buffer Length: 1 ++ Class: rviz/Path ++ Color: 0; 0; 255 ++ Enabled: true ++ Line Style: Lines ++ Line Width: 0.03 ++ Name: Path dwa local ++ Offset: ++ X: 0 ++ Y: 0 ++ Z: 0 ++ Topic: /move_base/DWAPlannerROS/local_plan ++ Value: true ++ - Alpha: 1 ++ Buffer Length: 1 ++ Class: rviz/Path ++ Color: 0; 255; 0 ++ Enabled: true ++ Line Style: Lines ++ Line Width: 0.03 ++ Name: Path tr global ++ Offset: ++ X: 0 ++ Y: 0 ++ Z: 0 ++ Topic: /move_base/TrajectoryPlannerROS/global_plan ++ Value: true ++ - Alpha: 1 ++ Buffer Length: 1 ++ Class: rviz/Path ++ Color: 0; 0; 255 ++ Enabled: true ++ Line Style: Lines ++ Line Width: 0.03 ++ Name: Path tr local ++ Offset: ++ X: 0 ++ Y: 0 ++ Z: 0 ++ Topic: /move_base/TrajectoryPlannerROS/local_plan ++ Value: true ++ - Class: rviz/Marker ++ Enabled: true ++ Marker Topic: /sound/marker ++ Name: SoundMarker ++ Namespaces: ++ {} ++ Queue Size: 100 ++ Value: true ++ - Class: rviz/Marker ++ Enabled: true ++ Marker Topic: /light_base/marker ++ Name: LightBaseMarker ++ Namespaces: ++ {} ++ Queue Size: 100 ++ Value: true ++ - Class: rviz/Marker ++ Enabled: true ++ Marker Topic: /light_torso/marker ++ Name: LightTorsoMarker ++ Namespaces: ++ color: true ++ Queue Size: 100 ++ Value: true ++ - Class: rviz/Image ++ Enabled: false ++ Image Topic: /torso_cam3d_down/rgb/image_raw ++ Max Value: 1 ++ Median window: 5 ++ Min Value: 0 ++ Name: TorsoCam3dDownImage ++ Normalize Range: true ++ Queue Size: 2 ++ Transport Hint: raw ++ Value: false ++ - Class: rviz/Image ++ Enabled: false ++ Image Topic: /torso_cam3d_left_upright/rgb/image_raw ++ Max Value: 1 ++ Median window: 5 ++ Min Value: 0 ++ Name: TorsoCam3dLeftImage ++ Normalize Range: true ++ Queue Size: 2 ++ Transport Hint: raw ++ Value: false ++ - Class: rviz/Image ++ Enabled: false ++ Image Topic: /torso_cam3d_right_upright/rgb/image_raw ++ Max Value: 1 ++ Median window: 5 ++ Min Value: 0 ++ Name: TorsoCam3dRightImage ++ Normalize Range: true ++ Queue Size: 2 ++ Transport Hint: raw ++ Value: false ++ - Class: rviz/Image ++ Enabled: false ++ Image Topic: /sensorring_cam3d_upright/rgb/image_raw ++ Max Value: 1 ++ Median window: 5 ++ Min Value: 0 ++ Name: SensorringCam3dImage ++ Normalize Range: true ++ Queue Size: 2 ++ Transport Hint: raw ++ Value: false ++ - Alpha: 1 ++ Autocompute Intensity Bounds: true ++ Autocompute Value Bounds: ++ Max Value: 10 ++ Min Value: -10 ++ Value: true ++ Axis: Z ++ Channel Name: intensity ++ Class: rviz/PointCloud2 ++ Color: 255; 255; 255 ++ Color Transformer: RGB8 ++ Decay Time: 0 ++ Enabled: false ++ Invert Rainbow: false ++ Max Color: 255; 255; 255 ++ Max Intensity: 4096 ++ Min Color: 0; 0; 0 ++ Min Intensity: 0 ++ Name: TorsoCam3dDownPointCloud2 ++ Position Transformer: XYZ ++ Queue Size: 10 ++ Selectable: true ++ Size (Pixels): 3 ++ Size (m): 0.01 ++ Style: Flat Squares ++ Topic: /torso_cam3d_down/depth/points ++ Use Fixed Frame: true ++ Use rainbow: true ++ Value: false ++ - Alpha: 1 ++ Autocompute Intensity Bounds: true ++ Autocompute Value Bounds: ++ Max Value: 10 ++ Min Value: -10 ++ Value: true ++ Axis: Z ++ Channel Name: intensity ++ Class: rviz/PointCloud2 ++ Color: 255; 255; 255 ++ Color Transformer: RGB8 ++ Decay Time: 0 ++ Enabled: false ++ Invert Rainbow: false ++ Max Color: 255; 255; 255 ++ Max Intensity: 4096 ++ Min Color: 0; 0; 0 ++ Min Intensity: 0 ++ Name: TorsoCam3dLeftPointCloud2 ++ Position Transformer: XYZ ++ Queue Size: 10 ++ Selectable: true ++ Size (Pixels): 3 ++ Size (m): 0.01 ++ Style: Flat Squares ++ Topic: /torso_cam3d_left/depth/points ++ Use Fixed Frame: true ++ Use rainbow: true ++ Value: false ++ - Alpha: 1 ++ Autocompute Intensity Bounds: true ++ Autocompute Value Bounds: ++ Max Value: 10 ++ Min Value: -10 ++ Value: true ++ Axis: Z ++ Channel Name: intensity ++ Class: rviz/PointCloud2 ++ Color: 255; 255; 255 ++ Color Transformer: RGB8 ++ Decay Time: 0 ++ Enabled: false ++ Invert Rainbow: false ++ Max Color: 255; 255; 255 ++ Max Intensity: 4096 ++ Min Color: 0; 0; 0 ++ Min Intensity: 0 ++ Name: TorsoCam3dRightPointCloud2 ++ Position Transformer: XYZ ++ Queue Size: 10 ++ Selectable: true ++ Size (Pixels): 3 ++ Size (m): 0.01 ++ Style: Flat Squares ++ Topic: /torso_cam3d_right/depth/points ++ Use Fixed Frame: true ++ Use rainbow: true ++ Value: false ++ - Alpha: 1 ++ Autocompute Intensity Bounds: true ++ Autocompute Value Bounds: ++ Max Value: 10 ++ Min Value: -10 ++ Value: true ++ Axis: Z ++ Channel Name: intensity ++ Class: rviz/PointCloud2 ++ Color: 255; 255; 255 ++ Color Transformer: RGB8 ++ Decay Time: 0 ++ Enabled: false ++ Invert Rainbow: false ++ Max Color: 255; 255; 255 ++ Max Intensity: 4096 ++ Min Color: 0; 0; 0 ++ Min Intensity: 0 ++ Name: SensorringCam3dPointCloud2 ++ Position Transformer: XYZ ++ Queue Size: 10 ++ Selectable: true ++ Size (Pixels): 3 ++ Size (m): 0.01 ++ Style: Flat Squares ++ Topic: /sensorring_cam3d/depth/points ++ Use Fixed Frame: true ++ Use rainbow: true ++ Value: false ++ - Class: rviz/InteractiveMarkers ++ Enable Transparency: true ++ Enabled: false ++ Name: InteractiveTeleop ++ Show Axes: false ++ Show Descriptions: true ++ Show Visual Aids: false ++ Update Topic: /cob_interactive_teleop/update ++ Value: false ++ - Alpha: 0.7 ++ Class: rviz/Map ++ Color Scheme: map ++ Draw Behind: false ++ Enabled: false ++ Name: Map ++ Topic: /map ++ Value: false ++ - Alpha: 1 ++ Class: rviz/GridCells ++ Color: 255; 0; 0 ++ Enabled: false ++ Name: Obstacles ++ Topic: /move_base/local_costmap/obstacles ++ Value: false ++ - Alpha: 1 ++ Class: rviz/GridCells ++ Color: 0; 0; 255 ++ Enabled: false ++ Name: Inflated Obstacles ++ Topic: /move_base/local_costmap/inflated_obstacles ++ Value: false ++ - Class: rviz/Axes ++ Enabled: false ++ Length: 1 ++ Name: Axes map origin ++ Radius: 0.1 ++ Reference Frame: map ++ Value: false ++ Enabled: true ++ Global Options: ++ Background Color: 48; 48; 48 ++ Fixed Frame: base_link ++ Frame Rate: 30 ++ Name: root ++ Tools: ++ - Class: rviz/Interact ++ Hide Inactive Objects: true ++ - Class: rviz/MoveCamera ++ - Class: rviz/Select ++ - Class: rviz/Measure ++ - Class: rviz/SetInitialPose ++ Topic: /initialpose ++ - Class: rviz/SetGoal ++ Topic: /move_base_simple/goal ++ Value: true ++ Views: ++ Current: ++ Class: rviz/Orbit ++ Distance: 19.5897 ++ Enable Stereo Rendering: ++ Stereo Eye Separation: 0.06 ++ Stereo Focal Distance: 1 ++ Swap Stereo Eyes: false ++ Value: false ++ Focal Point: ++ X: 0.891724 ++ Y: -0.865633 ++ Z: 1.0872 ++ Name: Current View ++ Near Clip Distance: 0.01 ++ Pitch: 0.509797 ++ Target Frame:  ++ Value: Orbit (rviz) ++ Yaw: 4.28313 ++ Saved: ~ ++Window Geometry: ++ Displays: ++ collapsed: false ++ Height: 1056 ++ Hide Left Dock: false ++ Hide Right Dock: false ++ QMainWindow State: 000000ff00000000fd000000040000000000000141000003dafc0200000006fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006400fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c0061007900730100000028000003da000000dd00fffffffb0000000c00430061006d00650072006100000002a5000000cd00000000000000000000000100000169000003dafc0200000007fb000000260054006f00720073006f00430061006d003300640044006f0077006e0049006d00610067006500000000280000010a0000001600fffffffb000000260054006f00720073006f00430061006d00330064004c0065006600740049006d0061006700650000000028000000f60000001600fffffffb000000280054006f00720073006f00430061006d00330064005200690067006800740049006d0061006700650000000028000001430000001600fffffffb0000002800530065006e0073006f007200720069006e006700430061006d003300640049006d0061006700650000000028000003da0000001600fffffffb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000002800000326000000b000fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004a00000003efc0100000002fb0000000800540069006d00650000000000000004a0000002f600fffffffb0000000800540069006d00650100000000000004500000000000000000000005f8000003da00000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 ++ Selection: ++ collapsed: false ++ SensorringCam3dImage: ++ collapsed: false ++ Time: ++ collapsed: false ++ Tool Properties: ++ collapsed: false ++ TorsoCam3dDownImage: ++ collapsed: false ++ TorsoCam3dLeftImage: ++ collapsed: false ++ TorsoCam3dRightImage: ++ collapsed: false ++ Views: ++ collapsed: false ++ Width: 1855 ++ X: 65 ++ Y: 24 +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/base_driver.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/base_driver.yaml +new file mode 100644 +index 0000000..31f2f1d +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/base_driver.yaml +@@ -0,0 +1,12 @@ ++nodes: ++ fl_caster_rotation_joint: ++ dcf_overlay: # "ObjectID" : "ParameterValue" (both as strings) ++ "607C": "129314.5" #"130136.0" # "310136.0" #"130136.0" # home offset ++ ++ b_caster_rotation_joint: ++ dcf_overlay: # "ObjectID" : "ParameterValue" (both as strings) ++ "607C": "12639.0" #"8847.5" # "188847.5" #"8847.5" # home offset ++ ++ fr_caster_rotation_joint: ++ dcf_overlay: # "ObjectID" : "ParameterValue" (both as strings) ++ "607C": "-109352.5" #"-113391.5" # "66608.5" #"-113391.5" # home offset +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/base_laser_filter.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/base_laser_filter.yaml +new file mode 100644 +index 0000000..bd5152b +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/base_laser_filter.yaml +@@ -0,0 +1,7 @@ ++scan_filter_chain: ++ - name: range ++ type: LaserScanRangeFilter ++ params: ++ use_message_range_limits: true ++ upper_threshold: 29.5 ++ upper_replacement_value: 29.5 +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/base_laser_front.xml b/cob_hardware_config/robots/cob4-19_tmp/config/base_laser_front.xml +new file mode 100644 +index 0000000..99bcf46 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/base_laser_front.xml +@@ -0,0 +1,6390 @@ ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/base_laser_front.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/base_laser_front.yaml +new file mode 100644 +index 0000000..2b6a53b +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/base_laser_front.yaml +@@ -0,0 +1,9 @@ ++port: /dev/ttyScanFront ++baud: 500000 ++scan_duration: 0.025 #no info about that in SICK-docu, but 0.025 is believable and looks good in rviz ++scan_cycle_time: 0.040 #SICK-docu says S300 scans every 40ms ++inverted: false ++scan_id: 7 ++frame_id: /base_laser_front_link ++publish_frequency: 12 ++scan_intervals: [[-1.5, 1.5]] #[rad] these intervals are included to the scan +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/base_laser_left.xml b/cob_hardware_config/robots/cob4-19_tmp/config/base_laser_left.xml +new file mode 100644 +index 0000000..0b66514 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/base_laser_left.xml +@@ -0,0 +1,6522 @@ ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/base_laser_left.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/base_laser_left.yaml +new file mode 100644 +index 0000000..93039c1 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/base_laser_left.yaml +@@ -0,0 +1,9 @@ ++port: /dev/ttyScanLeft ++baud: 500000 ++scan_duration: 0.025 #no info about that in SICK-docu, but 0.025 is believable and looks good in rviz ++scan_cycle_time: 0.040 #SICK-docu says S300 scans every 40ms ++inverted: false ++scan_id: 7 ++frame_id: /base_laser_left_link ++publish_frequency: 12 ++scan_intervals: [[-1.5, 1.5]] #[rad] these intervals are included to the scan +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/base_laser_right.xml b/cob_hardware_config/robots/cob4-19_tmp/config/base_laser_right.xml +new file mode 100644 +index 0000000..442bd59 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/base_laser_right.xml +@@ -0,0 +1,6473 @@ ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/base_laser_right.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/base_laser_right.yaml +new file mode 100644 +index 0000000..39770bd +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/base_laser_right.yaml +@@ -0,0 +1,9 @@ ++port: /dev/ttyScanRight ++baud: 500000 ++scan_duration: 0.025 #no info about that in SICK-docu, but 0.025 is believable and looks good in rviz ++scan_cycle_time: 0.040 #SICK-docu says S300 scans every 40ms ++inverted: false ++scan_id: 8 ++frame_id: /base_laser_right_link ++publish_frequency: 12 ++scan_intervals: [[-1.5, 1.5]] #[rad] these intervals are included to the scan +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/battery_monitor.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/battery_monitor.yaml +new file mode 100644 +index 0000000..74692de +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/battery_monitor.yaml +@@ -0,0 +1,13 @@ ++threshold_warning: 20 # % of battery level ++threshold_error: 10 # % of battery level ++threshold_critical: 5 # % of battery level ++ ++enable_light: true ++num_leds: 72 ++light_components: ['light_torso'] ++ ++enable_sound: false ++sound_components: [''] # use odp to verbalize ++ ++sound_critical: "Meine Batterie ist leer. Bitte lade mich wieder auf." ++sound_warning: "Meine Batterie is fast leer. Ich sollte demnächst wieder aufladen." +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/bms.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/bms.yaml +new file mode 100644 +index 0000000..08c1aa6 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/bms.yaml +@@ -0,0 +1,119 @@ ++diagnostics:  ++ - id: 0x01 ++ fields: ++ - name: "battery_empty" ++ offset: 0 ++ len: 2 ++ bit_mask: 0x01 ++ - name: "battery_almost_empty" ++ offset: 0 ++ len: 2 ++ bit_mask: 0x02 ++ - name: "charging_fet_active" ++ offset: 0 ++ len: 2 ++ bit_mask: 0x04 ++ - name: "discharging_fet_active" ++ offset: 0 ++ len: 2 ++ bit_mask: 0x08 ++ - name: "battery_learning" ++ offset: 0 ++ len: 2 ++ bit_mask: 0x10 ++ - name: "battery_discharging" ++ offset: 0 ++ len: 2 ++ bit_mask: 0x20 ++ - name: "battery_full" ++ offset: 0 ++ len: 2 ++ bit_mask: 0x40 ++ - name: "battery_charging" ++ offset: 0 ++ len: 2 ++ bit_mask: 0x80 ++ - id: 0x02 ++ fields: ++ - name: "current" ++ offset: 0 ++ len: 2 ++ is_signed: true ++ factor: 0.01 ++ unit: "A" ++ ++ - id: 0x03 ++ fields: ++ - name: "voltage" ++ offset: 0 ++ len: 2 ++ is_signed: false ++ factor: 0.01 ++ unit: "V" ++ ++ - id: 0x06 ++ fields: ++ - name: "remaining_capacity" ++ offset: 0 ++ len: 2 ++ is_signed: false ++ factor: 0.001 ++ unit: "Ah" ++ - name: "full_charge_capacity" ++ offset: 2 ++ len: 2 ++ is_signed: false ++ factor: 0.001 ++ unit: "Ah" ++ ++ - id: 0x04 ++ fields: ++ - name: "temperature" ++ offset: 0 ++ len: 2 ++ is_signed: true ++ factor: 0.1 ++ unit: "Celsius" ++ ++ - name: "temperature_cell_1" ++ offset: 2 ++ len: 2 ++ is_signed: true ++ factor: 0.1 ++ unit: "Celsius" ++ ++ - name: "temperature_cell_2" ++ offset: 4 ++ len: 2 ++ is_signed: true ++ factor: 0.1 ++ unit: "Celsius" ++ ++ - id: 0x05 ++ fields: ++ - name: "temperature_cell_3" ++ offset: 0 ++ len: 2 ++ is_signed: true ++ factor: 0.1 ++ unit: "Celsius" ++ ++ - name: "temperature_cell_4" ++ offset: 2 ++ len: 2 ++ is_signed: true ++ factor: 0.1 ++ unit: "Celsius" ++ ++ - name: "temperature_cell_5" ++ offset: 4 ++ len: 2 ++ is_signed: true ++ factor: 0.1 ++ unit: "Celsius" ++ ++topics: ["current", "voltage", "remaining_capacity", "full_charge_capacity", "temperature", "battery_charging", "battery_full", "battery_learning", "battery_almost_empty"] ++ ++can_device: "can1" ++bms_id_to_poll: 0x200 ++poll_frequency_hz: 20 +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/collision_velocity_filter_params.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/collision_velocity_filter_params.yaml +new file mode 100644 +index 0000000..eec43f7 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/collision_velocity_filter_params.yaml +@@ -0,0 +1,19 @@ ++#where to look for costmap parameters ++costmap_parameter_source: "/local_costmap_node/costmap" #default "/local_costmap_node/costmap" ++ ++#frequency at which the get_footprint service should be called ++footprint_update_frequency: 0.5 ++ ++#Parameters specifying slow down behaviour ++pot_ctrl_vmax: 0.6 #default: 0.6 ++pot_ctrl_vtheta_max: 0.6 #default: 0.8 ++pot_ctrl_kv: 2.5 #damping default: 1.0 ++pot_ctrl_kp: 3.0 #stiffness default: 2.0 ++pot_ctrl_virt_mass: 0.5 #default: 0.8 ++max_acceleration: [0.5, 0.5, 0.7] ++ ++#Parameters specifying collision velocity filter ++influence_radius: 2.0 #[m] distance from robot_center ++obstacle_damping_dist: 1.0 # used as slow-down dist ++stop_threshold: 0.1 #[m] ++use_circumscribed_threshold: 0.5 #[rad/s] scan for obstacles in circumscribed radius of robot even when tube filter is enabled during fast rotations +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/diagnostics_analyzers.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/diagnostics_analyzers.yaml +new file mode 100644 +index 0000000..3a3828e +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/diagnostics_analyzers.yaml +@@ -0,0 +1,116 @@ ++pub_rate: 1.0 # Optional ++base_path: '' # Optional, prepended to all diagnostic output ++analyzers: ++ computers: ++ type: diagnostic_aggregator/AnalyzerGroup ++ path: Computers ++ analyzers: ++ b1: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: b1 ++ contains: '-b1' ++ t1: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: t1 ++ contains: '-t1' ++ t2: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: t2 ++ contains: '-t2' ++ t3: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: t3 ++ contains: '-t3' ++ s1: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: s1 ++ contains: '-s1' ++ h1: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: h1 ++ contains: '-h1' ++# network: ++# type: diagnostic_aggregator/AnalyzerGroup ++# path: Network ++# analyzers: ++# wifi: ++# type: diagnostic_aggregator/GenericAnalyzer ++# path: wifi ++# num_items: 1 ++# expected: ['Wifi Status (ddwrt)'] ++ ++ io: ++ type: diagnostic_aggregator/AnalyzerGroup ++ path: IO ++ analyzers: ++ joystick: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: Joystick ++ contains: 'joy' ++ sound: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: Sound ++ contains: 'sound' ++ light: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: Light ++ contains: 'light' ++ ++ sensors: ++ type: diagnostic_aggregator/AnalyzerGroup ++ path: Sensors ++ analyzers: ++ laser_top: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: Scan Front ++ contains: 'laser_front' ++ laser_rear: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: Scan Right ++ contains: 'laser_right' ++ laser_front: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: Scan Left ++ contains: 'laser_left' ++ torso_cam3d_left: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: Torso Cam3d Left ++ contains: 'torso_cam3d_left' ++ torso_cam3d_right: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: Torso Cam3d Right ++ contains: 'torso_cam3d_right' ++ torso_cam3d_down: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: Torso Cam3d Down ++ contains: 'torso_cam3d_down' ++ sensorring_cam3d: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: Sensorring Cam3d ++ contains: 'sensorring_cam3d' ++ head_cam: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: Head Cam ++ contains: 'head_cam' ++ battery: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: Battery Status ++ contains: 'bms' ++ ++ motors: ++ type: diagnostic_aggregator/AnalyzerGroup ++ path: Actuators ++ analyzers: ++ base: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: Base ++ contains: 'base/' ++ sensorring: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: Torso ++ contains: 'sensorring/' ++ ++ safety: ++ type: diagnostic_aggregator/GenericAnalyzer ++ path: Safety ++ contains: 'safety' +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/docking_laser_filter.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/docking_laser_filter.yaml +new file mode 100644 +index 0000000..2eefb88 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/docking_laser_filter.yaml +@@ -0,0 +1,12 @@ ++scan_filter_chain: ++- name: range ++ type: LaserScanRangeFilter ++ params: ++ lower_threshold: 0.005 ++ upper_threshold: 3.0 ++- name: intensity ++ type: LaserScanIntensityFilter ++ params: ++ lower_threshold: 100 ++ upper_threshold: 100000 ++ disp_histogram: 0 +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/docking_linear_nav.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/docking_linear_nav.yaml +new file mode 100644 +index 0000000..7a457e2 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/docking_linear_nav.yaml +@@ -0,0 +1,23 @@ ++#Parameters designing the potential field controller ++#Translational part ++kv: 2.50 #damping 2.50 ++kp: 3.00 #stiffness 3.0 ++virt_mass: 0.50 #0.50 ++vmax: 0.09 #0.3 ++goal_threshold: 0.02 #0.03 ++speed_threshold: 0.02 #0.08 ++ ++#Rotational part ++kv_rot: 2.0 #damping 2.0 ++kp_rot: 2.0 #stiffness 2.0 ++virt_mass_rot: 0.50 #0.5 ++vtheta_max: 0.3 # 0.3 ++goal_threshold_rot: 0.06 #0.08 ++speed_threshold_rot: 0.02 #0.08 ++ ++#tf parameters ++global_frame: odom_combined #/map ++robot_frame: base_link #/base_link ++ ++slow_down_distance: 0.25 #0.5[m] distance from robot_center to goal at which robot starts slowing down ++goal_abortion_time: 5.0 #5.0[s] time until robot aborts goal due to obstacle +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/docking_stations.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/docking_stations.yaml +new file mode 100644 +index 0000000..f4c0dd3 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/docking_stations.yaml +@@ -0,0 +1,21 @@ ++stations: ++- frame_id: station_charger ++ reflector_distance: 0.28 ++ approach_poses: [[-0.76, 0.0, 0.0], [-0.56, 0.0, 0.0], [-0.47, 0.0, -0.02]] # in frame_id coords ++ departure_poses: [[-0.8, 0.0, 0.0]] ++ stop_condition: ++ topic: '/power_state' ++ message_field: 'charging' ++ compare_value: True ++ ++- frame_id: station_travel_box ++ reflector_distance: 0.95 ++ approach_poses: [[-2.20, 0.0, 0.0], [-0.6, 0.0, -0.035], [-0.38, 0.0, -0.035], [-0.312, 0.0, -0.035]] # in frame_id coords ++ departure_poses: [[-0.38, 0.0, -0.035], [-0.6, 0.0, -0.035], [-2.20, 0.0, 0.0]] # in frame_id coords ++ ++distance_tolerance: 0.1 ++intensity_lower_threshold: 200 ++intensity_upper_threshold: 10000 ++update_rate: 0.25 ++dock_dist_threshold: 0.15 ++undock_dist_threshold: 1.0 +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/emergency_stop_monitor.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/emergency_stop_monitor.yaml +new file mode 100644 +index 0000000..00e960e +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/emergency_stop_monitor.yaml +@@ -0,0 +1,19 @@ ++enable_light: true ++light_components: ['light_base'] ++color_ok: cyan ++ ++enable_sound: true ++sound_components: [''] # use odp to verbalize ++ ++sound_em_ready_laser_released: "" ++sound_em_ready_button_released: "Danke. Jetzt kann es weiter gehen." ++sound_em_acknowledged: "" ++sound_em_stop_laser_released: "" ++sound_em_stop_button_released: "Danke. Jetzt kann es weiter gehen." ++sound_em_stop_laser_issued: "" ++sound_em_stop_button_issued: "Notausknopf gedrueckt. Bitte loese den Knopf wieder durch leichtes Drehen, falls keine Notsituation mehr besteht." ++sound_em_stop_issued: "" ++sound_em_unknown_issued: "" ++ ++diagnostics_based: true ++motion_based: true +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/flexisoft.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/flexisoft.yaml +new file mode 100644 +index 0000000..651911d +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/flexisoft.yaml +@@ -0,0 +1,16 @@ ++port: "9100" # alternative syntax: !!str 9100 ++odometry_timeout: 1.0 ++threshold_linear_slow: 0.4 ++threshold_linear_fast: 0.9 ++threshold_angular_fast: 1.0 ++marker_type: 11 # http://www.ros.org/wiki/rviz/DisplayTypes/Marker, not all are supported ++scale_x: 1.0 ++scale_y: 1.0 ++scale_z: 1.0 ++footprint_angular_slow: [[0.4,0.4], [-0.4,0.4], [-0.4,-0.4], [0.4,-0.4]] ++footprint_angular_fast: [[0.5,0.5], [-0.5,0.5], [-0.5,-0.5], [0.5,-0.5]] ++footprint_linear_slow: [[0.6,0.4], [-0.4,0.4], [-0.4,-0.4], [0.6,-0.4]] ++footprint_linear_fast: [[0.8,0.4], [-0.4,0.4], [-0.4,-0.4], [0.8,-0.4]] ++has_wireless_emstop: true ++warn_for_wireless_bridged: false ++warn_for_laser_bridged: false +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/footprint_observer_params.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/footprint_observer_params.yaml +new file mode 100644 +index 0000000..c6ccb5d +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/footprint_observer_params.yaml +@@ -0,0 +1,8 @@ ++# node from which initial footprint is read ++footprint_source: /local_costmap_node/costmap ++ ++# ++robot_base_frame: /base_link ++# frames to check for footprint adjustment ++frames_to_check: /base_laser_front_link /base_laser_left_link /base_laser_right_link ++epsilon: 0.01 +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/head_cam.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/head_cam.yaml +new file mode 100644 +index 0000000..d5871da +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/head_cam.yaml +@@ -0,0 +1,5 @@ ++video_device: "/dev/video0" ++image_width: 2048 ++image_height: 1536 ++pixel_format: yuyv ++framerate: 3.5 #at 2048x1536 3.6hz is maximum on hw +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/hz_monitor_head_cam.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/hz_monitor_head_cam.yaml +new file mode 100644 +index 0000000..049433f +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/hz_monitor_head_cam.yaml +@@ -0,0 +1,4 @@ ++diagnostics_name: head_cam ++topics: [/head_cam/camera_info] ++hz: 3.5 ++hzerror: 1 +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/hz_monitor_sensorring_cam3d.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/hz_monitor_sensorring_cam3d.yaml +new file mode 100644 +index 0000000..780d23e +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/hz_monitor_sensorring_cam3d.yaml +@@ -0,0 +1,4 @@ ++diagnostics_name: sensorring_cam3d ++topics: [/sensorring_cam3d/rgb/camera_info] ++hz: 30 ++hzerror: 5 +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/hz_monitor_torso_cam3d_down.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/hz_monitor_torso_cam3d_down.yaml +new file mode 100644 +index 0000000..f967de7 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/hz_monitor_torso_cam3d_down.yaml +@@ -0,0 +1,4 @@ ++diagnostics_name: torso_cam3d_down ++topics: [/torso_cam3d_down/rgb/camera_info] ++hz: 30 ++hzerror: 5 +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/hz_monitor_torso_cam3d_left.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/hz_monitor_torso_cam3d_left.yaml +new file mode 100644 +index 0000000..e6170fd +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/hz_monitor_torso_cam3d_left.yaml +@@ -0,0 +1,4 @@ ++diagnostics_name: torso_cam3d_left ++topics: [/torso_cam3d_left/rgb/camera_info] ++hz: 30 ++hzerror: 5 +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/hz_monitor_torso_cam3d_right.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/hz_monitor_torso_cam3d_right.yaml +new file mode 100644 +index 0000000..a507b6d +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/hz_monitor_torso_cam3d_right.yaml +@@ -0,0 +1,4 @@ ++diagnostics_name: torso_cam3d_right ++topics: [/torso_cam3d_right/rgb/camera_info] ++hz: 30 ++hzerror: 5 +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/image_flip_params_head_cam.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/image_flip_params_head_cam.yaml +new file mode 100644 +index 0000000..a8bed5e +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/image_flip_params_head_cam.yaml +@@ -0,0 +1,23 @@ ++# rotation mode (0=fixed angle as defined by rotation_angle, 1=automatic upright rotation against gravity using reference coordinate frame with upwards directed z-axis, 2=as 1 but image rotation only in 90deg steps -> faster) ++# int ++rotation_mode: 1 ++ ++# image rotation [in deg] (especially efficient with 0, 90, 180, 270 deg) ++# double ++rotation_angle: 0 ++ ++# reference world coordinate frame with z-axis pointing upwards (= against gravity direction) ++# string ++reference_frame: base_link ++ ++# flip color image ++# bool ++flip_color_image: true ++ ++# flip point cloud (usually unnecessary because tf takes care of this with original point cloud) ++# bool ++flip_pointcloud: false ++ ++# display warning if transformation not available ++# bool ++display_warnings: true +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/image_flip_params_sensorring_cam3d.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/image_flip_params_sensorring_cam3d.yaml +new file mode 100644 +index 0000000..a9fcb86 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/image_flip_params_sensorring_cam3d.yaml +@@ -0,0 +1,23 @@ ++# rotation mode (0=fixed angle as defined by rotation_angle, 1=automatic upright rotation against gravity using reference coordinate frame with upwards directed z-axis, 2=as 1 but image rotation only in 90deg steps -> faster) ++# int ++rotation_mode: 1 ++ ++# image rotation [in deg] (especially efficient with 0, 90, 180, 270 deg) ++# double ++rotation_angle: 0 ++ ++# reference world coordinate frame with z-axis pointing upwards (= against gravity direction) ++# string ++reference_frame: base_link ++ ++# flip color image ++# bool ++flip_color_image: true ++ ++# flip point cloud (usually unnecessary because tf takes care of this with original point cloud) ++# bool ++flip_pointcloud: true ++ ++# display warning if transformation not available ++# bool ++display_warnings: false +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/image_flip_params_torso_cam3d_down.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/image_flip_params_torso_cam3d_down.yaml +new file mode 100644 +index 0000000..a9fcb86 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/image_flip_params_torso_cam3d_down.yaml +@@ -0,0 +1,23 @@ ++# rotation mode (0=fixed angle as defined by rotation_angle, 1=automatic upright rotation against gravity using reference coordinate frame with upwards directed z-axis, 2=as 1 but image rotation only in 90deg steps -> faster) ++# int ++rotation_mode: 1 ++ ++# image rotation [in deg] (especially efficient with 0, 90, 180, 270 deg) ++# double ++rotation_angle: 0 ++ ++# reference world coordinate frame with z-axis pointing upwards (= against gravity direction) ++# string ++reference_frame: base_link ++ ++# flip color image ++# bool ++flip_color_image: true ++ ++# flip point cloud (usually unnecessary because tf takes care of this with original point cloud) ++# bool ++flip_pointcloud: true ++ ++# display warning if transformation not available ++# bool ++display_warnings: false +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/image_flip_params_torso_cam3d_left.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/image_flip_params_torso_cam3d_left.yaml +new file mode 100644 +index 0000000..a9fcb86 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/image_flip_params_torso_cam3d_left.yaml +@@ -0,0 +1,23 @@ ++# rotation mode (0=fixed angle as defined by rotation_angle, 1=automatic upright rotation against gravity using reference coordinate frame with upwards directed z-axis, 2=as 1 but image rotation only in 90deg steps -> faster) ++# int ++rotation_mode: 1 ++ ++# image rotation [in deg] (especially efficient with 0, 90, 180, 270 deg) ++# double ++rotation_angle: 0 ++ ++# reference world coordinate frame with z-axis pointing upwards (= against gravity direction) ++# string ++reference_frame: base_link ++ ++# flip color image ++# bool ++flip_color_image: true ++ ++# flip point cloud (usually unnecessary because tf takes care of this with original point cloud) ++# bool ++flip_pointcloud: true ++ ++# display warning if transformation not available ++# bool ++display_warnings: false +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/image_flip_params_torso_cam3d_right.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/image_flip_params_torso_cam3d_right.yaml +new file mode 100644 +index 0000000..a9fcb86 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/image_flip_params_torso_cam3d_right.yaml +@@ -0,0 +1,23 @@ ++# rotation mode (0=fixed angle as defined by rotation_angle, 1=automatic upright rotation against gravity using reference coordinate frame with upwards directed z-axis, 2=as 1 but image rotation only in 90deg steps -> faster) ++# int ++rotation_mode: 1 ++ ++# image rotation [in deg] (especially efficient with 0, 90, 180, 270 deg) ++# double ++rotation_angle: 0 ++ ++# reference world coordinate frame with z-axis pointing upwards (= against gravity direction) ++# string ++reference_frame: base_link ++ ++# flip color image ++# bool ++flip_color_image: true ++ ++# flip point cloud (usually unnecessary because tf takes care of this with original point cloud) ++# bool ++flip_pointcloud: true ++ ++# display warning if transformation not available ++# bool ++display_warnings: false +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/joint_state_publisher.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/joint_state_publisher.yaml +new file mode 100644 +index 0000000..337d64a +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/joint_state_publisher.yaml +@@ -0,0 +1,2 @@ ++rate: 100 #Hz ++source_list: [/base/joint_states, /sensorring/joint_states] +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/joy.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/joy.yaml +new file mode 100644 +index 0000000..f07d1f5 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/joy.yaml +@@ -0,0 +1,2 @@ ++dev: /dev/joypad ++deadzone: 0.12 +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/light_base.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/light_base.yaml +new file mode 100644 +index 0000000..e380603 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/light_base.yaml +@@ -0,0 +1,9 @@ ++devicestring: /dev/ttyLED ++devicedriver: stageprofi ++baudrate: 38400 ++num_leds: 3 ++invert_output: false ++pubmarker: true ++marker_frame: /torso_base_link # marker will be publised at [0.5,0,0] with respect to marker_frame ++startup_color: [0.0, 1.0, 0.5, 0.4] #rgba value ++startup_mode: Static #possible values: None, Static, Breath, BreathColor, Flash, FadeColor +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/light_torso.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/light_torso.yaml +new file mode 100644 +index 0000000..32950a6 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/light_torso.yaml +@@ -0,0 +1,10 @@ ++devicestring: /dev/ttyLED ++devicedriver: stageprofi ++baudrate: 38400 ++num_leds: 72 ++led_offset: 5 ++invert_output: false ++pubmarker: true ++marker_frame: /torso_center_link # marker will be publised at [0.5,0,0] with respect to marker_frame ++startup_color: [0.0, 1.0, 0.5, 0.4] #rgba value ++startup_mode: Breath #possible values: None, Static, Breath, BreathColor, Flash, FadeColor +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/local_costmap_params.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/local_costmap_params.yaml +new file mode 100644 +index 0000000..3739a62 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/local_costmap_params.yaml +@@ -0,0 +1,65 @@ ++# global information ++global_frame: /base_link ++robot_base_frame: /base_footprint ++update_frequency: 5.0 ++publish_frequency: 5.0 ++ ++# local map settings ++static_map: false ++rolling_window: true ++width: 5.0 ++height: 5.0 ++resolution: 0.07 ++ ++# footprint and range ++footprint: [[0.43, 0.35], [0.43, -0.35], [-0.43, -0.35],[-0.43, 0.35]] #[m] ++footprint_padding: 0.02 #[m] ++ ++#layers ++plugins: ++ ++# The obstacle layer tracks the obstacles as read by the sensor data. The ObstacleCostmapPlugin marks and ++# raytraces obstacles in two dimensions, while the VoxelCostmapPlugin does so in three dimensions. ++- {name: obstacle_layer, type: "costmap_2d::VoxelLayer"} ++ ++ ++obstacle_layer: ++ ++ # Definition of the sensors/observation sources ++ observation_sources: laser_scan_front laser_scan_left laser_scan_right ++ ++ # Parameters of the source: laser_scan_front ++ laser_scan_front: ++ sensor_frame: base_laser_front_link # The frame of the origin of the sensor, default: "" ++ topic: /base_laser_front/scan # The topic on which sensor data comes in for this source, default: source_name ++ data_type: LaserScan # The data type associated with the topic, default: "PointCloud" ++ marking: true # Whether or not this observation is used to mark obstacles, default: true ++ clearing: true # Whether or not this observation is used to clear out freespace, default: false ++ ++ # Parameters of the source: laser_scan_rear ++ laser_scan_left: ++ sensor_frame: base_laser_left_link # The frame of the origin of the sensor, default: "" ++ topic: /base_laser_left/scan # The topic on which sensor data comes in for this source, default: source_name ++ data_type: LaserScan # The data type associated with the topic, default: "PointCloud" ++ marking: true # Whether or not this observation is used to mark obstacles, default: true ++ clearing: true # Whether or not this observation is used to clear out freespace, default: false ++ ++ # Parameters of the source: laser_scan_front ++ laser_scan_right: ++ sensor_frame: base_laser_right_link # The frame of the origin of the sensor, default: "" ++ topic: /base_laser_right/scan # The topic on which sensor data comes in for this source, default: source_name ++ data_type: LaserScan # The data type associated with the topic, default: "PointCloud" ++ marking: true # Whether or not this observation is used to mark obstacles, default: true ++ clearing: true # Whether or not this observation is used to clear out freespace, default: false ++ ++ # The default maximum distance from the robot at which an obstacle will be inserted into the cost map in meters ++ obstacle_range: 3.0 ++ ++ # The default range in meters at which to raytrace out obstacles from the map using sensor data ++ raytrace_range: 3.0 ++ ++ # What map type to use. "voxel" or "costmap" are the supported types, with the difference between them being a 3D-view of the world vs. a 2D-view of the world ++ map_type: costmap ++ ++ # The maximum height in meters of a sensor reading considered valid. ++ max_obstacle_height: 2.0 +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/ntp_monitor.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/ntp_monitor.yaml +new file mode 100644 +index 0000000..4ada7cf +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/ntp_monitor.yaml +@@ -0,0 +1,2 @@ ++offset: 5000 #us ++error_offset: 25000 #us +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/pc_monitor_b1.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/pc_monitor_b1.yaml +new file mode 100644 +index 0000000..cf87289 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/pc_monitor_b1.yaml +@@ -0,0 +1,6 @@ ++check_core_temps: False ++check_ipmi_tool: False ++enforce_clock_speed: False ++num_cores: 4 ++load1_threshold: 10 ++load5_threshold: 10 +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/pc_monitor_h1.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/pc_monitor_h1.yaml +new file mode 100644 +index 0000000..cf87289 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/pc_monitor_h1.yaml +@@ -0,0 +1,6 @@ ++check_core_temps: False ++check_ipmi_tool: False ++enforce_clock_speed: False ++num_cores: 4 ++load1_threshold: 10 ++load5_threshold: 10 +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/pc_monitor_localhost.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/pc_monitor_localhost.yaml +new file mode 100644 +index 0000000..78df360 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/pc_monitor_localhost.yaml +@@ -0,0 +1,3 @@ ++check_core_temps: False ++check_ipmi_tool: False ++enforce_clock_speed: False +\ No newline at end of file +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/pc_monitor_s1.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/pc_monitor_s1.yaml +new file mode 100644 +index 0000000..cf87289 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/pc_monitor_s1.yaml +@@ -0,0 +1,6 @@ ++check_core_temps: False ++check_ipmi_tool: False ++enforce_clock_speed: False ++num_cores: 4 ++load1_threshold: 10 ++load5_threshold: 10 +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/pc_monitor_t1.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/pc_monitor_t1.yaml +new file mode 100644 +index 0000000..cf87289 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/pc_monitor_t1.yaml +@@ -0,0 +1,6 @@ ++check_core_temps: False ++check_ipmi_tool: False ++enforce_clock_speed: False ++num_cores: 4 ++load1_threshold: 10 ++load5_threshold: 10 +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/pc_monitor_t2.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/pc_monitor_t2.yaml +new file mode 100644 +index 0000000..cf87289 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/pc_monitor_t2.yaml +@@ -0,0 +1,6 @@ ++check_core_temps: False ++check_ipmi_tool: False ++enforce_clock_speed: False ++num_cores: 4 ++load1_threshold: 10 ++load5_threshold: 10 +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/pc_monitor_t3.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/pc_monitor_t3.yaml +new file mode 100644 +index 0000000..cf87289 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/pc_monitor_t3.yaml +@@ -0,0 +1,6 @@ ++check_core_temps: False ++check_ipmi_tool: False ++enforce_clock_speed: False ++num_cores: 4 ++load1_threshold: 10 ++load5_threshold: 10 +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/scan_unifier_config.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/scan_unifier_config.yaml +new file mode 100644 +index 0000000..be78cb8 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/scan_unifier_config.yaml +@@ -0,0 +1,3 @@ ++#Scan_unifier_config-parameters ++ ++input_scans: ["base_laser_front/scan","base_laser_left/scan","base_laser_right/scan"] +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/sensorring_controller.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/sensorring_controller.yaml +new file mode 100644 +index 0000000..fa89d54 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/sensorring_controller.yaml +@@ -0,0 +1,51 @@ ++#all ++joint_names: [sensorring_joint] ++ ++## control_mode_adapter ++max_command_silence: 0.5 ++ ++## joint_state_controller ++joint_state_controller: ++ type: joint_state_controller/JointStateController ++ publish_rate: 50 ++ ++## joint trajectory controller ++joint_trajectory_controller: ++ type: position_controllers/JointTrajectoryController ++ joints: ++ - sensorring_joint ++ constraints: ++ goal_time: 0.6 ++ stopped_velocity_tolerance: 0.05 ++ sensorring_joint: {trajectory: 0.1, goal: 0.1} ++ stop_trajectory_duration: 0.5 ++ state_publish_rate: 25 ++ action_monitor_rate: 10 ++ required_drive_mode: 7 ++ ++ ++## position controller ++joint_group_position_controller: ++ type: position_controllers/JointGroupPositionController ++ joints: ++ - sensorring_joint ++ required_drive_mode: 1 ++ ++sensorring_joint_position_controller: ++ type: position_controllers/JointPositionController ++ joint: sensorring_joint ++ required_drive_mode: 1 ++ ++ ++### velocity controller ++### velicty controllers are not to be used with Elmo Devices as JointLimits are not considered! ++#joint_group_velocity_controller: ++# type: velocity_controllers/JointGroupVelocityController ++# joints: ++# - sensorring_joint ++# required_drive_mode: 3 ++# ++#sensorring_joint_velocity_controller: ++# type: velocity_controllers/JointVelocityController ++# joint: sensorring_joint ++# required_drive_mode: 3 +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/sensorring_driver.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/sensorring_driver.yaml +new file mode 100644 +index 0000000..604d329 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/sensorring_driver.yaml +@@ -0,0 +1,22 @@ ++sync: ++ interval_ms: 10 ++ overflow: 0 ++ ++defaults: ++ eds_pkg: unity_hardware_config ++ eds_file: "robots/common/Elmo.dcf" ++ vel_from_device: "v != v ? v=0 : v=smooth(deg2rad(obj606c/1000.0),v,0.3)" # for smoother current velocity in joint_states ++ motor_layer: ++ switching_state: 4 # switched on - stop controller before switching modes ++ ++nodes: ++ - name: sensorring_joint ++ id: 73 ++ #publish: ["60C1sub1"] #trajectory ++ #publish: ["60FF"] #velocity ++ dcf_overlay: # "ObjectID": "ParameterValue" (both as strings) ++ "6083": "300000" # profile acceleration, mgrad/sec^2 ++ "6084": "300000" # profile deceleration, mgrad/sec^2 ++ "60C5": "300000" # max acceleration, mgrad/sec^2 ++ "60C6": "1000000" # max deceleration, mgrad/sec^2 ++ +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/sound.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/sound.yaml +new file mode 100644 +index 0000000..6321ef2 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/sound.yaml +@@ -0,0 +1,6 @@ ++mode: "cepstral" ++cepstral_voice: "David" ++cepstral_settings: "\"speech/rate=170\"" ++fade_volume: true #fade volume on play and on track transition ++fade_duration: 1.0 #time till full volume or mute is reached ++ #(complete fade time between two tracks = 2*fade_duration) +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/teleop.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/teleop.yaml +new file mode 100644 +index 0000000..7114563 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/teleop.yaml +@@ -0,0 +1,59 @@ ++########## ++# common params ++run_factor: 2.0 ++apply_ramp: false ++joy_num_buttons: 12 ++joy_num_axes: 6 ++joy_num_modes: 4 ++mode_switch_button: 8 ++ ++enable_light: true ++light_action_name: /light_torso/set_light ++enable_sound: true ++sound_action_name: /sound/say ++ ++# axes ++axis_vx: 1 ++axis_vy: 0 ++axis_vz: 5 ++axis_roll: 4 ++axis_pitch: 3 ++axis_yaw: 2 ++ ++# buttons ++deadman_button: 5 ++safety_button: 4 ++init_button: 9 ++ ++#mode1: Base ++run_button: 7 ++ ++#mode2: Trajectory controller ++torso_sss_default_target_button: 1 ++ ++#mode3: Velocity group controller ++torso_joint1_button: 0 ++ ++right_indicator_button: 7 ++left_indicator_button: 6 ++up_down_button: 5 ++right_left_button: 4 ++ ++#mode4: Twist controller ++torso_twist_button: 1 ++ ++components: { ++ base: { ++ twist_topic_name: '/base/twist_mux/command_teleop_joy', ++ twist_safety_topic_name: '/base/collision_velocity_filter/command', ++ twist_max_velocity: [0.3, 0.2, 0.3], ++ twist_max_acc: [0.5, 0.5, 0.7] ++ }, ++ sensorring: { ++ sss_default_target: "home", ++ velocity_topic_name: "/sensorring/joint_group_velocity_controller/command", ++ joint_velocity: [0.05, 0.05], ++ twist_topic_name: '/sensorring/twist_controller/command_twist', ++ twist_max_velocity: [0.3, 0.2, 0.3, 0.3, 0.2, 0.3] ++ } ++} +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/twist_mux_locks.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/twist_mux_locks.yaml +new file mode 100644 +index 0000000..d61b1da +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/twist_mux_locks.yaml +@@ -0,0 +1,26 @@ ++# Locks to stop the twist inputs. ++# For each lock: ++# - topic : input topic that provides the lock; it must be of type std_msgs::Bool?!!!  ++# - timeout : == 0.0 -> not used ++# > 0.0 -> the lock is supposed to published at a certain frequency in order ++# to detect that the publisher is alive; the timeout in seconds allows ++# to detect that, and if the publisher dies we will enable the lock ++# - priority: priority in the range [0, 255], so all the topics with priority lower than it ++# will be stopped/disabled ++ ++locks: ++- ++ name : pause_navigation ++ topic : twist_mux/locks/pause_navigation ++ timeout : 0.0 ++ priority: 21 ++- ++ name : pause_teleop  ++ topic : twist_mux/locks/pause_teleop ++ timeout : 0.0 ++ priority: 101 ++- ++ name : pause_all  ++ topic : twist_mux/locks/pause_all ++ timeout : 0.0 ++ priority: 255 +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/twist_mux_topics.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/twist_mux_topics.yaml +new file mode 100644 +index 0000000..9704c12 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/twist_mux_topics.yaml +@@ -0,0 +1,43 @@ ++# Input topics handled/muxed. ++# For each topic: ++# - name : name identifier to select the topic ++# - topic : input topic of geometry_msgs::Twist type ++# - timeout : timeout in seconds to start discarding old messages, and use 0.0 speed instead ++# - priority: priority in the range [0, 255]; the higher the more priority over other topics ++ ++topics: ++- ++ name : collision_velocity_filter ++ topic : twist_mux/command_safe ++ timeout : 0.25 ++ priority: 10 ++- ++ name : navigation ++ topic : twist_mux/command_navigation ++ timeout : 0.25 ++ priority: 20 ++- ++ name : syncmm # cob_twist_controller ++ topic : twist_mux/command_syncmm ++ timeout : 0.5 ++ priority: 60 ++- ++ name : script_server ++ topic : twist_mux/command_script_server ++ timeout : 0.5 ++ priority: 70 ++- ++ name : teleop_keyboard ++ topic : twist_mux/command_teleop_keyboard ++ timeout : 0.5 ++ priority: 80 ++- ++ name : teleop_android ++ topic : twist_mux/command_teleop_android ++ timeout : 0.5 ++ priority: 90 ++- ++ name : teleop_joystick ++ topic : twist_mux/command_teleop_joy ++ timeout : 0.25 ++ priority: 100 +diff --git a/cob_hardware_config/robots/cob4-19_tmp/config/velocity_smoother.yaml b/cob_hardware_config/robots/cob4-19_tmp/config/velocity_smoother.yaml +new file mode 100644 +index 0000000..8a0ff13 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/config/velocity_smoother.yaml +@@ -0,0 +1,23 @@ ++# Example configuration: ++# - velocity limits are around a 10% above the physical limits ++# - acceleration limits are just low enough to avoid jerking ++ ++# Mandatory parameters ++speed_lim_vx: 1.2 ++speed_lim_vy: 1.0 ++speed_lim_w: 1.2 ++ ++accel_lim_vx: 0.5 ++accel_lim_vy: 0.5 ++accel_lim_w: 0.5 ++ ++# Optional parameters ++frequency: 50.0 ++decel_factor: 1.5 #used if zero velocity is received or goal velocity is far away from current velocity ++decel_factor_safe: 2.5 #used if no velocity commands received (eg. no deadman on joystick) ++ ++# Robot velocity feedback type: ++# 0 - none ++# 1 - odometry ++# 2 - end robot commands ++robot_feedback: 1 +diff --git a/cob_hardware_config/robots/cob4-19_tmp/urdf/calibration_default.urdf.xacro b/cob_hardware_config/robots/cob4-19_tmp/urdf/calibration_default.urdf.xacro +new file mode 100644 +index 0000000..8f90da0 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/urdf/calibration_default.urdf.xacro +@@ -0,0 +1,99 @@ ++ ++ ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++ ++  ++  ++  ++  ++  ++  ++  ++ ++  ++  ++  ++  ++  ++  ++  ++ ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++ ++  ++  ++  ++  ++  ++  ++  ++ ++  ++  ++  ++  ++  ++  ++  ++ ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++ ++  ++  ++  ++  ++  ++  ++  ++ ++  ++  ++  ++  ++  ++  ++  ++ ++  ++  ++  ++  ++  ++  ++  ++ ++  ++  ++  ++  ++  ++  ++  ++ +diff --git a/cob_hardware_config/robots/cob4-19_tmp/urdf/cob4-19.urdf.xacro b/cob_hardware_config/robots/cob4-19_tmp/urdf/cob4-19.urdf.xacro +new file mode 100644 +index 0000000..a14f580 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/urdf/cob4-19.urdf.xacro +@@ -0,0 +1,91 @@ ++ ++ ++ ++  ++  ++  ++ ++  ++  ++ ++  ++  ++ ++  ++  ++ ++  ++  ++ ++  ++  ++ ++  ++  ++  ++  ++  ++ ++ ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++ ++ ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++ ++  ++  ++  ++  ++  ++  ++ ++  ++  ++  ++  ++  ++  ++ ++  ++ ++  ++  ++  ++  ++  ++ ++  ++ ++  ++  ++  ++  ++  ++ +diff --git a/cob_hardware_config/robots/cob4-19_tmp/urdf/properties.urdf.xacro b/cob_hardware_config/robots/cob4-19_tmp/urdf/properties.urdf.xacro +new file mode 100644 +index 0000000..74d9423 +--- /dev/null ++++ b/cob_hardware_config/robots/cob4-19_tmp/urdf/properties.urdf.xacro +@@ -0,0 +1,102 @@ ++ ++ ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++ ++  ++  ++  ++  ++  ++  ++  ++ ++  ++  ++  ++  ++  ++  ++  ++ ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++ ++  ++  ++  ++  ++  ++  ++  ++ ++  ++  ++  ++  ++  ++  ++  ++ ++  ++  ++  ++  ++  ++  ++  ++  ++  ++  ++ ++  ++  ++  ++  ++  ++  ++  ++ ++  ++  ++  ++  ++  ++  ++  ++ ++  ++  ++  ++  ++  ++  ++  ++ ++  ++  ++  ++  ++  ++  ++  ++ +diff --git a/cob_hardware_config/robots/cob4-3/config/joint_state_publisher.yaml b/cob_hardware_config/robots/cob4-3/config/joint_state_publisher.yaml +index 7323d80..3b43042 100644 +--- a/cob_hardware_config/robots/cob4-3/config/joint_state_publisher.yaml ++++ b/cob_hardware_config/robots/cob4-3/config/joint_state_publisher.yaml +@@ -1,2 +1,2 @@ + rate: 100 #Hz +-source_list: [/base/joint_states] ++source_list: [base/joint_states] +diff --git a/cob_hardware_config/robots/raw3-1/config/base_controller.yaml b/cob_hardware_config/robots/raw3-1/config/base_controller.yaml +new file mode 120000 +index 0000000..89a0739 +--- /dev/null ++++ b/cob_hardware_config/robots/raw3-1/config/base_controller.yaml +@@ -0,0 +1 @@ ++../../raw3/config/raw3_base_controller.yaml +\ No newline at end of file +diff --git a/cob_hardware_config/robots/raw3-1/config/base_laser_filter.yaml b/cob_hardware_config/robots/raw3-1/config/base_laser_filter.yaml +new file mode 100644 +index 0000000..bd5152b +--- /dev/null ++++ b/cob_hardware_config/robots/raw3-1/config/base_laser_filter.yaml +@@ -0,0 +1,7 @@ ++scan_filter_chain: ++ - name: range ++ type: LaserScanRangeFilter ++ params: ++ use_message_range_limits: true ++ upper_threshold: 29.5 ++ upper_replacement_value: 29.5 +diff --git a/cob_hardware_config/robots/raw3-1/config/joint_state_publisher.yaml b/cob_hardware_config/robots/raw3-1/config/joint_state_publisher.yaml +index a13950e..db139f3 100644 +--- a/cob_hardware_config/robots/raw3-1/config/joint_state_publisher.yaml ++++ b/cob_hardware_config/robots/raw3-1/config/joint_state_publisher.yaml +@@ -1,2 +1,2 @@ + rate: 100 #Hz +-source_list: [/base/joint_states, /arm/joint_states, /torso/joint_states] ++source_list: [base/joint_states, arm/joint_states, torso/joint_states] +diff --git a/cob_hardware_config/robots/raw3-1/urdf/calibration_default.urdf.xacro b/cob_hardware_config/robots/raw3-1/urdf/calibration_default.urdf.xacro +index 8ddffad..3895af3 100644 +--- a/cob_hardware_config/robots/raw3-1/urdf/calibration_default.urdf.xacro ++++ b/cob_hardware_config/robots/raw3-1/urdf/calibration_default.urdf.xacro +@@ -6,7 +6,7 @@ +  +  +  +-  ++  +  +  +  +@@ -14,7 +14,7 @@ +  +  +  +-  ++  +  +  +  +diff --git a/cob_hardware_config/robots/raw3-1/urdf/raw3-1.urdf.xacro b/cob_hardware_config/robots/raw3-1/urdf/raw3-1.urdf.xacro +index 2362e46..3ba0b09 100644 +--- a/cob_hardware_config/robots/raw3-1/urdf/raw3-1.urdf.xacro ++++ b/cob_hardware_config/robots/raw3-1/urdf/raw3-1.urdf.xacro +@@ -38,20 +38,20 @@ +  +  +  +-  +-  +-  ++  ++  ++  +  +-  +-  +-  ++  ++  ++  +  +-  +-  +-  ++  ++  ++  +  +-  +-  +-  ++  ++  ++  +  +  +diff --git a/cob_hardware_config/robots/raw3-3/config/base_controller.yaml b/cob_hardware_config/robots/raw3-3/config/base_controller.yaml +new file mode 120000 +index 0000000..89a0739 +--- /dev/null ++++ b/cob_hardware_config/robots/raw3-3/config/base_controller.yaml +@@ -0,0 +1 @@ ++../../raw3/config/raw3_base_controller.yaml +\ No newline at end of file +diff --git a/cob_hardware_config/robots/raw3-3/config/joint_state_publisher.yaml b/cob_hardware_config/robots/raw3-3/config/joint_state_publisher.yaml +index 7323d80..3b43042 100644 +--- a/cob_hardware_config/robots/raw3-3/config/joint_state_publisher.yaml ++++ b/cob_hardware_config/robots/raw3-3/config/joint_state_publisher.yaml +@@ -1,2 +1,2 @@ + rate: 100 #Hz +-source_list: [/base/joint_states] ++source_list: [base/joint_states] +diff --git a/cob_hardware_config/robots/raw3-3/urdf/calibration_default.urdf.xacro b/cob_hardware_config/robots/raw3-3/urdf/calibration_default.urdf.xacro +index a233752..88e9f06 100644 +--- a/cob_hardware_config/robots/raw3-3/urdf/calibration_default.urdf.xacro ++++ b/cob_hardware_config/robots/raw3-3/urdf/calibration_default.urdf.xacro +@@ -6,7 +6,7 @@ +  +  +  +-  ++  +  +  +  +@@ -14,7 +14,7 @@ +  +  +  +-  ++  +  +  +  +diff --git a/cob_hardware_config/robots/raw3/config/scan_unifier_filter.yaml b/cob_hardware_config/robots/raw3/config/scan_unifier_filter.yaml +index 3ac1012..bd5152b 100644 +--- a/cob_hardware_config/robots/raw3/config/scan_unifier_filter.yaml ++++ b/cob_hardware_config/robots/raw3/config/scan_unifier_filter.yaml +@@ -2,6 +2,6 @@ scan_filter_chain: + - name: range + type: LaserScanRangeFilter + params: +- use_message_range_limits: false +- upper_threshold: 10.0 +- upper_replacement_value: 10.0 ++ use_message_range_limits: true ++ upper_threshold: 29.5 ++ upper_replacement_value: 29.5 +diff --git a/cob_hardware_config/upload_robot.launch b/cob_hardware_config/upload_robot.launch +index f8f79aa..8f81dc7 100644 +--- a/cob_hardware_config/upload_robot.launch ++++ b/cob_hardware_config/upload_robot.launch +@@ -2,9 +2,10 @@ +  +  +  ++  +  +  +  +-  ++  +  +  diff --git a/cob_bringup/components/cob4_base.launch b/cob_bringup/components/cob4_base.launch index bedfbac8e..d496dc1c1 100644 --- a/cob_bringup/components/cob4_base.launch +++ b/cob_bringup/components/cob4_base.launch @@ -5,6 +5,7 @@ + @@ -14,9 +15,9 @@ - + diff --git a/cob_bringup/components/raw3_base.launch b/cob_bringup/components/raw3_base.launch index 65ea310d7..2808b69c4 100644 --- a/cob_bringup/components/raw3_base.launch +++ b/cob_bringup/components/raw3_base.launch @@ -5,6 +5,7 @@ + @@ -19,6 +20,7 @@ + diff --git a/cob_bringup/components/ros_control_base.launch b/cob_bringup/components/ros_control_base.launch index 36ada43dd..ba8d37a57 100644 --- a/cob_bringup/components/ros_control_base.launch +++ b/cob_bringup/components/ros_control_base.launch @@ -3,6 +3,7 @@ + @@ -37,9 +38,18 @@ - - - + + + + + + + + + + + + diff --git a/cob_bringup/robot.launch b/cob_bringup/robot.launch index 0e911fcee..2c3c12a6e 100644 --- a/cob_bringup/robot.launch +++ b/cob_bringup/robot.launch @@ -1,12 +1,16 @@ - + + + + + diff --git a/cob_bringup/robots/cob4-18.launch b/cob_bringup/robots/cob4-18.launch index 0bbd51ca3..671d45d5e 100644 --- a/cob_bringup/robots/cob4-18.launch +++ b/cob_bringup/robots/cob4-18.launch @@ -1,11 +1,17 @@ + + - + + + + + diff --git a/cob_bringup/robots/cob4-18.xml b/cob_bringup/robots/cob4-18.xml index d4242f253..ee898545f 100644 --- a/cob_bringup/robots/cob4-18.xml +++ b/cob_bringup/robots/cob4-18.xml @@ -1,11 +1,11 @@ - + @@ -56,6 +56,7 @@ + diff --git a/cob_bringup/robots/raw3-1.launch b/cob_bringup/robots/raw3-1.launch index 120c73ba7..c28d524c7 100644 --- a/cob_bringup/robots/raw3-1.launch +++ b/cob_bringup/robots/raw3-1.launch @@ -1,13 +1,18 @@ + + - - - + + + + + + diff --git a/cob_bringup/robots/raw3-1.xml b/cob_bringup/robots/raw3-1.xml index 0dff1556a..c884982a3 100644 --- a/cob_bringup/robots/raw3-1.xml +++ b/cob_bringup/robots/raw3-1.xml @@ -9,6 +9,7 @@ + @@ -51,6 +52,7 @@ + diff --git a/cob_bringup/robots/raw3-3.launch b/cob_bringup/robots/raw3-3.launch index b22fe8e53..712de5669 100644 --- a/cob_bringup/robots/raw3-3.launch +++ b/cob_bringup/robots/raw3-3.launch @@ -1,10 +1,14 @@ + + + + - + \ No newline at end of file diff --git a/cob_bringup/robots/raw3-3.xml b/cob_bringup/robots/raw3-3.xml index 68fe05825..d4e4449a9 100644 --- a/cob_bringup/robots/raw3-3.xml +++ b/cob_bringup/robots/raw3-3.xml @@ -8,6 +8,7 @@ + @@ -54,6 +55,7 @@ + diff --git a/cob_bringup/tools/base_collision_observer.launch b/cob_bringup/tools/base_collision_observer.launch index 96b76585d..735228cc1 100644 --- a/cob_bringup/tools/base_collision_observer.launch +++ b/cob_bringup/tools/base_collision_observer.launch @@ -7,10 +7,10 @@ - + - - + + diff --git a/cob_bringup/tools/battery_monitor.launch b/cob_bringup/tools/battery_monitor.launch index 20e49a83b..850d3bfc4 100644 --- a/cob_bringup/tools/battery_monitor.launch +++ b/cob_bringup/tools/battery_monitor.launch @@ -7,7 +7,6 @@ - diff --git a/cob_bringup/tools/robot_state_publisher.launch b/cob_bringup/tools/robot_state_publisher.launch index 0773a17eb..6ec8599ab 100644 --- a/cob_bringup/tools/robot_state_publisher.launch +++ b/cob_bringup/tools/robot_state_publisher.launch @@ -3,12 +3,13 @@ + - + + + - - diff --git a/cob_hardware_config/robots/cob4-18/config/base_controller.yaml b/cob_hardware_config/robots/cob4-18/config/base_controller.yaml new file mode 120000 index 000000000..6fec99be8 --- /dev/null +++ b/cob_hardware_config/robots/cob4-18/config/base_controller.yaml @@ -0,0 +1 @@ +../../cob4/config/cob4_base_controller.yaml \ No newline at end of file diff --git a/cob_hardware_config/robots/cob4-18/config/base_laser_filter.yaml b/cob_hardware_config/robots/cob4-18/config/base_laser_filter.yaml new file mode 100644 index 000000000..bd5152b72 --- /dev/null +++ b/cob_hardware_config/robots/cob4-18/config/base_laser_filter.yaml @@ -0,0 +1,7 @@ +scan_filter_chain: + - name: range + type: LaserScanRangeFilter + params: + use_message_range_limits: true + upper_threshold: 29.5 + upper_replacement_value: 29.5 diff --git a/cob_hardware_config/robots/cob4-18/config/joint_state_publisher.yaml b/cob_hardware_config/robots/cob4-18/config/joint_state_publisher.yaml index 3b850eaab..9fb44b5de 100644 --- a/cob_hardware_config/robots/cob4-18/config/joint_state_publisher.yaml +++ b/cob_hardware_config/robots/cob4-18/config/joint_state_publisher.yaml @@ -1,2 +1,2 @@ rate: 100 #Hz -source_list: [/base/joint_states] \ No newline at end of file +source_list: [base/joint_states] \ No newline at end of file diff --git a/cob_hardware_config/robots/cob4-3/config/joint_state_publisher.yaml b/cob_hardware_config/robots/cob4-3/config/joint_state_publisher.yaml index 7323d80b6..3b430422c 100644 --- a/cob_hardware_config/robots/cob4-3/config/joint_state_publisher.yaml +++ b/cob_hardware_config/robots/cob4-3/config/joint_state_publisher.yaml @@ -1,2 +1,2 @@ rate: 100 #Hz -source_list: [/base/joint_states] +source_list: [base/joint_states] diff --git a/cob_hardware_config/robots/raw3-1/config/base_controller.yaml b/cob_hardware_config/robots/raw3-1/config/base_controller.yaml new file mode 120000 index 000000000..89a0739ee --- /dev/null +++ b/cob_hardware_config/robots/raw3-1/config/base_controller.yaml @@ -0,0 +1 @@ +../../raw3/config/raw3_base_controller.yaml \ No newline at end of file diff --git a/cob_hardware_config/robots/raw3-1/config/base_laser_filter.yaml b/cob_hardware_config/robots/raw3-1/config/base_laser_filter.yaml new file mode 100644 index 000000000..bd5152b72 --- /dev/null +++ b/cob_hardware_config/robots/raw3-1/config/base_laser_filter.yaml @@ -0,0 +1,7 @@ +scan_filter_chain: + - name: range + type: LaserScanRangeFilter + params: + use_message_range_limits: true + upper_threshold: 29.5 + upper_replacement_value: 29.5 diff --git a/cob_hardware_config/robots/raw3-1/config/joint_state_publisher.yaml b/cob_hardware_config/robots/raw3-1/config/joint_state_publisher.yaml index a13950e1e..db139f369 100644 --- a/cob_hardware_config/robots/raw3-1/config/joint_state_publisher.yaml +++ b/cob_hardware_config/robots/raw3-1/config/joint_state_publisher.yaml @@ -1,2 +1,2 @@ rate: 100 #Hz -source_list: [/base/joint_states, /arm/joint_states, /torso/joint_states] +source_list: [base/joint_states, arm/joint_states, torso/joint_states] diff --git a/cob_hardware_config/robots/raw3-3/config/base_controller.yaml b/cob_hardware_config/robots/raw3-3/config/base_controller.yaml new file mode 120000 index 000000000..89a0739ee --- /dev/null +++ b/cob_hardware_config/robots/raw3-3/config/base_controller.yaml @@ -0,0 +1 @@ +../../raw3/config/raw3_base_controller.yaml \ No newline at end of file diff --git a/cob_hardware_config/robots/raw3-3/config/joint_state_publisher.yaml b/cob_hardware_config/robots/raw3-3/config/joint_state_publisher.yaml index 7323d80b6..3b430422c 100644 --- a/cob_hardware_config/robots/raw3-3/config/joint_state_publisher.yaml +++ b/cob_hardware_config/robots/raw3-3/config/joint_state_publisher.yaml @@ -1,2 +1,2 @@ rate: 100 #Hz -source_list: [/base/joint_states] +source_list: [base/joint_states] diff --git a/cob_hardware_config/robots/raw3/config/scan_unifier_filter.yaml b/cob_hardware_config/robots/raw3/config/scan_unifier_filter.yaml index 3ac10129f..bd5152b72 100644 --- a/cob_hardware_config/robots/raw3/config/scan_unifier_filter.yaml +++ b/cob_hardware_config/robots/raw3/config/scan_unifier_filter.yaml @@ -2,6 +2,6 @@ scan_filter_chain: - name: range type: LaserScanRangeFilter params: - use_message_range_limits: false - upper_threshold: 10.0 - upper_replacement_value: 10.0 + use_message_range_limits: true + upper_threshold: 29.5 + upper_replacement_value: 29.5 diff --git a/cob_hardware_config/upload_robot.launch b/cob_hardware_config/upload_robot.launch index f8f79aa36..8f81dc75b 100644 --- a/cob_hardware_config/upload_robot.launch +++ b/cob_hardware_config/upload_robot.launch @@ -2,9 +2,10 @@ + - +