Merge lp:sr-ros-interface into lp:sr-ros-interface/release1.2
- trunk
- Merge into release1.2
Proposed by
Ugo
Status: | Merged |
---|---|
Approved by: | Ugo |
Approved revision: | 117 |
Merged at revision: | 2 |
Proposed branch: | lp:sr-ros-interface |
Merge into: | lp:sr-ros-interface/release1.2 |
Diff against target: |
27147 lines (+25444/-0) (has conflicts) 283 files modified
.bzrignore (+96/-0) shadow_robot/README.txt (+17/-0) shadow_robot/cyberglove/.cproject (+575/-0) shadow_robot/cyberglove/.project (+116/-0) shadow_robot/cyberglove/CMakeLists.txt (+34/-0) shadow_robot/cyberglove/Makefile (+1/-0) shadow_robot/cyberglove/Ogre.log (+419/-0) shadow_robot/cyberglove/cmake_install.cmake (+44/-0) shadow_robot/cyberglove/create_eclipse_project (+9/-0) shadow_robot/cyberglove/cyberglove.launch (+20/-0) shadow_robot/cyberglove/include/cyberglove/cyberglove_publisher.h (+71/-0) shadow_robot/cyberglove/include/cyberglove/cyberglove_service.h (+47/-0) shadow_robot/cyberglove/include/cyberglove/serial_glove.h (+48/-0) shadow_robot/cyberglove/include/cyberglove/xml_calibration_parser.h (+119/-0) shadow_robot/cyberglove/mainpage.dox (+32/-0) shadow_robot/cyberglove/manifest.xml (+29/-0) shadow_robot/cyberglove/model/cyberglove.xml (+129/-0) shadow_robot/cyberglove/python_lib/cyberglove_calibrer.py (+317/-0) shadow_robot/cyberglove/python_lib/cyberglove_library.py (+152/-0) shadow_robot/cyberglove/python_lib/cyberglove_mapper.py (+355/-0) shadow_robot/cyberglove/src/cyberglove_node.cpp (+53/-0) shadow_robot/cyberglove/src/cyberglove_publisher.cpp (+222/-0) shadow_robot/cyberglove/src/cyberglove_service.cpp (+40/-0) shadow_robot/cyberglove/src/serial_glove.c (+236/-0) shadow_robot/cyberglove/src/xml_calibration_parser.cpp (+308/-0) shadow_robot/cyberglove/srv/Calibration.srv (+3/-0) shadow_robot/cyberglove/srv/Start.srv (+3/-0) shadow_robot/cyberglove/test/cyberglove_test.cal (+19/-0) shadow_robot/cyberglove/test/test_calibration.cpp (+136/-0) shadow_robot/dataglove/CMakeLists.txt (+17/-0) shadow_robot/dataglove/Makefile (+1/-0) shadow_robot/dataglove/dataglove_processing/CMakeLists.txt (+34/-0) shadow_robot/dataglove/dataglove_processing/Makefile (+1/-0) shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/data_analyser.h (+41/-0) shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/database_mapping.h (+41/-0) shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/hand_model.h (+52/-0) shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/joint_data.h (+46/-0) shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/message_publisher.h (+56/-0) shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/optical_dataglove.h (+45/-0) shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/position_mapper.h (+44/-0) shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/reverse_kinematics.h (+32/-0) shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/three_dimensions.h (+32/-0) shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/two_dimensions.h (+32/-0) shadow_robot/dataglove/dataglove_processing/launch/usb_camera.launch (+11/-0) shadow_robot/dataglove/dataglove_processing/mainpage.dox (+43/-0) shadow_robot/dataglove/dataglove_processing/manifest.xml (+23/-0) shadow_robot/dataglove/dataglove_processing/src/database_mapping.cpp (+62/-0) shadow_robot/dataglove/dataglove_processing/src/message_publisher.cpp (+55/-0) shadow_robot/dataglove/dataglove_processing/src/optical_dataglove.cpp (+60/-0) shadow_robot/dataglove/dataglove_processing/src/optical_dataglove_node.cpp (+47/-0) shadow_robot/dataglove/dataglove_processing/src/opticaldataglove/srv/_Start.py (+199/-0) shadow_robot/dataglove/dataglove_processing/src/opticaldataglove/srv/_Stop.py (+199/-0) shadow_robot/dataglove/dataglove_processing/src/opticaldataglove/srv/__init__.py (+2/-0) shadow_robot/dataglove/dataglove_processing/src/reverse_kinematics.cpp (+62/-0) shadow_robot/dataglove/dataglove_processing/src/three_dimensions.cpp (+31/-0) shadow_robot/dataglove/dataglove_processing/src/two_dimensions.cpp (+31/-0) shadow_robot/dataglove/dataglove_processing/srv/Start.srv (+2/-0) shadow_robot/dataglove/dataglove_processing/srv/Stop.srv (+2/-0) shadow_robot/dataglove/dataglove_processing/test/test_usb_cam.launch (+13/-0) shadow_robot/dataglove/optical_acquisition/CMakeLists.txt (+30/-0) shadow_robot/dataglove/optical_acquisition/Makefile (+1/-0) shadow_robot/dataglove/optical_acquisition/camera_left.yaml (+19/-0) shadow_robot/dataglove/optical_acquisition/camera_left_backup.yaml (+19/-0) shadow_robot/dataglove/optical_acquisition/camera_right.yaml (+19/-0) shadow_robot/dataglove/optical_acquisition/launch_left.launch (+11/-0) shadow_robot/dataglove/optical_acquisition/launch_right.launch (+9/-0) shadow_robot/dataglove/optical_acquisition/mainpage.dox (+26/-0) shadow_robot/dataglove/optical_acquisition/manifest.xml (+18/-0) shadow_robot/dataglove/optical_synchronizer/CMakeLists.txt (+32/-0) shadow_robot/dataglove/optical_synchronizer/Makefile (+1/-0) shadow_robot/dataglove/optical_synchronizer/PARAM_VALUES.txt (+13/-0) shadow_robot/dataglove/optical_synchronizer/include/camera_synchronizer.h (+52/-0) shadow_robot/dataglove/optical_synchronizer/mainpage.dox (+26/-0) shadow_robot/dataglove/optical_synchronizer/manifest.xml (+15/-0) shadow_robot/dataglove/optical_synchronizer/src/camera_synchronizer.cpp (+136/-0) shadow_robot/dataglove/optical_synchronizer/src/camera_synchronizer_node.cpp (+32/-0) shadow_robot/dataglove/optical_synchronizer/start_all.launch (+27/-0) shadow_robot/dataglove/optical_synchronizer/startsync.launch (+16/-0) shadow_robot/dataglove/stack.xml (+9/-0) shadow_robot/doc/doxygen/sr_hand.config (+1551/-0) shadow_robot/doc/generate_doc.sh (+33/-0) shadow_robot/rosdep.yaml (+10/-0) shadow_robot/sr_control_gui/CMakeLists.txt (+30/-0) shadow_robot/sr_control_gui/Makefile (+1/-0) shadow_robot/sr_control_gui/epydoc.config (+9/-0) shadow_robot/sr_control_gui/mainpage.dox (+23/-0) shadow_robot/sr_control_gui/manifest.xml (+24/-0) shadow_robot/sr_control_gui/param/GloveToHandMappings (+22/-0) shadow_robot/sr_control_gui/param/GloveToHandMappings_generic (+22/-0) shadow_robot/sr_control_gui/param/cyberglove.cal (+91/-0) shadow_robot/sr_control_gui/param/shadowhandtocybergrasp.cal (+31/-0) shadow_robot/sr_control_gui/rosdoc.yaml (+2/-0) shadow_robot/sr_control_gui/saved_scripts/example.xml (+30/-0) shadow_robot/sr_control_gui/src/sr_control_gui/config.py (+88/-0) shadow_robot/sr_control_gui/src/sr_control_gui/dock_widgets/generic_dock_widget.py (+31/-0) shadow_robot/sr_control_gui/src/sr_control_gui/dock_widgets/robot_and_libraries_backend.py (+201/-0) shadow_robot/sr_control_gui/src/sr_control_gui/dock_widgets/robot_and_libraries_dock_widget.py (+387/-0) shadow_robot/sr_control_gui/src/sr_control_gui/main_widget.py (+137/-0) shadow_robot/sr_control_gui/src/sr_control_gui/main_window.py (+128/-0) shadow_robot/sr_control_gui/src/sr_control_gui/plugins/arm_joint_sliders.yapsy-plugin (+9/-0) shadow_robot/sr_control_gui/src/sr_control_gui/plugins/arm_joint_sliders/__init__.py (+27/-0) shadow_robot/sr_control_gui/src/sr_control_gui/plugins/cyberglove_calibrator_plugin.yapsy-plugin (+9/-0) shadow_robot/sr_control_gui/src/sr_control_gui/plugins/cyberglove_calibrator_plugin/__init__.py (+342/-0) shadow_robot/sr_control_gui/src/sr_control_gui/plugins/cyberglove_generic_plugin.py (+42/-0) shadow_robot/sr_control_gui/src/sr_control_gui/plugins/generic_plugin.py (+58/-0) shadow_robot/sr_control_gui/src/sr_control_gui/plugins/grasp_controller.yapsy-plugin (+9/-0) shadow_robot/sr_control_gui/src/sr_control_gui/plugins/grasp_controller/__init__.py (+360/-0) shadow_robot/sr_control_gui/src/sr_control_gui/plugins/hand_joint_sliders.yapsy-plugin (+9/-0) shadow_robot/sr_control_gui/src/sr_control_gui/plugins/hand_joint_sliders/__init__.py (+44/-0) shadow_robot/sr_control_gui/src/sr_control_gui/plugins/joint_slider.py (+140/-0) shadow_robot/sr_control_gui/src/sr_control_gui/plugins/movement_recorder.yapsy-plugin (+9/-0) shadow_robot/sr_control_gui/src/sr_control_gui/plugins/movement_recorder/__init__.py (+511/-0) shadow_robot/sr_control_gui/src/sr_control_gui/plugins/shadow_generic_plugin.py (+32/-0) shadow_robot/sr_control_gui/src/sr_control_gui/sr_control_gui (+14/-0) shadow_robot/sr_convenient_dependencies/CMakeLists.txt (+30/-0) shadow_robot/sr_convenient_dependencies/Makefile (+1/-0) shadow_robot/sr_convenient_dependencies/mainpage.dox (+8/-0) shadow_robot/sr_convenient_dependencies/manifest.xml (+21/-0) shadow_robot/sr_display/.project (+110/-0) shadow_robot/sr_display/CMakeLists.txt (+32/-0) shadow_robot/sr_display/Makefile (+1/-0) shadow_robot/sr_display/include/sr_display/display_check.h (+60/-0) shadow_robot/sr_display/include/sr_display/motor_data.h (+153/-0) shadow_robot/sr_display/include/sr_display/motor_info_publisher.h (+76/-0) shadow_robot/sr_display/include/sr_display/xml_name_parser.h (+47/-0) shadow_robot/sr_display/mainpage.dox (+65/-0) shadow_robot/sr_display/manifest.xml (+21/-0) shadow_robot/sr_display/sr_display.launch (+5/-0) shadow_robot/sr_display/src/display_check.cpp (+88/-0) shadow_robot/sr_display/src/display_check_client.cpp (+48/-0) shadow_robot/sr_display/src/motor_data.cpp (+411/-0) shadow_robot/sr_display/src/motor_info_publisher.cpp (+222/-0) shadow_robot/sr_display/src/motor_info_publisher_node.cpp (+46/-0) shadow_robot/sr_display/src/xml_name_parser.cpp (+82/-0) shadow_robot/sr_display/srv/display_check.srv (+5/-0) shadow_robot/sr_hand/CMakeLists.txt (+70/-0) shadow_robot/sr_hand/Makefile (+1/-0) shadow_robot/sr_hand/examples/link_joints.cpp (+127/-0) shadow_robot/sr_hand/examples/link_joints.py (+49/-0) shadow_robot/sr_hand/examples/shadowhand_publisher.py (+53/-0) shadow_robot/sr_hand/examples/shadowhand_subscriber.py (+31/-0) shadow_robot/sr_hand/include/sr_hand/hand/real_shadowhand.h (+60/-0) shadow_robot/sr_hand/include/sr_hand/hand/sr_articulated_robot.h (+322/-0) shadow_robot/sr_hand/include/sr_hand/hand/virtual_arm.h (+102/-0) shadow_robot/sr_hand/include/sr_hand/hand/virtual_shadowhand.h (+114/-0) shadow_robot/sr_hand/include/sr_hand/sr_diagnosticer.h (+87/-0) shadow_robot/sr_hand/include/sr_hand/sr_publisher.h (+87/-0) shadow_robot/sr_hand/include/sr_hand/sr_subscriber.h (+155/-0) shadow_robot/sr_hand/include/sr_hand/sr_tactile_sensor_pub.h (+50/-0) shadow_robot/sr_hand/launch/gazebo/empty.world (+160/-0) shadow_robot/sr_hand/launch/gazebo/empty_world.launch (+7/-0) shadow_robot/sr_hand/launch/gazebo/gazebo_arm_and_hand_motor.launch (+45/-0) shadow_robot/sr_hand/launch/gazebo/gazebo_arm_and_hand_muscle.launch (+45/-0) shadow_robot/sr_hand/launch/gazebo/gazebo_arm_motor.launch (+20/-0) shadow_robot/sr_hand/launch/gazebo/gazebo_arm_muscle.launch (+20/-0) shadow_robot/sr_hand/launch/gazebo/gazebo_hand_motor.launch (+40/-0) shadow_robot/sr_hand/launch/gazebo/gazebo_hand_muscle.launch (+40/-0) shadow_robot/sr_hand/launch/rviz_motor.launch (+6/-0) shadow_robot/sr_hand/launch/rviz_muscle.launch (+5/-0) shadow_robot/sr_hand/launch/sr_arm_motor.launch (+97/-0) shadow_robot/sr_hand/launch/sr_arm_muscle.launch (+97/-0) shadow_robot/sr_hand/launch/srh_motor.launch (+46/-0) shadow_robot/sr_hand/launch/srh_muscle.launch (+46/-0) shadow_robot/sr_hand/mainpage.dox (+249/-0) shadow_robot/sr_hand/manifest.xml (+31/-0) shadow_robot/sr_hand/model/arm_urdf/arm_controller.yaml (+36/-0) shadow_robot/sr_hand/model/arm_urdf/base/shadowarm_base.urdf.xacro (+42/-0) shadow_robot/sr_hand/model/arm_urdf/full_arm_motor.urdf.xacro (+32/-0) shadow_robot/sr_hand/model/arm_urdf/full_arm_muscle.urdf.xacro (+32/-0) shadow_robot/sr_hand/model/arm_urdf/hand_support/shadowarm_handsupport_motor.transmission.xacro (+19/-0) shadow_robot/sr_hand/model/arm_urdf/hand_support/shadowarm_handsupport_motor.urdf.xacro (+46/-0) shadow_robot/sr_hand/model/arm_urdf/hand_support/shadowarm_handsupport_muscle.transmission.xacro (+19/-0) shadow_robot/sr_hand/model/arm_urdf/hand_support/shadowarm_handsupport_muscle.urdf.xacro (+46/-0) shadow_robot/sr_hand/model/arm_urdf/lower_arm/shadowarm_lowerarm.transmission.xacro (+19/-0) shadow_robot/sr_hand/model/arm_urdf/lower_arm/shadowarm_lowerarm.urdf.xacro (+46/-0) shadow_robot/sr_hand/model/arm_urdf/trunk/shadowarm_trunk.transmission.xacro (+19/-0) shadow_robot/sr_hand/model/arm_urdf/trunk/shadowarm_trunk.urdf.xacro (+47/-0) shadow_robot/sr_hand/model/arm_urdf/upper_arm/shadowarm_upperarm.transmission.xacro (+19/-0) shadow_robot/sr_hand/model/arm_urdf/upper_arm/shadowarm_upperarm.urdf.xacro (+45/-0) shadow_robot/sr_hand/model/gazebo/gazebo.urdf.xacro (+13/-0) shadow_robot/sr_hand/model/hand_urdf/finger/classic_finger.urdf.xacro (+26/-0) shadow_robot/sr_hand/model/hand_urdf/finger/distal/distal.transmission.xacro (+19/-0) shadow_robot/sr_hand/model/hand_urdf/finger/distal/distal.urdf.xacro (+46/-0) shadow_robot/sr_hand/model/hand_urdf/finger/knuckle/knuckle.transmission.xacro (+19/-0) shadow_robot/sr_hand/model/hand_urdf/finger/knuckle/knuckle.urdf.xacro (+48/-0) shadow_robot/sr_hand/model/hand_urdf/finger/lfmetacarpal/lfmetacarpal.transmission.xacro (+19/-0) shadow_robot/sr_hand/model/hand_urdf/finger/lfmetacarpal/lfmetacarpal.urdf.xacro (+46/-0) shadow_robot/sr_hand/model/hand_urdf/finger/little_finger.urdf.xacro (+68/-0) shadow_robot/sr_hand/model/hand_urdf/finger/middle/middle.transmission.xacro (+19/-0) shadow_robot/sr_hand/model/hand_urdf/finger/middle/middle.urdf.xacro (+46/-0) shadow_robot/sr_hand/model/hand_urdf/finger/proximal/proximal.transmission.xacro (+19/-0) shadow_robot/sr_hand/model/hand_urdf/finger/proximal/proximal.urdf.xacro (+46/-0) shadow_robot/sr_hand/model/hand_urdf/forearm/forearm_motor.urdf.xacro (+34/-0) shadow_robot/sr_hand/model/hand_urdf/forearm/forearm_muscle.urdf.xacro (+35/-0) shadow_robot/sr_hand/model/hand_urdf/full_hand_motor.urdf.xacro (+48/-0) shadow_robot/sr_hand/model/hand_urdf/full_hand_muscle.urdf.xacro (+48/-0) shadow_robot/sr_hand/model/hand_urdf/hand_controller.yaml (+215/-0) shadow_robot/sr_hand/model/hand_urdf/palm/palm.transmission.xacro (+19/-0) shadow_robot/sr_hand/model/hand_urdf/palm/palm.urdf.xacro (+46/-0) shadow_robot/sr_hand/model/hand_urdf/thumb/thbase.transmission.xacro (+19/-0) shadow_robot/sr_hand/model/hand_urdf/thumb/thbase.urdf.xacro (+48/-0) shadow_robot/sr_hand/model/hand_urdf/thumb/thdistal.transmission.xacro (+19/-0) shadow_robot/sr_hand/model/hand_urdf/thumb/thdistal.urdf.xacro (+48/-0) shadow_robot/sr_hand/model/hand_urdf/thumb/thhub.transmission.xacro (+19/-0) shadow_robot/sr_hand/model/hand_urdf/thumb/thhub.urdf.xacro (+48/-0) shadow_robot/sr_hand/model/hand_urdf/thumb/thmiddle.transmission.xacro (+19/-0) shadow_robot/sr_hand/model/hand_urdf/thumb/thmiddle.urdf.xacro (+48/-0) shadow_robot/sr_hand/model/hand_urdf/thumb/thproximal.transmission.xacro (+19/-0) shadow_robot/sr_hand/model/hand_urdf/thumb/thproximal.urdf.xacro (+48/-0) shadow_robot/sr_hand/model/hand_urdf/thumb/thumb.urdf.xacro (+28/-0) shadow_robot/sr_hand/model/hand_urdf/wrist/wrist.transmission.xacro (+19/-0) shadow_robot/sr_hand/model/hand_urdf/wrist/wrist.urdf.xacro (+49/-0) shadow_robot/sr_hand/model/materials.urdf.xacro (+28/-0) shadow_robot/sr_hand/model/robots/arm_and_hand_motor.urdf (+1180/-0) shadow_robot/sr_hand/model/robots/arm_and_hand_muscle.urdf (+1180/-0) shadow_robot/sr_hand/model/robots/shadowhand_motor.urdf (+986/-0) shadow_robot/sr_hand/model/robots/shadowhand_muscle.urdf (+986/-0) shadow_robot/sr_hand/model/robots/sr_arm_motor.urdf (+217/-0) shadow_robot/sr_hand/model/robots/sr_arm_muscle.urdf (+217/-0) shadow_robot/sr_hand/model/robots/xacro/arm_and_hand_motor.urdf.xacro (+24/-0) shadow_robot/sr_hand/model/robots/xacro/arm_and_hand_muscle.urdf.xacro (+24/-0) shadow_robot/sr_hand/model/robots/xacro/shadowhand_motor.urdf.xacro (+15/-0) shadow_robot/sr_hand/model/robots/xacro/shadowhand_muscle.urdf.xacro (+15/-0) shadow_robot/sr_hand/model/robots/xacro/sr_arm_motor.urdf.xacro (+14/-0) shadow_robot/sr_hand/model/robots/xacro/sr_arm_muscle.urdf.xacro (+14/-0) shadow_robot/sr_hand/model/sr_arm_motor.urdf (+134/-0) shadow_robot/sr_hand/msg/cartesian_data.msg (+2/-0) shadow_robot/sr_hand/msg/cartesian_position.msg (+8/-0) shadow_robot/sr_hand/msg/command.msg (+6/-0) shadow_robot/sr_hand/msg/config.msg (+5/-0) shadow_robot/sr_hand/msg/contrlr.msg (+40/-0) shadow_robot/sr_hand/msg/joint.msg (+7/-0) shadow_robot/sr_hand/msg/joints_data.msg (+2/-0) shadow_robot/sr_hand/msg/reverseKinematics.msg (+2/-0) shadow_robot/sr_hand/msg/sendupdate.msg (+3/-0) shadow_robot/sr_hand/python_lib/grasp/Grasp.py (+17/-0) shadow_robot/sr_hand/python_lib/grasp/grasps.xml (+188/-0) shadow_robot/sr_hand/python_lib/grasp/grasps_interpoler.py (+48/-0) shadow_robot/sr_hand/python_lib/grasp/grasps_parser.py (+87/-0) shadow_robot/sr_hand/python_lib/shadowhand_ros.py (+320/-0) shadow_robot/sr_hand/shadowhand_analyzer.yaml (+14/-0) shadow_robot/sr_hand/src/hand/real_shadowhand.cpp (+379/-0) shadow_robot/sr_hand/src/hand/real_shadowhand_node.cpp (+115/-0) shadow_robot/sr_hand/src/hand/sr_articulated_robot.cpp (+16/-0) shadow_robot/sr_hand/src/hand/virtual_arm.cpp (+257/-0) shadow_robot/sr_hand/src/hand/virtual_arm_node.cpp (+111/-0) shadow_robot/sr_hand/src/hand/virtual_shadowhand.cpp (+605/-0) shadow_robot/sr_hand/src/hand/virtual_shadowhand_node.cpp (+117/-0) shadow_robot/sr_hand/src/sr_diagnosticer.cpp (+582/-0) shadow_robot/sr_hand/src/sr_publisher.cpp (+126/-0) shadow_robot/sr_hand/src/sr_subscriber.cpp (+212/-0) shadow_robot/sr_hand/src/sr_tactile_sensor_pub.cpp (+109/-0) shadow_robot/sr_hand/src/sr_tactile_sensor_pub_node.cpp (+45/-0) shadow_robot/sr_remappers/CMakeLists.txt (+26/-0) shadow_robot/sr_remappers/Makefile (+1/-0) shadow_robot/sr_remappers/include/sr_remappers/calibration_parser.h (+77/-0) shadow_robot/sr_remappers/include/sr_remappers/shadowhand_to_cyberglove_remapper.h (+75/-0) shadow_robot/sr_remappers/include/sr_remappers/shadowhand_to_cybergrasp_remapper.h (+68/-0) shadow_robot/sr_remappers/mainpage.dox (+42/-0) shadow_robot/sr_remappers/manifest.xml (+25/-0) shadow_robot/sr_remappers/param/cyb.py (+34/-0) shadow_robot/sr_remappers/param/cyberglovetoshadowhand.map (+21/-0) shadow_robot/sr_remappers/param/cyberglovetoshadowhand_transposed.map (+22/-0) shadow_robot/sr_remappers/param/shadowhandtocybergrasp.cal (+31/-0) shadow_robot/sr_remappers/param/test.cal (+6/-0) shadow_robot/sr_remappers/param/tmp.py (+35/-0) shadow_robot/sr_remappers/remapper_glove.launch (+12/-0) shadow_robot/sr_remappers/src/calibration_parser.cpp (+117/-0) shadow_robot/sr_remappers/src/shadowhand_to_cyberglove_remapper.cpp (+104/-0) shadow_robot/sr_remappers/src/shadowhand_to_cyberglove_remapper_node.cpp (+31/-0) shadow_robot/sr_remappers/src/shadowhand_to_cybergrasp_remapper.cpp (+127/-0) shadow_robot/sr_remappers/src/shadowhand_to_cybergrasp_remapper_node.cpp (+31/-0) shadow_robot/stack.xml (+14/-0) shadow_robot/threeD_mouse/CMakeLists.txt (+28/-0) shadow_robot/threeD_mouse/Makefile (+1/-0) shadow_robot/threeD_mouse/include/threeD_mouse/3D_mouse.h (+72/-0) shadow_robot/threeD_mouse/include/threeD_mouse/geometry.h (+73/-0) shadow_robot/threeD_mouse/mainpage.dox (+26/-0) shadow_robot/threeD_mouse/manifest.xml (+18/-0) shadow_robot/threeD_mouse/src/3D_mouse.cpp (+201/-0) shadow_robot/threeD_mouse/src/3D_mouse_node.cpp (+31/-0) shadow_robot/threeD_mouse/src/geometry.cpp (+118/-0) shadow_robot/threeD_mouse/threedmouse.launch (+6/-0) Conflict adding file shadow_robot. Moved existing file to shadow_robot.moved. |
To merge this branch: | bzr merge lp:sr-ros-interface |
Related bugs: |
|
Commit message
Description of the change
New modular GUI
+ bug fixes
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === added file '.bzrignore' |
2 | --- .bzrignore 1970-01-01 00:00:00 +0000 |
3 | +++ .bzrignore 2010-11-03 16:17:45 +0000 |
4 | @@ -0,0 +1,96 @@ |
5 | +shadow_robot/sr_hand/build |
6 | +shadow_robot/doc/doxygen/sr_hand |
7 | +shadow_robot/doc/doxygen/sr_hand.pdf |
8 | +shadow_robot/doc/rosdoc/* |
9 | +shadow_robot/sr_hand/msg_gen |
10 | +shadow_robot/sr_hand/bin |
11 | +shadow_robot/sr_hand/msg/lisp |
12 | +shadow_robot/sr_hand/src/sr_hand/msg |
13 | +shadow_robot/sr_hand/bin/* |
14 | +shadow_robot/sr_hand/bin/examples/* |
15 | +shadow_robot/cyberglove/build |
16 | +shadow_robot/cyberglove/srv_gen |
17 | +shadow_robot/cyberglove/bin/cyberglove |
18 | +shadow_robot/cyberglove/srv/lisp |
19 | +shadow_robot/sr_control_gui/bin |
20 | +shadow_robot/sr_control_gui/build |
21 | +shadow_robot/cyberglove/src/cyberglove |
22 | +shadow_robot/sr_control_gui/param/new_calibration.cal |
23 | +shadow_robot/sr_remappers/bin |
24 | +shadow_robot/sr_remappers_bk |
25 | +shadow_robot/sr_control_gui/param/new_calibration_2.cal |
26 | +shadow_robot/sr_remappers/build |
27 | +shadow_robot/threeD_mouse/bin |
28 | +shadow_robot/threeD_mouse/build |
29 | +shadow_robot/optical_acquisition/bin |
30 | +shadow_robot/optical_acquisition/build |
31 | +shadow_robot/optical_synchronizer/bin |
32 | +shadow_robot/optical_synchronizer/build |
33 | +<<<<<<< TREE |
34 | +shadow_robot/sr_remappers/bin/cyberglove_remapper |
35 | +======= |
36 | +shadow_robot/dataglove/dataglove_processing/.bzr |
37 | +shadow_robot/dataglove/dataglove_processing/bin |
38 | +shadow_robot/dataglove/dataglove_processing/buildshadow_robot/dataglove/dataglove_processing/srv_gen |
39 | +shadow_robot/dataglove/dataglove_processing/srv/lisp |
40 | +shadow_robot/dataglove/optical_acquisition/bin |
41 | +shadow_robot/dataglove/optical_acquisition/build |
42 | +shadow_robot/dataglove/optical_synchronizer/bin |
43 | +shadow_robot/dataglove/optical_synchronizer/build |
44 | +shadow_robot/dataglove/dataglove_processing/build |
45 | +shadow_robot/dataglove/dataglove_processing/srv_gen |
46 | +>>>>>>> MERGE-SOURCE |
47 | +shadow_robot/cyberglove/srv/java |
48 | +shadow_robot/cyberglove/srv/oct |
49 | +shadow_robot/sr_hand/msg/java |
50 | +shadow_robot/sr_hand/msg/oct |
51 | +shadow_robot/sr_hand/launch/test_cam.launch |
52 | +shadow_robot/sr_display/srv_gen |
53 | +shadow_robot/sr_display/bin/* |
54 | +shadow_robot/sr_display/build/* |
55 | +shadow_robot/sr_display/src/sr_display |
56 | +shadow_robot/sr_display/srv/lisp |
57 | +shadow_robot/sr_hand/.cproject |
58 | +shadow_robot/sr_hand/.project |
59 | +shadow_robot/sr_hand/cmake_install.cmake |
60 | +shadow_robot/sr_hand/src/euslisp |
61 | +shadow_robot/sr_hand/.pydevproject |
62 | +shadow_robot/cyberglove/src/euslisp |
63 | +shadow_robot/sr_control_gui/.cproject |
64 | +shadow_robot/sr_control_gui/.project |
65 | +shadow_robot/sr_control_gui/cmake_install.cmake |
66 | +shadow_robot/sr_control_gui/src/euslisp |
67 | +shadow_robot/sr_display/.cproject |
68 | +shadow_robot/sr_display/cmake_install.cmake |
69 | + |
70 | +shadow_robot/sr_display/src/euslisp |
71 | + |
72 | +shadow_robot/sr_display/srv/java |
73 | + |
74 | +shadow_robot/sr_display/srv/oct |
75 | + |
76 | +shadow_robot/sr_remappers/.cproject |
77 | + |
78 | +shadow_robot/sr_remappers/.project |
79 | + |
80 | +shadow_robot/sr_remappers/cmake_install.cmake |
81 | + |
82 | +shadow_robot/sr_remappers/src/euslisp |
83 | + |
84 | +shadow_robot/threeD_mouse/.cproject |
85 | + |
86 | +shadow_robot/threeD_mouse/.project |
87 | + |
88 | +shadow_robot/threeD_mouse/cmake_install.cmake |
89 | + |
90 | +shadow_robot/threeD_mouse/src/euslisp |
91 | +shadow_robot/sr_control_gui/.pydevproject |
92 | +shadow_robot/sr_control_gui/param/GloveToHandMappings.bk |
93 | +shadow_robot/sr_hand/.settings |
94 | +shadow_robot/sr_hand/python_lib/test.py |
95 | +shadow_robot/cyberglove/.pydevproject |
96 | +shadow_robot/sr_control_gui/src/sr_control_gui/images/glove_calibration/tmp |
97 | +shadow_robot/sr_control_gui/images/glove_calibration/tmp |
98 | +shadow_robot/sr_convenient_dependencies/bin |
99 | +shadow_robot/sr_convenient_dependencies/build |
100 | +shadow_robot/sr_convenient_dependencies/src |
101 | |
102 | === added directory 'shadow_robot' |
103 | === renamed directory 'shadow_robot' => 'shadow_robot.moved' |
104 | === added file 'shadow_robot/README.txt' |
105 | --- shadow_robot/README.txt 1970-01-01 00:00:00 +0000 |
106 | +++ shadow_robot/README.txt 2010-11-03 16:17:45 +0000 |
107 | @@ -0,0 +1,17 @@ |
108 | + |
109 | +First of all, don't forget to edit your ROS_PACKAGE_PATH variable. To do this, |
110 | +edit your ~/.bashrc and AFTER the source /path/to/ros/setup.sh add: |
111 | + |
112 | +export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/path/to/shadow_robot |
113 | + |
114 | +where /path/to/shadow_robot is the complete path to the shadow_robot directory you |
115 | +got from the bazaar repository. |
116 | + |
117 | +To start using this ROS interface, the best way to go is to generate the doc: |
118 | + |
119 | +$ cd doc |
120 | +$ ./generate_doc.sh |
121 | + |
122 | +Then fire up your favourite browser and open the generated rosdoc/index.html. |
123 | +You can start by reading the sr_hand documentation. |
124 | + |
125 | |
126 | === added directory 'shadow_robot/cyberglove' |
127 | === added file 'shadow_robot/cyberglove/.cproject' |
128 | --- shadow_robot/cyberglove/.cproject 1970-01-01 00:00:00 +0000 |
129 | +++ shadow_robot/cyberglove/.cproject 2010-11-03 16:17:45 +0000 |
130 | @@ -0,0 +1,575 @@ |
131 | +<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
132 | +<?fileVersion 4.0.0?> |
133 | + |
134 | +<cproject> |
135 | + <storageModule moduleId="org.eclipse.cdt.core.settings"> |
136 | + <cconfiguration id="org.eclipse.cdt.core.default.config.1"> |
137 | + <storageModule buildSystemId="org.eclipse.cdt.core.defaultConfigDataProvider" id="org.eclipse.cdt.core.default.config.1" moduleId="org.eclipse.cdt.core.settings" name="Configuration"> |
138 | + <externalSettings/> |
139 | + <extensions> |
140 | + <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/> |
141 | + <extension id="org.eclipse.cdt.core.GNU_ELF" point="org.eclipse.cdt.core.BinaryParser"/> |
142 | + </extensions> |
143 | + </storageModule> |
144 | + <storageModule moduleId="org.eclipse.cdt.core.language.mapping"> |
145 | + <project-mappings/> |
146 | + </storageModule> |
147 | + <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/> |
148 | + <storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"> |
149 | + <buildTargets> |
150 | + <target name=": ROSBUILD_genmanifest_eus" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
151 | + <buildCommand>/usr/bin/make</buildCommand> |
152 | + <buildArguments/> |
153 | + <buildTarget>ROSBUILD_genmanifest_eus</buildTarget> |
154 | + <stopOnError>true</stopOnError> |
155 | + <useDefaultCommand>false</useDefaultCommand> |
156 | + </target> |
157 | + <target name=": ROSBUILD_genmsg_cpp" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
158 | + <buildCommand>/usr/bin/make</buildCommand> |
159 | + <buildArguments/> |
160 | + <buildTarget>ROSBUILD_genmsg_cpp</buildTarget> |
161 | + <stopOnError>true</stopOnError> |
162 | + <useDefaultCommand>false</useDefaultCommand> |
163 | + </target> |
164 | + <target name=": ROSBUILD_genmsg_eus" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
165 | + <buildCommand>/usr/bin/make</buildCommand> |
166 | + <buildArguments/> |
167 | + <buildTarget>ROSBUILD_genmsg_eus</buildTarget> |
168 | + <stopOnError>true</stopOnError> |
169 | + <useDefaultCommand>false</useDefaultCommand> |
170 | + </target> |
171 | + <target name=": ROSBUILD_genmsg_java" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
172 | + <buildCommand>/usr/bin/make</buildCommand> |
173 | + <buildArguments/> |
174 | + <buildTarget>ROSBUILD_genmsg_java</buildTarget> |
175 | + <stopOnError>true</stopOnError> |
176 | + <useDefaultCommand>false</useDefaultCommand> |
177 | + </target> |
178 | + <target name=": ROSBUILD_genmsg_lisp" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
179 | + <buildCommand>/usr/bin/make</buildCommand> |
180 | + <buildArguments/> |
181 | + <buildTarget>ROSBUILD_genmsg_lisp</buildTarget> |
182 | + <stopOnError>true</stopOnError> |
183 | + <useDefaultCommand>false</useDefaultCommand> |
184 | + </target> |
185 | + <target name=": ROSBUILD_genmsg_oct" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
186 | + <buildCommand>/usr/bin/make</buildCommand> |
187 | + <buildArguments/> |
188 | + <buildTarget>ROSBUILD_genmsg_oct</buildTarget> |
189 | + <stopOnError>true</stopOnError> |
190 | + <useDefaultCommand>false</useDefaultCommand> |
191 | + </target> |
192 | + <target name=": ROSBUILD_gensrv_cpp" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
193 | + <buildCommand>/usr/bin/make</buildCommand> |
194 | + <buildArguments/> |
195 | + <buildTarget>ROSBUILD_gensrv_cpp</buildTarget> |
196 | + <stopOnError>true</stopOnError> |
197 | + <useDefaultCommand>false</useDefaultCommand> |
198 | + </target> |
199 | + <target name=": ROSBUILD_gensrv_eus" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
200 | + <buildCommand>/usr/bin/make</buildCommand> |
201 | + <buildArguments/> |
202 | + <buildTarget>ROSBUILD_gensrv_eus</buildTarget> |
203 | + <stopOnError>true</stopOnError> |
204 | + <useDefaultCommand>false</useDefaultCommand> |
205 | + </target> |
206 | + <target name=": ROSBUILD_gensrv_java" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
207 | + <buildCommand>/usr/bin/make</buildCommand> |
208 | + <buildArguments/> |
209 | + <buildTarget>ROSBUILD_gensrv_java</buildTarget> |
210 | + <stopOnError>true</stopOnError> |
211 | + <useDefaultCommand>false</useDefaultCommand> |
212 | + </target> |
213 | + <target name=": ROSBUILD_gensrv_lisp" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
214 | + <buildCommand>/usr/bin/make</buildCommand> |
215 | + <buildArguments/> |
216 | + <buildTarget>ROSBUILD_gensrv_lisp</buildTarget> |
217 | + <stopOnError>true</stopOnError> |
218 | + <useDefaultCommand>false</useDefaultCommand> |
219 | + </target> |
220 | + <target name=": ROSBUILD_gensrv_oct" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
221 | + <buildCommand>/usr/bin/make</buildCommand> |
222 | + <buildArguments/> |
223 | + <buildTarget>ROSBUILD_gensrv_oct</buildTarget> |
224 | + <stopOnError>true</stopOnError> |
225 | + <useDefaultCommand>false</useDefaultCommand> |
226 | + </target> |
227 | + <target name=": ROSBUILD_gensrv_py" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
228 | + <buildCommand>/usr/bin/make</buildCommand> |
229 | + <buildArguments/> |
230 | + <buildTarget>ROSBUILD_gensrv_py</buildTarget> |
231 | + <stopOnError>true</stopOnError> |
232 | + <useDefaultCommand>false</useDefaultCommand> |
233 | + </target> |
234 | + <target name=": clean-test-results" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
235 | + <buildCommand>/usr/bin/make</buildCommand> |
236 | + <buildArguments/> |
237 | + <buildTarget>clean-test-results</buildTarget> |
238 | + <stopOnError>true</stopOnError> |
239 | + <useDefaultCommand>false</useDefaultCommand> |
240 | + </target> |
241 | + <target name="[exe] cyberglove" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
242 | + <buildCommand>/usr/bin/make</buildCommand> |
243 | + <buildArguments/> |
244 | + <buildTarget>cyberglove</buildTarget> |
245 | + <stopOnError>true</stopOnError> |
246 | + <useDefaultCommand>false</useDefaultCommand> |
247 | + </target> |
248 | + <target name="[exe] cyberglove/fast" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
249 | + <buildCommand>/usr/bin/make</buildCommand> |
250 | + <buildArguments/> |
251 | + <buildTarget>cyberglove/fast</buildTarget> |
252 | + <stopOnError>true</stopOnError> |
253 | + <useDefaultCommand>false</useDefaultCommand> |
254 | + </target> |
255 | + <target name=": rebuild_cache" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
256 | + <buildCommand>/usr/bin/make</buildCommand> |
257 | + <buildArguments/> |
258 | + <buildTarget>rebuild_cache</buildTarget> |
259 | + <stopOnError>true</stopOnError> |
260 | + <useDefaultCommand>false</useDefaultCommand> |
261 | + </target> |
262 | + <target name=": rosbuild_precompile" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
263 | + <buildCommand>/usr/bin/make</buildCommand> |
264 | + <buildArguments/> |
265 | + <buildTarget>rosbuild_precompile</buildTarget> |
266 | + <stopOnError>true</stopOnError> |
267 | + <useDefaultCommand>false</useDefaultCommand> |
268 | + </target> |
269 | + <target name=": rosbuild_premsgsrvgen" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
270 | + <buildCommand>/usr/bin/make</buildCommand> |
271 | + <buildArguments/> |
272 | + <buildTarget>rosbuild_premsgsrvgen</buildTarget> |
273 | + <stopOnError>true</stopOnError> |
274 | + <useDefaultCommand>false</useDefaultCommand> |
275 | + </target> |
276 | + <target name=": rospack_genmsg" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
277 | + <buildCommand>/usr/bin/make</buildCommand> |
278 | + <buildArguments/> |
279 | + <buildTarget>rospack_genmsg</buildTarget> |
280 | + <stopOnError>true</stopOnError> |
281 | + <useDefaultCommand>false</useDefaultCommand> |
282 | + </target> |
283 | + <target name=": rospack_genmsg_libexe" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
284 | + <buildCommand>/usr/bin/make</buildCommand> |
285 | + <buildArguments/> |
286 | + <buildTarget>rospack_genmsg_libexe</buildTarget> |
287 | + <stopOnError>true</stopOnError> |
288 | + <useDefaultCommand>false</useDefaultCommand> |
289 | + </target> |
290 | + <target name=": rospack_gensrv" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
291 | + <buildCommand>/usr/bin/make</buildCommand> |
292 | + <buildArguments/> |
293 | + <buildTarget>rospack_gensrv</buildTarget> |
294 | + <stopOnError>true</stopOnError> |
295 | + <useDefaultCommand>false</useDefaultCommand> |
296 | + </target> |
297 | + <target name=": rospack_gensrv_all" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
298 | + <buildCommand>/usr/bin/make</buildCommand> |
299 | + <buildArguments/> |
300 | + <buildTarget>rospack_gensrv_all</buildTarget> |
301 | + <stopOnError>true</stopOnError> |
302 | + <useDefaultCommand>false</useDefaultCommand> |
303 | + </target> |
304 | + <target name=": test" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
305 | + <buildCommand>/usr/bin/make</buildCommand> |
306 | + <buildArguments/> |
307 | + <buildTarget>test</buildTarget> |
308 | + <stopOnError>true</stopOnError> |
309 | + <useDefaultCommand>false</useDefaultCommand> |
310 | + </target> |
311 | + <target name=": test-future" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
312 | + <buildCommand>/usr/bin/make</buildCommand> |
313 | + <buildArguments/> |
314 | + <buildTarget>test-future</buildTarget> |
315 | + <stopOnError>true</stopOnError> |
316 | + <useDefaultCommand>false</useDefaultCommand> |
317 | + </target> |
318 | + <target name=": test-results" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
319 | + <buildCommand>/usr/bin/make</buildCommand> |
320 | + <buildArguments/> |
321 | + <buildTarget>test-results</buildTarget> |
322 | + <stopOnError>true</stopOnError> |
323 | + <useDefaultCommand>false</useDefaultCommand> |
324 | + </target> |
325 | + <target name=": test-results-run" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
326 | + <buildCommand>/usr/bin/make</buildCommand> |
327 | + <buildArguments/> |
328 | + <buildTarget>test-results-run</buildTarget> |
329 | + <stopOnError>true</stopOnError> |
330 | + <useDefaultCommand>false</useDefaultCommand> |
331 | + </target> |
332 | + <target name="[exe] test/test_calibration" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
333 | + <buildCommand>/usr/bin/make</buildCommand> |
334 | + <buildArguments/> |
335 | + <buildTarget>test/test_calibration</buildTarget> |
336 | + <stopOnError>true</stopOnError> |
337 | + <useDefaultCommand>false</useDefaultCommand> |
338 | + </target> |
339 | + <target name="[exe] test/test_calibration/fast" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
340 | + <buildCommand>/usr/bin/make</buildCommand> |
341 | + <buildArguments/> |
342 | + <buildTarget>test/test_calibration/fast</buildTarget> |
343 | + <stopOnError>true</stopOnError> |
344 | + <useDefaultCommand>false</useDefaultCommand> |
345 | + </target> |
346 | + <target name=": test_test_calibration_result" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
347 | + <buildCommand>/usr/bin/make</buildCommand> |
348 | + <buildArguments/> |
349 | + <buildTarget>test_test_calibration_result</buildTarget> |
350 | + <stopOnError>true</stopOnError> |
351 | + <useDefaultCommand>false</useDefaultCommand> |
352 | + </target> |
353 | + <target name=": test_test_test_calibration" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
354 | + <buildCommand>/usr/bin/make</buildCommand> |
355 | + <buildArguments/> |
356 | + <buildTarget>test_test_test_calibration</buildTarget> |
357 | + <stopOnError>true</stopOnError> |
358 | + <useDefaultCommand>false</useDefaultCommand> |
359 | + </target> |
360 | + <target name=": tests" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
361 | + <buildCommand>/usr/bin/make</buildCommand> |
362 | + <buildArguments/> |
363 | + <buildTarget>tests</buildTarget> |
364 | + <stopOnError>true</stopOnError> |
365 | + <useDefaultCommand>false</useDefaultCommand> |
366 | + </target> |
367 | + <target name=": all" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
368 | + <buildCommand>/usr/bin/make</buildCommand> |
369 | + <buildArguments/> |
370 | + <buildTarget>all</buildTarget> |
371 | + <stopOnError>true</stopOnError> |
372 | + <useDefaultCommand>false</useDefaultCommand> |
373 | + </target> |
374 | + <target name=": clean" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
375 | + <buildCommand>/usr/bin/make</buildCommand> |
376 | + <buildArguments/> |
377 | + <buildTarget>clean</buildTarget> |
378 | + <stopOnError>true</stopOnError> |
379 | + <useDefaultCommand>false</useDefaultCommand> |
380 | + </target> |
381 | + <target name="[obj] src/cyberglove_node.o" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
382 | + <buildCommand>/usr/bin/make</buildCommand> |
383 | + <buildArguments/> |
384 | + <buildTarget>src/cyberglove_node.o</buildTarget> |
385 | + <stopOnError>true</stopOnError> |
386 | + <useDefaultCommand>false</useDefaultCommand> |
387 | + </target> |
388 | + <target name="[pre] src/cyberglove_node.i" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
389 | + <buildCommand>/usr/bin/make</buildCommand> |
390 | + <buildArguments/> |
391 | + <buildTarget>src/cyberglove_node.i</buildTarget> |
392 | + <stopOnError>true</stopOnError> |
393 | + <useDefaultCommand>false</useDefaultCommand> |
394 | + </target> |
395 | + <target name="[to asm] src/cyberglove_node.s" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
396 | + <buildCommand>/usr/bin/make</buildCommand> |
397 | + <buildArguments/> |
398 | + <buildTarget>src/cyberglove_node.s</buildTarget> |
399 | + <stopOnError>true</stopOnError> |
400 | + <useDefaultCommand>false</useDefaultCommand> |
401 | + </target> |
402 | + <target name="[obj] src/cyberglove_publisher.o" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
403 | + <buildCommand>/usr/bin/make</buildCommand> |
404 | + <buildArguments/> |
405 | + <buildTarget>src/cyberglove_publisher.o</buildTarget> |
406 | + <stopOnError>true</stopOnError> |
407 | + <useDefaultCommand>false</useDefaultCommand> |
408 | + </target> |
409 | + <target name="[pre] src/cyberglove_publisher.i" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
410 | + <buildCommand>/usr/bin/make</buildCommand> |
411 | + <buildArguments/> |
412 | + <buildTarget>src/cyberglove_publisher.i</buildTarget> |
413 | + <stopOnError>true</stopOnError> |
414 | + <useDefaultCommand>false</useDefaultCommand> |
415 | + </target> |
416 | + <target name="[to asm] src/cyberglove_publisher.s" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
417 | + <buildCommand>/usr/bin/make</buildCommand> |
418 | + <buildArguments/> |
419 | + <buildTarget>src/cyberglove_publisher.s</buildTarget> |
420 | + <stopOnError>true</stopOnError> |
421 | + <useDefaultCommand>false</useDefaultCommand> |
422 | + </target> |
423 | + <target name="[obj] src/cyberglove_service.o" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
424 | + <buildCommand>/usr/bin/make</buildCommand> |
425 | + <buildArguments/> |
426 | + <buildTarget>src/cyberglove_service.o</buildTarget> |
427 | + <stopOnError>true</stopOnError> |
428 | + <useDefaultCommand>false</useDefaultCommand> |
429 | + </target> |
430 | + <target name="[pre] src/cyberglove_service.i" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
431 | + <buildCommand>/usr/bin/make</buildCommand> |
432 | + <buildArguments/> |
433 | + <buildTarget>src/cyberglove_service.i</buildTarget> |
434 | + <stopOnError>true</stopOnError> |
435 | + <useDefaultCommand>false</useDefaultCommand> |
436 | + </target> |
437 | + <target name="[to asm] src/cyberglove_service.s" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
438 | + <buildCommand>/usr/bin/make</buildCommand> |
439 | + <buildArguments/> |
440 | + <buildTarget>src/cyberglove_service.s</buildTarget> |
441 | + <stopOnError>true</stopOnError> |
442 | + <useDefaultCommand>false</useDefaultCommand> |
443 | + </target> |
444 | + <target name="[obj] src/serial_glove.o" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
445 | + <buildCommand>/usr/bin/make</buildCommand> |
446 | + <buildArguments/> |
447 | + <buildTarget>src/serial_glove.o</buildTarget> |
448 | + <stopOnError>true</stopOnError> |
449 | + <useDefaultCommand>false</useDefaultCommand> |
450 | + </target> |
451 | + <target name="[pre] src/serial_glove.i" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
452 | + <buildCommand>/usr/bin/make</buildCommand> |
453 | + <buildArguments/> |
454 | + <buildTarget>src/serial_glove.i</buildTarget> |
455 | + <stopOnError>true</stopOnError> |
456 | + <useDefaultCommand>false</useDefaultCommand> |
457 | + </target> |
458 | + <target name="[to asm] src/serial_glove.s" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
459 | + <buildCommand>/usr/bin/make</buildCommand> |
460 | + <buildArguments/> |
461 | + <buildTarget>src/serial_glove.s</buildTarget> |
462 | + <stopOnError>true</stopOnError> |
463 | + <useDefaultCommand>false</useDefaultCommand> |
464 | + </target> |
465 | + <target name="[obj] src/xml_calibration_parser.o" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
466 | + <buildCommand>/usr/bin/make</buildCommand> |
467 | + <buildArguments/> |
468 | + <buildTarget>src/xml_calibration_parser.o</buildTarget> |
469 | + <stopOnError>true</stopOnError> |
470 | + <useDefaultCommand>false</useDefaultCommand> |
471 | + </target> |
472 | + <target name="[pre] src/xml_calibration_parser.i" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
473 | + <buildCommand>/usr/bin/make</buildCommand> |
474 | + <buildArguments/> |
475 | + <buildTarget>src/xml_calibration_parser.i</buildTarget> |
476 | + <stopOnError>true</stopOnError> |
477 | + <useDefaultCommand>false</useDefaultCommand> |
478 | + </target> |
479 | + <target name="[to asm] src/xml_calibration_parser.s" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
480 | + <buildCommand>/usr/bin/make</buildCommand> |
481 | + <buildArguments/> |
482 | + <buildTarget>src/xml_calibration_parser.s</buildTarget> |
483 | + <stopOnError>true</stopOnError> |
484 | + <useDefaultCommand>false</useDefaultCommand> |
485 | + </target> |
486 | + <target name="[obj] test/test_calibration.o" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
487 | + <buildCommand>/usr/bin/make</buildCommand> |
488 | + <buildArguments/> |
489 | + <buildTarget>test/test_calibration.o</buildTarget> |
490 | + <stopOnError>true</stopOnError> |
491 | + <useDefaultCommand>false</useDefaultCommand> |
492 | + </target> |
493 | + <target name="[pre] test/test_calibration.i" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
494 | + <buildCommand>/usr/bin/make</buildCommand> |
495 | + <buildArguments/> |
496 | + <buildTarget>test/test_calibration.i</buildTarget> |
497 | + <stopOnError>true</stopOnError> |
498 | + <useDefaultCommand>false</useDefaultCommand> |
499 | + </target> |
500 | + <target name="[to asm] test/test_calibration.s" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> |
501 | + <buildCommand>/usr/bin/make</buildCommand> |
502 | + <buildArguments/> |
503 | + <buildTarget>test/test_calibration.s</buildTarget> |
504 | + <stopOnError>true</stopOnError> |
505 | + <useDefaultCommand>false</useDefaultCommand> |
506 | + </target> |
507 | + </buildTargets> |
508 | + </storageModule> |
509 | + <storageModule moduleId="scannerConfiguration"> |
510 | + <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/> |
511 | + <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"> |
512 | + <buildOutputProvider> |
513 | + <openAction enabled="true" filePath=""/> |
514 | + <parser enabled="true"/> |
515 | + </buildOutputProvider> |
516 | + <scannerInfoProvider id="specsFile"> |
517 | + <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="/usr/bin/gcc" useDefault="true"/> |
518 | + <parser enabled="true"/> |
519 | + </scannerInfoProvider> |
520 | + </profile> |
521 | + <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile"> |
522 | + <buildOutputProvider> |
523 | + <openAction enabled="true" filePath=""/> |
524 | + <parser enabled="true"/> |
525 | + </buildOutputProvider> |
526 | + <scannerInfoProvider id="makefileGenerator"> |
527 | + <runAction arguments="-f ${project_name}_scd.mk" command="/usr/bin/make" useDefault="true"/> |
528 | + <parser enabled="true"/> |
529 | + </scannerInfoProvider> |
530 | + </profile> |
531 | + </storageModule> |
532 | + <storageModule moduleId="org.eclipse.cdt.core.pathentry"> |
533 | + <pathentry kind="mac" name="__STDC__" path="" value="1"/> |
534 | + <pathentry kind="mac" name="__STDC_HOSTED__" path="" value="1"/> |
535 | + <pathentry kind="mac" name="__GNUC__" path="" value="4"/> |
536 | + <pathentry kind="mac" name="__GNUC_MINOR__" path="" value="4"/> |
537 | + <pathentry kind="mac" name="__GNUC_PATCHLEVEL__" path="" value="3"/> |
538 | + <pathentry kind="mac" name="__SIZE_TYPE__" path="" value="unsigned"/> |
539 | + <pathentry kind="mac" name="int" path="" value="__PTRDIFF_TYPE__"/> |
540 | + <pathentry kind="mac" name="unsigned" path="" value="int"/> |
541 | + <pathentry kind="mac" name="__INTMAX_TYPE__" path="" value="long"/> |
542 | + <pathentry kind="mac" name="long" path="" value="int"/> |
543 | + <pathentry kind="mac" name="__UINTMAX_TYPE__" path="" value="long"/> |
544 | + <pathentry kind="mac" name="short" path="" value="unsigned"/> |
545 | + <pathentry kind="mac" name="__GXX_ABI_VERSION" path="" value="1002"/> |
546 | + <pathentry kind="mac" name="__SCHAR_MAX__" path="" value="127"/> |
547 | + <pathentry kind="mac" name="__SHRT_MAX__" path="" value="32767"/> |
548 | + <pathentry kind="mac" name="__INT_MAX__" path="" value="2147483647"/> |
549 | + <pathentry kind="mac" name="__LONG_MAX__" path="" value="2147483647L"/> |
550 | + <pathentry kind="mac" name="__LONG_LONG_MAX__" path="" value="9223372036854775807LL"/> |
551 | + <pathentry kind="mac" name="__WCHAR_MAX__" path="" value="2147483647"/> |
552 | + <pathentry kind="mac" name="__CHAR_BIT__" path="" value="8"/> |
553 | + <pathentry kind="mac" name="__INTMAX_MAX__" path="" value="9223372036854775807LL"/> |
554 | + <pathentry kind="mac" name="__FLT_EVAL_METHOD__" path="" value="2"/> |
555 | + <pathentry kind="mac" name="__DEC_EVAL_METHOD__" path="" value="2"/> |
556 | + <pathentry kind="mac" name="__FLT_RADIX__" path="" value="2"/> |
557 | + <pathentry kind="mac" name="__FLT_MANT_DIG__" path="" value="24"/> |
558 | + <pathentry kind="mac" name="__FLT_DIG__" path="" value="6"/> |
559 | + <pathentry kind="mac" name="__FLT_MIN_EXP__" path="" value="(-125)"/> |
560 | + <pathentry kind="mac" name="__FLT_MIN_10_EXP__" path="" value="(-37)"/> |
561 | + <pathentry kind="mac" name="__FLT_MAX_EXP__" path="" value="128"/> |
562 | + <pathentry kind="mac" name="__FLT_MAX_10_EXP__" path="" value="38"/> |
563 | + <pathentry kind="mac" name="__FLT_MAX__" path="" value="3.40282347e+38F"/> |
564 | + <pathentry kind="mac" name="__FLT_MIN__" path="" value="1.17549435e-38F"/> |
565 | + <pathentry kind="mac" name="__FLT_EPSILON__" path="" value="1.19209290e-7F"/> |
566 | + <pathentry kind="mac" name="__FLT_DENORM_MIN__" path="" value="1.40129846e-45F"/> |
567 | + <pathentry kind="mac" name="__FLT_HAS_DENORM__" path="" value="1"/> |
568 | + <pathentry kind="mac" name="__FLT_HAS_INFINITY__" path="" value="1"/> |
569 | + <pathentry kind="mac" name="__FLT_HAS_QUIET_NAN__" path="" value="1"/> |
570 | + <pathentry kind="mac" name="__DBL_MANT_DIG__" path="" value="53"/> |
571 | + <pathentry kind="mac" name="__DBL_DIG__" path="" value="15"/> |
572 | + <pathentry kind="mac" name="__DBL_MIN_EXP__" path="" value="(-1021)"/> |
573 | + <pathentry kind="mac" name="__DBL_MIN_10_EXP__" path="" value="(-307)"/> |
574 | + <pathentry kind="mac" name="__DBL_MAX_EXP__" path="" value="1024"/> |
575 | + <pathentry kind="mac" name="__DBL_MAX_10_EXP__" path="" value="308"/> |
576 | + <pathentry kind="mac" name="__DBL_MAX__" path="" value="1.7976931348623157e+308"/> |
577 | + <pathentry kind="mac" name="__DBL_MIN__" path="" value="2.2250738585072014e-308"/> |
578 | + <pathentry kind="mac" name="__DBL_EPSILON__" path="" value="2.2204460492503131e-16"/> |
579 | + <pathentry kind="mac" name="__DBL_DENORM_MIN__" path="" value="4.9406564584124654e-324"/> |
580 | + <pathentry kind="mac" name="__DBL_HAS_DENORM__" path="" value="1"/> |
581 | + <pathentry kind="mac" name="__DBL_HAS_INFINITY__" path="" value="1"/> |
582 | + <pathentry kind="mac" name="__DBL_HAS_QUIET_NAN__" path="" value="1"/> |
583 | + <pathentry kind="mac" name="__LDBL_MANT_DIG__" path="" value="64"/> |
584 | + <pathentry kind="mac" name="__LDBL_DIG__" path="" value="18"/> |
585 | + <pathentry kind="mac" name="__LDBL_MIN_EXP__" path="" value="(-16381)"/> |
586 | + <pathentry kind="mac" name="__LDBL_MIN_10_EXP__" path="" value="(-4931)"/> |
587 | + <pathentry kind="mac" name="__LDBL_MAX_EXP__" path="" value="16384"/> |
588 | + <pathentry kind="mac" name="__LDBL_MAX_10_EXP__" path="" value="4932"/> |
589 | + <pathentry kind="mac" name="__DECIMAL_DIG__" path="" value="21"/> |
590 | + <pathentry kind="mac" name="__LDBL_MAX__" path="" value="1.18973149535723176502e+4932L"/> |
591 | + <pathentry kind="mac" name="__LDBL_MIN__" path="" value="3.36210314311209350626e-4932L"/> |
592 | + <pathentry kind="mac" name="__LDBL_EPSILON__" path="" value="1.08420217248550443401e-19L"/> |
593 | + <pathentry kind="mac" name="__LDBL_DENORM_MIN__" path="" value="3.64519953188247460253e-4951L"/> |
594 | + <pathentry kind="mac" name="__LDBL_HAS_DENORM__" path="" value="1"/> |
595 | + <pathentry kind="mac" name="__LDBL_HAS_INFINITY__" path="" value="1"/> |
596 | + <pathentry kind="mac" name="__LDBL_HAS_QUIET_NAN__" path="" value="1"/> |
597 | + <pathentry kind="mac" name="__DEC32_MANT_DIG__" path="" value="7"/> |
598 | + <pathentry kind="mac" name="__DEC32_MIN_EXP__" path="" value="(-94)"/> |
599 | + <pathentry kind="mac" name="__DEC32_MAX_EXP__" path="" value="97"/> |
600 | + <pathentry kind="mac" name="__DEC32_MIN__" path="" value="1E-95DF"/> |
601 | + <pathentry kind="mac" name="__DEC32_MAX__" path="" value="9.999999E96DF"/> |
602 | + <pathentry kind="mac" name="__DEC32_EPSILON__" path="" value="1E-6DF"/> |
603 | + <pathentry kind="mac" name="__DEC32_SUBNORMAL_MIN__" path="" value="0.000001E-95DF"/> |
604 | + <pathentry kind="mac" name="__DEC64_MANT_DIG__" path="" value="16"/> |
605 | + <pathentry kind="mac" name="__DEC64_MIN_EXP__" path="" value="(-382)"/> |
606 | + <pathentry kind="mac" name="__DEC64_MAX_EXP__" path="" value="385"/> |
607 | + <pathentry kind="mac" name="__DEC64_MIN__" path="" value="1E-383DD"/> |
608 | + <pathentry kind="mac" name="__DEC64_MAX__" path="" value="9.999999999999999E384DD"/> |
609 | + <pathentry kind="mac" name="__DEC64_EPSILON__" path="" value="1E-15DD"/> |
610 | + <pathentry kind="mac" name="__DEC64_SUBNORMAL_MIN__" path="" value="0.000000000000001E-383DD"/> |
611 | + <pathentry kind="mac" name="__DEC128_MANT_DIG__" path="" value="34"/> |
612 | + <pathentry kind="mac" name="__DEC128_MIN_EXP__" path="" value="(-6142)"/> |
613 | + <pathentry kind="mac" name="__DEC128_MAX_EXP__" path="" value="6145"/> |
614 | + <pathentry kind="mac" name="__DEC128_MIN__" path="" value="1E-6143DL"/> |
615 | + <pathentry kind="mac" name="__DEC128_MAX__" path="" value="9.999999999999999999999999999999999E6144DL"/> |
616 | + <pathentry kind="mac" name="__DEC128_EPSILON__" path="" value="1E-33DL"/> |
617 | + <pathentry kind="mac" name="__DEC128_SUBNORMAL_MIN__" path="" value="0.000000000000000000000000000000001E-6143DL"/> |
618 | + <pathentry kind="mac" name="__REGISTER_PREFIX__" path="" value=""/> |
619 | + <pathentry kind="mac" name="__USER_LABEL_PREFIX__" path="" value=""/> |
620 | + <pathentry kind="mac" name="__VERSION__" path="" value=""4.4.3""/> |
621 | + <pathentry kind="mac" name="__GNUC_GNU_INLINE__" path="" value="1"/> |
622 | + <pathentry kind="mac" name="__NO_INLINE__" path="" value="1"/> |
623 | + <pathentry kind="mac" name="__FINITE_MATH_ONLY__" path="" value="0"/> |
624 | + <pathentry kind="mac" name="__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1" path="" value="1"/> |
625 | + <pathentry kind="mac" name="__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2" path="" value="1"/> |
626 | + <pathentry kind="mac" name="__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4" path="" value="1"/> |
627 | + <pathentry kind="mac" name="__SSP__" path="" value="1"/> |
628 | + <pathentry kind="mac" name="__SIZEOF_INT__" path="" value="4"/> |
629 | + <pathentry kind="mac" name="__SIZEOF_LONG__" path="" value="4"/> |
630 | + <pathentry kind="mac" name="__SIZEOF_LONG_LONG__" path="" value="8"/> |
631 | + <pathentry kind="mac" name="__SIZEOF_SHORT__" path="" value="2"/> |
632 | + <pathentry kind="mac" name="__SIZEOF_FLOAT__" path="" value="4"/> |
633 | + <pathentry kind="mac" name="__SIZEOF_DOUBLE__" path="" value="8"/> |
634 | + <pathentry kind="mac" name="__SIZEOF_LONG_DOUBLE__" path="" value="12"/> |
635 | + <pathentry kind="mac" name="__SIZEOF_SIZE_T__" path="" value="4"/> |
636 | + <pathentry kind="mac" name="__SIZEOF_WCHAR_T__" path="" value="4"/> |
637 | + <pathentry kind="mac" name="__SIZEOF_WINT_T__" path="" value="4"/> |
638 | + <pathentry kind="mac" name="__SIZEOF_PTRDIFF_T__" path="" value="4"/> |
639 | + <pathentry kind="mac" name="__SIZEOF_POINTER__" path="" value="4"/> |
640 | + <pathentry kind="mac" name="__i386" path="" value="1"/> |
641 | + <pathentry kind="mac" name="__i386__" path="" value="1"/> |
642 | + <pathentry kind="mac" name="i386" path="" value="1"/> |
643 | + <pathentry kind="mac" name="__i486" path="" value="1"/> |
644 | + <pathentry kind="mac" name="__i486__" path="" value="1"/> |
645 | + <pathentry kind="mac" name="__gnu_linux__" path="" value="1"/> |
646 | + <pathentry kind="mac" name="__linux" path="" value="1"/> |
647 | + <pathentry kind="mac" name="__linux__" path="" value="1"/> |
648 | + <pathentry kind="mac" name="linux" path="" value="1"/> |
649 | + <pathentry kind="mac" name="__unix" path="" value="1"/> |
650 | + <pathentry kind="mac" name="__unix__" path="" value="1"/> |
651 | + <pathentry kind="mac" name="unix" path="" value="1"/> |
652 | + <pathentry kind="mac" name="__ELF__" path="" value="1"/> |
653 | + <pathentry kind="mac" name="__DECIMAL_BID_FORMAT__" path="" value="1"/> |
654 | + <pathentry kind="mac" name="__BIGGEST_ALIGNMENT__" path="" value="16"/> |
655 | + <pathentry kind="mac" name="_FORTIFY_SOURCE" path="" value="2"/> |
656 | + <pathentry kind="mac" name="__cplusplus" path="" value="1"/> |
657 | + <pathentry kind="mac" name="__GNUG__" path="" value="4"/> |
658 | + <pathentry kind="mac" name="__GXX_WEAK__" path="" value="1"/> |
659 | + <pathentry kind="mac" name="__DEPRECATED" path="" value="1"/> |
660 | + <pathentry kind="mac" name="__GXX_RTTI" path="" value="1"/> |
661 | + <pathentry kind="mac" name="__EXCEPTIONS" path="" value="1"/> |
662 | + <pathentry kind="mac" name="__GCC_HAVE_DWARF2_CFI_ASM" path="" value="1"/> |
663 | + <pathentry kind="mac" name="_GNU_SOURCE" path="" value="1"/> |
664 | + <pathentry include="/home/ugo/Projects/ROS_interfaces/sr-ros-interface/trunk/shadow_robot/cyberglove/include" kind="inc" path="" system="true"/> |
665 | + <pathentry include="/opt/ros/cturtle/stacks/common_msgs/sensor_msgs/include" kind="inc" path="" system="true"/> |
666 | + <pathentry include="/opt/ros/cturtle/stacks/common_msgs/sensor_msgs/msg_gen/cpp/include" kind="inc" path="" system="true"/> |
667 | + <pathentry include="/opt/ros/cturtle/stacks/common_msgs/sensor_msgs/srv_gen/cpp/include" kind="inc" path="" system="true"/> |
668 | + <pathentry include="/opt/ros/cturtle/stacks/common_msgs/geometry_msgs/msg_gen/cpp/include" kind="inc" path="" system="true"/> |
669 | + <pathentry include="/opt/ros/cturtle/stacks/common_msgs/diagnostic_msgs/msg_gen/cpp/include" kind="inc" path="" system="true"/> |
670 | + <pathentry include="/opt/ros/cturtle/stacks/common_msgs/diagnostic_msgs/srv_gen/cpp/include" kind="inc" path="" system="true"/> |
671 | + <pathentry include="/opt/ros/cturtle/ros/tools/rosrecord/include" kind="inc" path="" system="true"/> |
672 | + <pathentry include="/opt/ros/cturtle/ros/tools/rosbag/include" kind="inc" path="" system="true"/> |
673 | + <pathentry include="/opt/ros/cturtle/ros/tools/topic_tools/include" kind="inc" path="" system="true"/> |
674 | + <pathentry include="/opt/ros/cturtle/ros/tools/topic_tools/srv_gen/cpp/include" kind="inc" path="" system="true"/> |
675 | + <pathentry include="/opt/ros/cturtle/ros/std_msgs/include" kind="inc" path="" system="true"/> |
676 | + <pathentry include="/opt/ros/cturtle/ros/std_msgs/msg_gen/cpp/include" kind="inc" path="" system="true"/> |
677 | + <pathentry include="/opt/ros/cturtle/ros/test/rostest/include" kind="inc" path="" system="true"/> |
678 | + <pathentry include="/opt/ros/cturtle/ros/core/roscpp/include" kind="inc" path="" system="true"/> |
679 | + <pathentry include="/opt/ros/cturtle/ros/core/roscpp/msg_gen/cpp/include" kind="inc" path="" system="true"/> |
680 | + <pathentry include="/opt/ros/cturtle/ros/core/roscpp/srv_gen/cpp/include" kind="inc" path="" system="true"/> |
681 | + <pathentry include="/opt/ros/cturtle/ros/3rdparty/xmlrpcpp/src" kind="inc" path="" system="true"/> |
682 | + <pathentry include="/opt/ros/cturtle/ros/core/rosconsole/include" kind="inc" path="" system="true"/> |
683 | + <pathentry include="/opt/ros/cturtle/ros/core/roslib/include" kind="inc" path="" system="true"/> |
684 | + <pathentry include="/opt/ros/cturtle/ros/core/roslib/msg_gen/cpp/include" kind="inc" path="" system="true"/> |
685 | + <pathentry include="/opt/ros/cturtle/ros/tools/rospack" kind="inc" path="" system="true"/> |
686 | + <pathentry include="/opt/ros/cturtle/ros/tools/rospack/include" kind="inc" path="" system="true"/> |
687 | + <pathentry include="/opt/ros/cturtle/stacks/common/tinyxml/include" kind="inc" path="" system="true"/> |
688 | + <pathentry include="/opt/ros/cturtle/ros/3rdparty/gtest/gtest/include" kind="inc" path="" system="true"/> |
689 | + <pathentry include="/home/ugo/Projects/ROS_interfaces/sr-ros-interface/trunk/shadow_robot/cyberglove/srv_gen/cpp/include" kind="inc" path="" system="true"/> |
690 | + <pathentry include="/usr/local/include" kind="inc" path="" system="true"/> |
691 | + <pathentry include="/usr/lib/gcc/i486-linux-gnu/4.4/include" kind="inc" path="" system="true"/> |
692 | + <pathentry include="/usr/lib/gcc/i486-linux-gnu/4.4/include-fixed" kind="inc" path="" system="true"/> |
693 | + <pathentry include="/usr/include" kind="inc" path="" system="true"/> |
694 | + <pathentry include="/usr/include/c++/4.4" kind="inc" path="" system="true"/> |
695 | + <pathentry include="/usr/include/c++/4.4/i486-linux-gnu" kind="inc" path="" system="true"/> |
696 | + <pathentry include="/usr/include/c++/4.4/backward" kind="inc" path="" system="true"/> |
697 | + <pathentry excluding="**/CMakeFiles/" kind="out" path=""/> |
698 | + <pathentry kind="src" path=""/> |
699 | + </storageModule> |
700 | + </cconfiguration> |
701 | + </storageModule> |
702 | + <storageModule moduleId="cdtBuildSystem" version="4.0.0"> |
703 | + <project id="cyberglove.null.1" name="cyberglove"/> |
704 | + </storageModule> |
705 | +</cproject> |
706 | |
707 | === added file 'shadow_robot/cyberglove/.project' |
708 | --- shadow_robot/cyberglove/.project 1970-01-01 00:00:00 +0000 |
709 | +++ shadow_robot/cyberglove/.project 2010-11-03 16:17:45 +0000 |
710 | @@ -0,0 +1,116 @@ |
711 | +<?xml version="1.0" encoding="UTF-8"?> |
712 | +<projectDescription> |
713 | + <name>[TRUNK] cyberglove</name> |
714 | + <comment></comment> |
715 | + <projects> |
716 | + </projects> |
717 | + <buildSpec> |
718 | + <buildCommand> |
719 | + <name>org.python.pydev.PyDevBuilder</name> |
720 | + <arguments> |
721 | + </arguments> |
722 | + </buildCommand> |
723 | + <buildCommand> |
724 | + <name>org.eclipse.cdt.make.core.makeBuilder</name> |
725 | + <triggers>clean,full,incremental,</triggers> |
726 | + <arguments> |
727 | + <dictionary> |
728 | + <key>org.eclipse.cdt.core.errorOutputParser</key> |
729 | + <value>org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.GLDErrorParser;</value> |
730 | + </dictionary> |
731 | + <dictionary> |
732 | + <key>org.eclipse.cdt.make.core.append_environment</key> |
733 | + <value>true</value> |
734 | + </dictionary> |
735 | + <dictionary> |
736 | + <key>org.eclipse.cdt.make.core.autoBuildTarget</key> |
737 | + <value>all</value> |
738 | + </dictionary> |
739 | + <dictionary> |
740 | + <key>org.eclipse.cdt.make.core.build.arguments</key> |
741 | + <value></value> |
742 | + </dictionary> |
743 | + <dictionary> |
744 | + <key>org.eclipse.cdt.make.core.build.command</key> |
745 | + <value>/usr/bin/make</value> |
746 | + </dictionary> |
747 | + <dictionary> |
748 | + <key>org.eclipse.cdt.make.core.build.location</key> |
749 | + <value>/home/ugo/Projects/ROS_interfaces/sr-ros-interface/trunk/shadow_robot/cyberglove</value> |
750 | + </dictionary> |
751 | + <dictionary> |
752 | + <key>org.eclipse.cdt.make.core.build.target.auto</key> |
753 | + <value>all</value> |
754 | + </dictionary> |
755 | + <dictionary> |
756 | + <key>org.eclipse.cdt.make.core.build.target.clean</key> |
757 | + <value>clean</value> |
758 | + </dictionary> |
759 | + <dictionary> |
760 | + <key>org.eclipse.cdt.make.core.build.target.inc</key> |
761 | + <value>all</value> |
762 | + </dictionary> |
763 | + <dictionary> |
764 | + <key>org.eclipse.cdt.make.core.buildArguments</key> |
765 | + <value></value> |
766 | + </dictionary> |
767 | + <dictionary> |
768 | + <key>org.eclipse.cdt.make.core.buildLocation</key> |
769 | + <value>/home/ugo/Projects/ROS_interfaces/sr-ros-interface/trunk/shadow_robot/cyberglove</value> |
770 | + </dictionary> |
771 | + <dictionary> |
772 | + <key>org.eclipse.cdt.make.core.cleanBuildTarget</key> |
773 | + <value>clean</value> |
774 | + </dictionary> |
775 | + <dictionary> |
776 | + <key>org.eclipse.cdt.make.core.contents</key> |
777 | + <value>org.eclipse.cdt.make.core.activeConfigSettings</value> |
778 | + </dictionary> |
779 | + <dictionary> |
780 | + <key>org.eclipse.cdt.make.core.enableAutoBuild</key> |
781 | + <value>false</value> |
782 | + </dictionary> |
783 | + <dictionary> |
784 | + <key>org.eclipse.cdt.make.core.enableCleanBuild</key> |
785 | + <value>true</value> |
786 | + </dictionary> |
787 | + <dictionary> |
788 | + <key>org.eclipse.cdt.make.core.enableFullBuild</key> |
789 | + <value>true</value> |
790 | + </dictionary> |
791 | + <dictionary> |
792 | + <key>org.eclipse.cdt.make.core.enabledIncrementalBuild</key> |
793 | + <value>true</value> |
794 | + </dictionary> |
795 | + <dictionary> |
796 | + <key>org.eclipse.cdt.make.core.environment</key> |
797 | + <value>VERBOSE=1|ROS_ROOT=/opt/ros/cturtle/ros|ROS_PACKAGE_PATH=/opt/ros/cturtle/stacks:/home/ugo/ros_stacks_external:/home/ugo/Projects/3_FT_DSTL/Software/ros:/home/ugo/Projects/ROS_interfaces/sr-ros-interface/trunk/shadow_robot|PYTHONPATH=/opt/ros/cturtle/ros/core/roslib/src:/opt/ros/cturtle/ros/core/roslib/src::/home/ugo/ros_stacks_external/jsk-ros-pkg/openrave_planning/openrave/share/openrave:/home/ugo/ros_stacks_external/jsk-ros-pkg/openrave_planning/openrave/share/openrave|PATH=/opt/ros/cturtle/ros/bin:/opt/ros/cturtle/ros/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/ugo/ros_stacks_external/jsk-ros-pkg/openrave_planning/openrave/bin:/home/ugo/ros_stacks_external/jsk-ros-pkg/openrave_planning/openrave/bin|</value> |
798 | + </dictionary> |
799 | + <dictionary> |
800 | + <key>org.eclipse.cdt.make.core.fullBuildTarget</key> |
801 | + <value>all</value> |
802 | + </dictionary> |
803 | + <dictionary> |
804 | + <key>org.eclipse.cdt.make.core.stopOnError</key> |
805 | + <value>true</value> |
806 | + </dictionary> |
807 | + <dictionary> |
808 | + <key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key> |
809 | + <value>false</value> |
810 | + </dictionary> |
811 | + </arguments> |
812 | + </buildCommand> |
813 | + <buildCommand> |
814 | + <name>org.eclipse.cdt.make.core.ScannerConfigBuilder</name> |
815 | + <arguments> |
816 | + </arguments> |
817 | + </buildCommand> |
818 | + </buildSpec> |
819 | + <natures> |
820 | + <nature>org.eclipse.cdt.core.ccnature</nature> |
821 | + <nature>org.eclipse.cdt.make.core.makeNature</nature> |
822 | + <nature>org.eclipse.cdt.make.core.ScannerConfigNature</nature> |
823 | + <nature>org.eclipse.cdt.core.cnature</nature> |
824 | + <nature>org.python.pydev.pythonNature</nature> |
825 | + </natures> |
826 | +</projectDescription> |
827 | |
828 | === added file 'shadow_robot/cyberglove/CMakeLists.txt' |
829 | --- shadow_robot/cyberglove/CMakeLists.txt 1970-01-01 00:00:00 +0000 |
830 | +++ shadow_robot/cyberglove/CMakeLists.txt 2010-11-03 16:17:45 +0000 |
831 | @@ -0,0 +1,34 @@ |
832 | +cmake_minimum_required(VERSION 2.4.6) |
833 | +include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake) |
834 | + |
835 | +# Set the build type. Options are: |
836 | +# Coverage : w/ debug symbols, w/o optimization, w/ code-coverage |
837 | +# Debug : w/ debug symbols, w/o optimization |
838 | +# Release : w/o debug symbols, w/ optimization |
839 | +# RelWithDebInfo : w/ debug symbols, w/ optimization |
840 | +# MinSizeRel : w/o debug symbols, w/ optimization, stripped binaries |
841 | +#set(ROS_BUILD_TYPE RelWithDebInfo) |
842 | + |
843 | +rosbuild_init() |
844 | + |
845 | +#set the default path for built executables to the "bin" directory |
846 | +set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) |
847 | +#set the default path for built libraries to the "lib" directory |
848 | +set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) |
849 | + |
850 | +#uncomment if you have defined messages |
851 | +#rosbuild_genmsg() |
852 | +#uncomment if you have defined services |
853 | +rosbuild_gensrv() |
854 | + |
855 | +rosbuild_add_executable(cyberglove src/cyberglove_publisher.cpp src/cyberglove_node.cpp src/serial_glove.c src/xml_calibration_parser.cpp src/cyberglove_service.cpp) |
856 | + |
857 | +rosbuild_add_gtest(test/test_calibration test/test_calibration.cpp src/xml_calibration_parser.cpp ) |
858 | + |
859 | +#common commands for building c++ executables and libraries |
860 | +#rosbuild_add_library(${PROJECT_NAME} src/example.cpp) |
861 | +#target_link_libraries(${PROJECT_NAME} another_library) |
862 | +#rosbuild_add_boost_directories() |
863 | +#rosbuild_link_boost(${PROJECT_NAME} thread) |
864 | +#rosbuild_add_executable(example examples/example.cpp) |
865 | +#target_link_libraries(example ${PROJECT_NAME}) |
866 | |
867 | === added file 'shadow_robot/cyberglove/Makefile' |
868 | --- shadow_robot/cyberglove/Makefile 1970-01-01 00:00:00 +0000 |
869 | +++ shadow_robot/cyberglove/Makefile 2010-11-03 16:17:45 +0000 |
870 | @@ -0,0 +1,1 @@ |
871 | +include $(shell rospack find mk)/cmake.mk |
872 | \ No newline at end of file |
873 | |
874 | === added file 'shadow_robot/cyberglove/Ogre.log' |
875 | --- shadow_robot/cyberglove/Ogre.log 1970-01-01 00:00:00 +0000 |
876 | +++ shadow_robot/cyberglove/Ogre.log 2010-11-03 16:17:45 +0000 |
877 | @@ -0,0 +1,419 @@ |
878 | +17:43:00: Creating resource group General |
879 | +17:43:00: Creating resource group Internal |
880 | +17:43:00: Creating resource group Autodetect |
881 | +17:43:00: SceneManagerFactory for type 'DefaultSceneManager' registered. |
882 | +17:43:00: Registering ResourceManager for type Material |
883 | +17:43:00: Registering ResourceManager for type Mesh |
884 | +17:43:00: Registering ResourceManager for type Skeleton |
885 | +17:43:00: MovableObjectFactory for type 'ParticleSystem' registered. |
886 | +17:43:00: OverlayElementFactory for type Panel registered. |
887 | +17:43:00: OverlayElementFactory for type BorderPanel registered. |
888 | +17:43:00: OverlayElementFactory for type TextArea registered. |
889 | +17:43:00: Registering ResourceManager for type Font |
890 | +17:43:00: ArchiveFactory for archive type FileSystem registered. |
891 | +17:43:00: ArchiveFactory for archive type Zip registered. |
892 | +17:43:00: DDS codec registering |
893 | +17:43:00: FreeImage version: 3.13.0 |
894 | +17:43:00: This program uses FreeImage, a free, open source image library supporting all common bitmap formats. See http://freeimage.sourceforge.net for details |
895 | +17:43:00: Supported formats: bmp,ico,jpg,jif,jpeg,jpe,jng,koa,iff,lbm,mng,pbm,pbm,pcd,pcx,pgm,pgm,png,ppm,ppm,ras,tga,targa,tif,tiff,wap,wbmp,wbm,psd,cut,xbm,xpm,gif,hdr,g3,sgi,exr,j2k,j2c,jp2,pfm,pct,pict,pic,bay,bmq,cr2,crw,cs1,dc2,dcr,dng,erf,fff,hdr,k25,kdc,mdc,mos,mrw,nef,orf,pef,pxn,raf,raw,rdc,sr2,srf,arw,3fr,cine,ia,kc2,mef,nrw,qtk,rw2,sti,drf,dsc,ptx,cap,iiq,rwz |
896 | +17:43:00: Registering ResourceManager for type HighLevelGpuProgram |
897 | +17:43:00: Registering ResourceManager for type Compositor |
898 | +17:43:00: MovableObjectFactory for type 'Entity' registered. |
899 | +17:43:00: MovableObjectFactory for type 'Light' registered. |
900 | +17:43:00: MovableObjectFactory for type 'BillboardSet' registered. |
901 | +17:43:00: MovableObjectFactory for type 'ManualObject' registered. |
902 | +17:43:00: MovableObjectFactory for type 'BillboardChain' registered. |
903 | +17:43:00: MovableObjectFactory for type 'RibbonTrail' registered. |
904 | +17:43:00: OGRE EXCEPTION(6:FileNotFoundException): 'plugins.cfg' file not found! in ConfigFile::load at /home/ugo/ros_latest/stacks/visualization_common/ogre/build/ogre_src_v1-7-1/OgreMain/src/OgreConfigFile.cpp (line 83) |
905 | +17:43:00: plugins.cfg not found, automatic plugin loading disabled. |
906 | +17:43:00: *-*-* OGRE Initialising |
907 | +17:43:00: *-*-* Version 1.7.1 (Cthugha) |
908 | +17:43:00: Loading library RenderSystem_GL |
909 | +17:43:00: Installing plugin: GL RenderSystem |
910 | +17:43:00: OpenGL Rendering Subsystem created. |
911 | +17:43:00: Plugin successfully installed |
912 | +17:43:00: Loading library Plugin_OctreeSceneManager |
913 | +17:43:00: Installing plugin: Octree & Terrain Scene Manager |
914 | +17:43:00: Plugin successfully installed |
915 | +17:43:00: Loading library Plugin_ParticleFX |
916 | +17:43:00: Installing plugin: ParticleFX |
917 | +17:43:00: Particle Emitter Type 'Point' registered |
918 | +17:43:00: Particle Emitter Type 'Box' registered |
919 | +17:43:00: Particle Emitter Type 'Ellipsoid' registered |
920 | +17:43:00: Particle Emitter Type 'Cylinder' registered |
921 | +17:43:00: Particle Emitter Type 'Ring' registered |
922 | +17:43:00: Particle Emitter Type 'HollowEllipsoid' registered |
923 | +17:43:00: Particle Affector Type 'LinearForce' registered |
924 | +17:43:00: Particle Affector Type 'ColourFader' registered |
925 | +17:43:00: Particle Affector Type 'ColourFader2' registered |
926 | +17:43:00: Particle Affector Type 'ColourImage' registered |
927 | +17:43:00: Particle Affector Type 'ColourInterpolator' registered |
928 | +17:43:00: Particle Affector Type 'Scaler' registered |
929 | +17:43:00: Particle Affector Type 'Rotator' registered |
930 | +17:43:00: Particle Affector Type 'DirectionRandomiser' registered |
931 | +17:43:00: Particle Affector Type 'DeflectorPlane' registered |
932 | +17:43:00: Plugin successfully installed |
933 | +17:43:00: Loading library Plugin_CgProgramManager |
934 | +17:43:00: Installing plugin: Cg Program Manager |
935 | +17:43:00: Plugin successfully installed |
936 | +17:43:00: CPU Identifier & Features |
937 | +17:43:00: ------------------------- |
938 | +17:43:00: * CPU ID: AuthenticAMD: AMD Athlon(tm) Processor LE-1640 |
939 | +17:43:00: * SSE: yes |
940 | +17:43:00: * SSE2: yes |
941 | +17:43:00: * SSE3: yes |
942 | +17:43:00: * MMX: yes |
943 | +17:43:00: * MMXEXT: yes |
944 | +17:43:00: * 3DNOW: yes |
945 | +17:43:00: * 3DNOWEXT: yes |
946 | +17:43:00: * CMOV: yes |
947 | +17:43:00: * TSC: yes |
948 | +17:43:00: * FPU: yes |
949 | +17:43:00: * PRO: yes |
950 | +17:43:00: * HT: no |
951 | +17:43:00: ------------------------- |
952 | +17:43:00: ****************************** |
953 | +*** Starting GLX Subsystem *** |
954 | +****************************** |
955 | +17:43:00: Creating resource group ogre_tools |
956 | +17:43:00: Added resource location '/home/ugo/ros_latest/stacks/visualization_common/ogre_tools/media' of type 'FileSystem' to resource group 'ogre_tools' |
957 | +17:43:00: Added resource location '/home/ugo/ros_latest/stacks/visualization_common/ogre_tools/media/fonts' of type 'FileSystem' to resource group 'ogre_tools' |
958 | +17:43:00: Added resource location '/home/ugo/ros_latest/stacks/visualization_common/ogre_tools/media/models' of type 'FileSystem' to resource group 'ogre_tools' |
959 | +17:43:00: Added resource location '/home/ugo/ros_latest/stacks/visualization_common/ogre_tools/media/materials' of type 'FileSystem' to resource group 'ogre_tools' |
960 | +17:43:00: Added resource location '/home/ugo/ros_latest/stacks/visualization_common/ogre_tools/media/materials/scripts' of type 'FileSystem' to resource group 'ogre_tools' |
961 | +17:43:00: Added resource location '/home/ugo/ros_latest/stacks/visualization_common/ogre_tools/media/materials/programs' of type 'FileSystem' to resource group 'ogre_tools' |
962 | +17:43:00: GLRenderSystem::_createRenderWindow "OgreRenderWindow1", 1517x1000 windowed miscParams: parentWindowHandle=71303241 |
963 | +17:43:00: GLXWindow::create used FBConfigID = 117 |
964 | +17:43:00: GL_VERSION = 3.0.0 NVIDIA 185.18.36 |
965 | +17:43:00: GL_VENDOR = NVIDIA Corporation |
966 | +17:43:00: GL_RENDERER = GeForce 9500 GT/PCI/SSE2/3DNOW! |
967 | +17:43:00: GL_EXTENSIONS = GL_ARB_color_buffer_float GL_ARB_depth_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object GL_ARB_geometry_shader4 GL_ARB_imaging GL_ARB_map_buffer_range GL_ARB_multisample GL_ARB_multitexture GL_ARB_occlusion_query GL_ARB_pixel_buffer_object GL_ARB_point_parameters GL_ARB_point_sprite GL_ARB_shadow GL_ARB_shader_objects GL_ARB_shading_language_100 GL_ARB_texture_border_clamp GL_ARB_texture_buffer_object GL_ARB_texture_compression GL_ARB_texture_cube_map GL_ARB_texture_env_add GL_ARB_texture_env_combine GL_ARB_texture_env_dot3 GL_ARB_texture_float GL_ARB_texture_mirrored_repeat GL_ARB_texture_non_power_of_two GL_ARB_texture_rectangle GL_ARB_texture_rg GL_ARB_transpose_matrix GL_ARB_vertex_array_object GL_ARB_vertex_buffer_object GL_ARB_vertex_program GL_ARB_vertex_shader GL_ARB_window_pos GL_ATI_draw_buffers GL_ATI_texture_float GL_ATI_texture_mirror_once GL_S3_s3tc GL_EXT_texture_env_add GL_EXT_abgr GL_EXT_bgra GL_EXT_blend_color GL_EXT_blend_equation_separate GL_EXT_blend_func_separate GL_EXT_blend_minmax GL_EXT_blend_subtract GL_EXT_compiled_vertex_array GL_EXT_Cg_shader GL_EXT_bindable_uniform GL_EXT_depth_bounds_test GL_EXT_direct_state_access GL_EXT_draw_buffers2 GL_EXT_draw_instanced GL_EXT_draw_range_elements GL_EXT_fog_coord GL_EXT_framebuffer_blit GL_EXT_framebuffer_multisample GL_EXT_framebuffer_object GL_EXTX_framebuffer_mixed_formats GL_EXT_framebuffer_sRGB GL_EXT_geometry_shader4 GL_EXT_gpu_program_parameters GL_EXT_gpu_shader4 GL_EXT_multi_draw_arrays GL_EXT_packed_depth_stencil GL_EXT_packed_float GL_EXT_packed_pixels GL_EXT_pixel_buffer_object GL_EXT_point_parameters GL_EXT_provoking_vertex GL_EXT_rescale_normal GL_EXT_secondary_color GL_EXT_separate_specular_color GL_EXT_shadow_funcs GL_EXT_stencil_two_side GL_EXT_stencil_wrap GL_EXT_texture3D GL_EXT_texture_array GL_EXT_texture_buffer_object GL_EXT_texture_compression_latc GL_EXT_texture_compression_rgtc GL_EXT_texture_compression_s3tc GL_EXT_texture_cube_map GL_EXT_texture_edge_clamp GL_EXT_texture_env_combine GL_EXT_texture_env_dot3 GL_EXT_texture_filter_anisotropic GL_EXT_texture_integer GL_EXT_texture_lod GL_EXT_texture_lod_bias GL_EXT_texture_mirror_clamp GL_EXT_texture_object GL_EXT_texture_sRGB GL_EXT_texture_swizzle GL_EXT_texture_shared_exponent GL_EXT_timer_query GL_EXT_vertex_array GL_EXT_vertex_array_bgra GL_IBM_rasterpos_clip GL_IBM_texture_mirrored_repeat GL_KTX_buffer_region GL_NV_blend_square GL_NV_copy_depth_to_color GL_NV_depth_buffer_float GL_NV_conditional_render GL_NV_depth_clamp GL_NV_explicit_multisample GL_NV_fence GL_NV_float_buffer GL_NV_fog_distance GL_NV_fragment_program GL_NV_fragment_program_option GL_NV_fragment_program2 GL_NV_framebuffer_multisample_coverage GL_NV_geometry_shader4 GL_NV_gpu_program4 GL_NV_half_float GL_NV_light_max_exponent GL_NV_multisample_coverage GL_NV_multisample_filter_hint GL_NV_occlusion_query GL_NV_packed_depth_stencil GL_NV_parameter_buffer_object GL_NV_pixel_data_range GL_NV_point_sprite GL_NV_primitive_restart GL_NV_register_combiners GL_NV_register_combiners2 GL_NV_texgen_reflection GL_NV_texture_compression_vtc GL_NV_texture_env_combine4 GL_NV_texture_expand_normal GL_NV_texture_rectangle GL_NV_texture_shader GL_NV_texture_shader2 GL_NV_texture_shader3 GL_NV_transform_feedback GL_NV_vertex_array_range GL_NV_vertex_array_range2 GL_NV_vertex_program GL_NV_vertex_program1_1 GL_NV_vertex_program2 GL_NV_vertex_program2_option GL_NV_vertex_program3 GL_NVX_conditional_render GL_NV_vertex_buffer_unified_memory GL_NV_shader_buffer_load GL_SGIS_generate_mipmap GL_SGIS_texture_lod GL_SGIX_depth_texture GL_SGIX_shadow GL_SUN_slice_accum |
968 | +17:43:00: Supported GLX extensions: GLX_EXT_visual_info GLX_EXT_visual_rating GLX_SGIX_fbconfig GLX_SGIX_pbuffer GLX_SGI_video_sync GLX_SGI_swap_control GLX_EXT_texture_from_pixmap GLX_ARB_create_context GLX_ARB_multisample GLX_NV_float_buffer GLX_ARB_fbconfig_float GLX_EXT_framebuffer_sRGB GLX_ARB_get_proc_address |
969 | +17:43:00: *************************** |
970 | +17:43:00: *** GL Renderer Started *** |
971 | +17:43:00: *************************** |
972 | +17:43:00: Registering ResourceManager for type GpuProgram |
973 | +17:43:00: GLSL support detected |
974 | +17:43:00: GL: Using GL_EXT_framebuffer_object for rendering to textures (best) |
975 | +17:43:00: FBO PF_UNKNOWN depth/stencil support: D16S0 D24S0 D32S0 Packed-D24S8 |
976 | +17:43:00: FBO PF_L8 depth/stencil support: D0S0 D16S0 D24S0 D32S0 Packed-D24S8 |
977 | +17:43:00: FBO PF_A8 depth/stencil support: D0S0 D16S0 D24S0 D32S0 Packed-D24S8 |
978 | +17:43:00: FBO PF_A4L4 depth/stencil support: D0S0 D16S0 D24S0 D32S0 Packed-D24S8 |
979 | +17:43:00: FBO PF_BYTE_LA depth/stencil support: D0S0 D16S0 D24S0 D32S0 Packed-D24S8 |
980 | +17:43:01: FBO PF_R5G6B5 depth/stencil support: D0S0 D16S0 D24S0 D32S0 Packed-D24S8 |
981 | +17:43:01: FBO PF_B5G6R5 depth/stencil support: D0S0 D16S0 D24S0 D32S0 Packed-D24S8 |
982 | +17:43:01: FBO PF_A1R5G5B5 depth/stencil support: D0S0 D16S0 D24S0 D32S0 Packed-D24S8 |
983 | +17:43:01: FBO PF_R8G8B8 depth/stencil support: D0S0 D16S0 D24S0 D32S0 Packed-D24S8 |
984 | +17:43:01: FBO PF_B8G8R8 depth/stencil support: D0S0 D16S0 D24S0 D32S0 Packed-D24S8 |
985 | +17:43:01: FBO PF_A8R8G8B8 depth/stencil support: D0S0 D16S0 D24S0 D32S0 Packed-D24S8 |
986 | +17:43:01: FBO PF_B8G8R8A8 depth/stencil support: D0S0 D16S0 D24S0 D32S0 Packed-D24S8 |
987 | +17:43:01: FBO PF_A2R10G10B10 depth/stencil support: D0S0 D16S0 D24S0 D32S0 Packed-D24S8 |
988 | +17:43:01: FBO PF_A2B10G10R10 depth/stencil support: D0S0 D16S0 D24S0 D32S0 Packed-D24S8 |
989 | +17:43:01: FBO PF_FLOAT16_RGB depth/stencil support: D0S0 D16S0 D24S0 D32S0 Packed-D24S8 |
990 | +17:43:01: FBO PF_FLOAT16_RGBA depth/stencil support: D0S0 D16S0 D24S0 D32S0 Packed-D24S8 |
991 | +17:43:02: FBO PF_FLOAT32_RGB depth/stencil support: D0S0 D16S0 D24S0 D32S0 Packed-D24S8 |
992 | +17:43:02: FBO PF_FLOAT32_RGBA depth/stencil support: D0S0 D16S0 D24S0 D32S0 Packed-D24S8 |
993 | +17:43:02: FBO PF_X8R8G8B8 depth/stencil support: D0S0 D16S0 D24S0 D32S0 Packed-D24S8 |
994 | +17:43:02: FBO PF_X8B8G8R8 depth/stencil support: D0S0 D16S0 D24S0 D32S0 Packed-D24S8 |
995 | +17:43:02: FBO PF_SHORT_RGBA depth/stencil support: D0S0 D16S0 D24S0 D32S0 Packed-D24S8 |
996 | +17:43:02: FBO PF_R3G3B2 depth/stencil support: D0S0 D16S0 D24S0 D32S0 Packed-D24S8 |
997 | +17:43:02: FBO PF_FLOAT16_R depth/stencil support: D0S0 D16S0 D24S0 D32S0 Packed-D24S8 |
998 | +17:43:02: FBO PF_FLOAT32_R depth/stencil support: D0S0 D16S0 D24S0 D32S0 Packed-D24S8 |
999 | +17:43:02: FBO PF_FLOAT16_GR depth/stencil support: D0S0 D16S0 D24S0 D32S0 Packed-D24S8 |
1000 | +17:43:02: FBO PF_FLOAT32_GR depth/stencil support: D0S0 D16S0 D24S0 D32S0 Packed-D24S8 |
1001 | +17:43:02: FBO PF_SHORT_RGB depth/stencil support: D0S0 D16S0 D24S0 D32S0 Packed-D24S8 |
1002 | +17:43:02: [GL] : Valid FBO targets PF_UNKNOWN PF_L8 PF_A8 PF_A4L4 PF_BYTE_LA PF_R5G6B5 PF_B5G6R5 PF_A1R5G5B5 PF_R8G8B8 PF_B8G8R8 PF_A8R8G8B8 PF_B8G8R8A8 PF_A2R10G10B10 PF_A2B10G10R10 PF_FLOAT16_RGB PF_FLOAT16_RGBA PF_FLOAT32_RGB PF_FLOAT32_RGBA PF_X8R8G8B8 PF_X8B8G8R8 PF_SHORT_RGBA PF_R3G3B2 PF_FLOAT16_R PF_FLOAT32_R PF_FLOAT16_GR PF_FLOAT32_GR PF_SHORT_RGB |
1003 | +17:43:02: RenderSystem capabilities |
1004 | +17:43:02: ------------------------- |
1005 | +17:43:02: RenderSystem Name: OpenGL Rendering Subsystem |
1006 | +17:43:02: GPU Vendor: nvidia |
1007 | +17:43:02: Device Name: GeForce 9500 GT/PCI/SSE2/3DNOW! |
1008 | +17:43:02: Driver Version: 3.0.0.0 |
1009 | +17:43:02: * Fixed function pipeline: yes |
1010 | +17:43:02: * Hardware generation of mipmaps: yes |
1011 | +17:43:02: * Texture blending: yes |
1012 | +17:43:02: * Anisotropic texture filtering: yes |
1013 | +17:43:02: * Dot product texture operation: yes |
1014 | +17:43:02: * Cube mapping: yes |
1015 | +17:43:02: * Hardware stencil buffer: yes |
1016 | +17:43:02: - Stencil depth: 8 |
1017 | +17:43:02: - Two sided stencil support: yes |
1018 | +17:43:02: - Wrap stencil values: yes |
1019 | +17:43:02: * Hardware vertex / index buffers: yes |
1020 | +17:43:02: * Vertex programs: yes |
1021 | +17:43:02: * Number of floating-point constants for vertex programs: 1024 |
1022 | +17:43:02: * Number of integer constants for vertex programs: 0 |
1023 | +17:43:02: * Number of boolean constants for vertex programs: 0 |
1024 | +17:43:02: * Fragment programs: yes |
1025 | +17:43:02: * Number of floating-point constants for fragment programs: 512 |
1026 | +17:43:02: * Number of integer constants for fragment programs: 0 |
1027 | +17:43:02: * Number of boolean constants for fragment programs: 0 |
1028 | +17:43:02: * Geometry programs: yes |
1029 | +17:43:02: * Number of floating-point constants for geometry programs: 512 |
1030 | +17:43:02: * Number of integer constants for geometry programs: 0 |
1031 | +17:43:02: * Number of boolean constants for geometry programs: 0 |
1032 | +17:43:02: * Supported Shader Profiles: arbfp1 arbvp1 fp20 fp30 fp40 glsl gp4gp gpu_gp nvgp4 vp30 vp40 |
1033 | +17:43:02: * Texture Compression: yes |
1034 | +17:43:02: - DXT: yes |
1035 | +17:43:02: - VTC: yes |
1036 | +17:43:02: - PVRTC: no |
1037 | +17:43:02: * Scissor Rectangle: yes |
1038 | +17:43:02: * Hardware Occlusion Query: yes |
1039 | +17:43:02: * User clip planes: yes |
1040 | +17:43:02: * VET_UBYTE4 vertex element type: yes |
1041 | +17:43:02: * Infinite far plane projection: yes |
1042 | +17:43:02: * Hardware render-to-texture: yes |
1043 | +17:43:02: * Floating point textures: yes |
1044 | +17:43:02: * Non-power-of-two textures: yes |
1045 | +17:43:02: * Volume textures: yes |
1046 | +17:43:02: * Multiple Render Targets: 8 |
1047 | +17:43:02: - With different bit depths: yes |
1048 | +17:43:02: * Point Sprites: yes |
1049 | +17:43:02: * Extended point parameters: yes |
1050 | +17:43:02: * Max Point Size: 63.375 |
1051 | +17:43:02: * Vertex texture fetch: yes |
1052 | +17:43:02: * Number of world matrices: 0 |
1053 | +17:43:02: * Number of texture units: 32 |
1054 | +17:43:02: * Stencil buffer depth: 8 |
1055 | +17:43:02: * Number of vertex blend matrices: 0 |
1056 | +17:43:02: - Max vertex textures: 32 |
1057 | +17:43:02: - Vertex textures shared: yes |
1058 | +17:43:02: * Render to Vertex Buffer : yes |
1059 | +17:43:02: * GL 1.5 without VBO workaround: no |
1060 | +17:43:02: * Frame Buffer objects: yes |
1061 | +17:43:02: * Frame Buffer objects (ARB extension): no |
1062 | +17:43:02: * Frame Buffer objects (ATI extension): no |
1063 | +17:43:02: * PBuffer support: no |
1064 | +17:43:02: * GL 1.5 without HW-occlusion workaround: no |
1065 | +17:43:02: Registering ResourceManager for type Texture |
1066 | +17:43:02: DefaultWorkQueue('Root') initialising on thread 0x9365da8. |
1067 | +17:43:02: DefaultWorkQueue('Root')::WorkerFunc - thread 0x96397c8 starting. |
1068 | +17:43:02: Particle Renderer Type 'billboard' registered |
1069 | +17:43:02: SceneManagerFactory for type 'OctreeSceneManager' registered. |
1070 | +17:43:02: SceneManagerFactory for type 'TerrainSceneManager' registered. |
1071 | +17:43:03: Added resource location '/home/ugo/ros_latest/stacks/visualization/rviz/ogre_media/textures' of type 'FileSystem' to resource group 'General' |
1072 | +17:43:03: Parsing scripts for resource group Autodetect |
1073 | +17:43:03: Finished parsing scripts for resource group Autodetect |
1074 | +17:43:03: Parsing scripts for resource group General |
1075 | +17:43:03: Finished parsing scripts for resource group General |
1076 | +17:43:03: Parsing scripts for resource group Internal |
1077 | +17:43:03: Finished parsing scripts for resource group Internal |
1078 | +17:43:03: Parsing scripts for resource group ogre_tools |
1079 | +17:43:03: Parsing script point_cloud_billboard.program |
1080 | +17:43:03: Parsing script point_cloud_box.program |
1081 | +17:43:03: Parsing script passthrough.program |
1082 | +17:43:03: Parsing script point_cloud_point.program |
1083 | +17:43:03: Parsing script point_cloud_box.material |
1084 | +17:43:03: Parsing script point_cloud_billboard.material |
1085 | +17:43:03: Parsing script point_cloud_point.material |
1086 | +17:43:03: Parsing script arial.fontdef |
1087 | +17:43:03: Finished parsing scripts for resource group ogre_tools |
1088 | +17:43:03: Creating resource group rviz |
1089 | +17:43:04: Mesh: Loading ogre_tools_sphere.mesh. |
1090 | +17:43:04: WARNING: ogre_tools_sphere.mesh is an older format ([MeshSerializer_v1.40]); you should upgrade it as soon as possible using the OgreMeshUpgrade tool. |
1091 | +17:43:04: Mesh: Loading ogre_tools_cylinder.mesh. |
1092 | +17:43:04: WARNING: ogre_tools_cylinder.mesh is an older format ([MeshSerializer_v1.40]); you should upgrade it as soon as possible using the OgreMeshUpgrade tool. |
1093 | +17:43:04: Mesh: Loading ogre_tools_cone.mesh. |
1094 | +17:43:04: WARNING: ogre_tools_cone.mesh is an older format ([MeshSerializer_v1.40]); you should upgrade it as soon as possible using the OgreMeshUpgrade tool. |
1095 | +17:43:04: Texture: SelectionRect0Texture: Loading 1 faces(PF_R8G8B8A8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_A8R8G8B8,1x1x1. |
1096 | +17:43:05: WARNING: package://sr_hand/model/meshes/F1.mesh is an older format ([MeshSerializer_v1.40]); you should upgrade it as soon as possible using the OgreMeshUpgrade tool. |
1097 | +17:43:05: Can't assign material osg13mat0 to SubEntity of Robot Link0 because this Material does not exist. Have you forgotten to define it in a .material script? |
1098 | +17:43:05: Mesh: Loading ogre_tools_cube.mesh. |
1099 | +17:43:05: WARNING: ogre_tools_cube.mesh is an older format ([MeshSerializer_v1.40]); you should upgrade it as soon as possible using the OgreMeshUpgrade tool. |
1100 | +17:43:05: Texture: Robot Link Material00RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1101 | +17:43:05: Texture: Robot Link Material00RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1102 | +17:43:05: WARNING: package://sr_hand/model/meshes/knuckle.mesh is an older format ([MeshSerializer_v1.40]); you should upgrade it as soon as possible using the OgreMeshUpgrade tool. |
1103 | +17:43:05: Can't assign material osg2mat0 to SubEntity of Robot Link2 because this Material does not exist. Have you forgotten to define it in a .material script? |
1104 | +17:43:05: Texture: Robot Link Material01RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1105 | +17:43:05: Texture: Robot Link Material01RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1106 | +17:43:05: WARNING: package://sr_hand/model/meshes/F2.mesh is an older format ([MeshSerializer_v1.40]); you should upgrade it as soon as possible using the OgreMeshUpgrade tool. |
1107 | +17:43:05: Can't assign material osg16mat0 to SubEntity of Robot Link4 because this Material does not exist. Have you forgotten to define it in a .material script? |
1108 | +17:43:05: Texture: Robot Link Material02RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1109 | +17:43:05: Texture: Robot Link Material02RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1110 | +17:43:05: WARNING: package://sr_hand/model/meshes/F3.mesh is an older format ([MeshSerializer_v1.40]); you should upgrade it as soon as possible using the OgreMeshUpgrade tool. |
1111 | +17:43:05: Can't assign material osg11mat0 to SubEntity of Robot Link6 because this Material does not exist. Have you forgotten to define it in a .material script? |
1112 | +17:43:05: Texture: Robot Link Material03RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1113 | +17:43:05: Texture: Robot Link Material03RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1114 | +17:43:05: Can't assign material osg13mat0 to SubEntity of Robot Link8 because this Material does not exist. Have you forgotten to define it in a .material script? |
1115 | +17:43:05: Texture: Robot Link Material04RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1116 | +17:43:05: Texture: Robot Link Material04RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1117 | +17:43:05: Can't assign material osg2mat0 to SubEntity of Robot Link10 because this Material does not exist. Have you forgotten to define it in a .material script? |
1118 | +17:43:05: Texture: Robot Link Material05RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1119 | +17:43:05: Texture: Robot Link Material05RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1120 | +17:43:05: WARNING: package://sr_hand/model/meshes/lfmetacarpal.mesh is an older format ([MeshSerializer_v1.40]); you should upgrade it as soon as possible using the OgreMeshUpgrade tool. |
1121 | +17:43:05: Can't assign material Material.001 to SubEntity of Robot Link12 because this Material does not exist. Have you forgotten to define it in a .material script? |
1122 | +17:43:05: Texture: Robot Link Material06RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1123 | +17:43:05: Texture: Robot Link Material06RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1124 | +17:43:05: Can't assign material osg16mat0 to SubEntity of Robot Link14 because this Material does not exist. Have you forgotten to define it in a .material script? |
1125 | +17:43:05: Texture: Robot Link Material07RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1126 | +17:43:05: Texture: Robot Link Material07RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1127 | +17:43:05: Can't assign material osg11mat0 to SubEntity of Robot Link16 because this Material does not exist. Have you forgotten to define it in a .material script? |
1128 | +17:43:05: Texture: Robot Link Material08RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1129 | +17:43:05: Texture: Robot Link Material08RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1130 | +17:43:05: Can't assign material osg13mat0 to SubEntity of Robot Link18 because this Material does not exist. Have you forgotten to define it in a .material script? |
1131 | +17:43:05: Texture: Robot Link Material09RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1132 | +17:43:05: Texture: Robot Link Material09RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1133 | +17:43:05: Can't assign material osg2mat0 to SubEntity of Robot Link20 because this Material does not exist. Have you forgotten to define it in a .material script? |
1134 | +17:43:05: Texture: Robot Link Material010RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1135 | +17:43:05: Texture: Robot Link Material010RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1136 | +17:43:05: Can't assign material osg16mat0 to SubEntity of Robot Link22 because this Material does not exist. Have you forgotten to define it in a .material script? |
1137 | +17:43:05: Texture: Robot Link Material011RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1138 | +17:43:05: Texture: Robot Link Material011RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1139 | +17:43:05: Can't assign material osg11mat0 to SubEntity of Robot Link24 because this Material does not exist. Have you forgotten to define it in a .material script? |
1140 | +17:43:05: Texture: Robot Link Material012RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1141 | +17:43:05: Texture: Robot Link Material012RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1142 | +17:43:05: WARNING: package://sr_hand/model/meshes/palm.mesh is an older format ([MeshSerializer_v1.40]); you should upgrade it as soon as possible using the OgreMeshUpgrade tool. |
1143 | +17:43:05: Can't assign material Material.001 to SubEntity of Robot Link26 because this Material does not exist. Have you forgotten to define it in a .material script? |
1144 | +17:43:05: Texture: Robot Link Material013RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1145 | +17:43:05: Texture: Robot Link Material013RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1146 | +17:43:05: Can't assign material osg13mat0 to SubEntity of Robot Link28 because this Material does not exist. Have you forgotten to define it in a .material script? |
1147 | +17:43:05: Texture: Robot Link Material014RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1148 | +17:43:05: Texture: Robot Link Material014RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1149 | +17:43:05: Can't assign material osg2mat0 to SubEntity of Robot Link30 because this Material does not exist. Have you forgotten to define it in a .material script? |
1150 | +17:43:05: Texture: Robot Link Material015RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1151 | +17:43:05: Texture: Robot Link Material015RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1152 | +17:43:05: Can't assign material osg16mat0 to SubEntity of Robot Link32 because this Material does not exist. Have you forgotten to define it in a .material script? |
1153 | +17:43:05: Texture: Robot Link Material016RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1154 | +17:43:05: Texture: Robot Link Material016RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1155 | +17:43:05: Can't assign material osg11mat0 to SubEntity of Robot Link34 because this Material does not exist. Have you forgotten to define it in a .material script? |
1156 | +17:43:05: Texture: Robot Link Material017RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1157 | +17:43:05: Texture: Robot Link Material017RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1158 | +17:43:05: WARNING: package://sr_hand/model/meshes/forearm.mesh is an older format ([MeshSerializer_v1.40]); you should upgrade it as soon as possible using the OgreMeshUpgrade tool. |
1159 | +17:43:05: Can't assign material Material.011 to SubEntity of Robot Link36 because this Material does not exist. Have you forgotten to define it in a .material script? |
1160 | +17:43:05: Can't assign material Material.010 to SubEntity of Robot Link36 because this Material does not exist. Have you forgotten to define it in a .material script? |
1161 | +17:43:05: Can't assign material Material.009 to SubEntity of Robot Link36 because this Material does not exist. Have you forgotten to define it in a .material script? |
1162 | +17:43:05: Can't assign material Material.008 to SubEntity of Robot Link36 because this Material does not exist. Have you forgotten to define it in a .material script? |
1163 | +17:43:05: Can't assign material Material.007 to SubEntity of Robot Link36 because this Material does not exist. Have you forgotten to define it in a .material script? |
1164 | +17:43:05: Can't assign material Material.006 to SubEntity of Robot Link36 because this Material does not exist. Have you forgotten to define it in a .material script? |
1165 | +17:43:05: Can't assign material Material.005 to SubEntity of Robot Link36 because this Material does not exist. Have you forgotten to define it in a .material script? |
1166 | +17:43:05: Can't assign material Material.004 to SubEntity of Robot Link36 because this Material does not exist. Have you forgotten to define it in a .material script? |
1167 | +17:43:05: Can't assign material Material.003 to SubEntity of Robot Link36 because this Material does not exist. Have you forgotten to define it in a .material script? |
1168 | +17:43:05: Can't assign material Material.002 to SubEntity of Robot Link36 because this Material does not exist. Have you forgotten to define it in a .material script? |
1169 | +17:43:05: Can't assign material Material.001 to SubEntity of Robot Link36 because this Material does not exist. Have you forgotten to define it in a .material script? |
1170 | +17:43:05: Texture: Robot Link Material018RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1171 | +17:43:05: Texture: Robot Link Material018RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1172 | +17:43:05: Texture: Robot Link Material018RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1173 | +17:43:05: Texture: Robot Link Material018RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1174 | +17:43:05: Texture: Robot Link Material018RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1175 | +17:43:05: Texture: Robot Link Material018RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1176 | +17:43:05: Texture: Robot Link Material018RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1177 | +17:43:05: Texture: Robot Link Material018RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1178 | +17:43:05: Texture: Robot Link Material018RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1179 | +17:43:05: Texture: Robot Link Material018RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1180 | +17:43:05: Texture: Robot Link Material018RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1181 | +17:43:05: Texture: Robot Link Material018RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1182 | +17:43:05: Texture: Robot Link Material019RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1183 | +17:43:05: Texture: Robot Link Material019RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1184 | +17:43:05: WARNING: package://sr_hand/model/meshes/TH1_z.mesh is an older format ([MeshSerializer_v1.40]); you should upgrade it as soon as possible using the OgreMeshUpgrade tool. |
1185 | +17:43:05: Can't assign material osg20mat0 to SubEntity of Robot Link40 because this Material does not exist. Have you forgotten to define it in a .material script? |
1186 | +17:43:05: Texture: Robot Link Material020RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1187 | +17:43:05: Texture: Robot Link Material020RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1188 | +17:43:05: Texture: Robot Link Material021RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1189 | +17:43:05: Texture: Robot Link Material021RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1190 | +17:43:05: WARNING: package://sr_hand/model/meshes/TH2_z.mesh is an older format ([MeshSerializer_v1.40]); you should upgrade it as soon as possible using the OgreMeshUpgrade tool. |
1191 | +17:43:05: Can't assign material osg19mat0 to SubEntity of Robot Link44 because this Material does not exist. Have you forgotten to define it in a .material script? |
1192 | +17:43:05: Texture: Robot Link Material022RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1193 | +17:43:05: Texture: Robot Link Material022RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1194 | +17:43:05: WARNING: package://sr_hand/model/meshes/TH3_z.mesh is an older format ([MeshSerializer_v1.40]); you should upgrade it as soon as possible using the OgreMeshUpgrade tool. |
1195 | +17:43:05: Can't assign material osg18mat0 to SubEntity of Robot Link46 because this Material does not exist. Have you forgotten to define it in a .material script? |
1196 | +17:43:05: Texture: Robot Link Material023RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1197 | +17:43:05: Texture: Robot Link Material023RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1198 | +17:43:05: WARNING: package://sr_hand/model/meshes/wrist.mesh is an older format ([MeshSerializer_v1.40]); you should upgrade it as soon as possible using the OgreMeshUpgrade tool. |
1199 | +17:43:05: Texture: Robot Link Material024RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1200 | +17:43:05: Texture: Robot Link Material024RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1201 | +17:43:05: Can't assign material osg13mat0 to SubEntity of Robot Link50 because this Material does not exist. Have you forgotten to define it in a .material script? |
1202 | +17:43:05: Texture: Robot Link Material025RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1203 | +17:43:05: Texture: Robot Link Material025RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1204 | +17:43:05: Can't assign material osg2mat0 to SubEntity of Robot Link52 because this Material does not exist. Have you forgotten to define it in a .material script? |
1205 | +17:43:05: Texture: Robot Link Material026RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1206 | +17:43:05: Texture: Robot Link Material026RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1207 | +17:43:05: Can't assign material osg16mat0 to SubEntity of Robot Link54 because this Material does not exist. Have you forgotten to define it in a .material script? |
1208 | +17:43:05: Texture: Robot Link Material027RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1209 | +17:43:05: Texture: Robot Link Material027RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1210 | +17:43:05: Can't assign material osg11mat0 to SubEntity of Robot Link56 because this Material does not exist. Have you forgotten to define it in a .material script? |
1211 | +17:43:05: Texture: Robot Link Material028RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1212 | +17:43:05: Texture: Robot Link Material028RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1213 | +17:43:05: Can't assign material osg13mat0 to SubEntity of Robot Link58 because this Material does not exist. Have you forgotten to define it in a .material script? |
1214 | +17:43:05: Texture: Robot Link Material029RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1215 | +17:43:05: Texture: Robot Link Material029RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1216 | +17:43:05: Can't assign material osg2mat0 to SubEntity of Robot Link60 because this Material does not exist. Have you forgotten to define it in a .material script? |
1217 | +17:43:05: Texture: Robot Link Material030RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1218 | +17:43:05: Texture: Robot Link Material030RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1219 | +17:43:05: Can't assign material Material.001 to SubEntity of Robot Link62 because this Material does not exist. Have you forgotten to define it in a .material script? |
1220 | +17:43:05: Texture: Robot Link Material031RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1221 | +17:43:05: Texture: Robot Link Material031RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1222 | +17:43:05: Can't assign material osg16mat0 to SubEntity of Robot Link64 because this Material does not exist. Have you forgotten to define it in a .material script? |
1223 | +17:43:05: Texture: Robot Link Material032RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1224 | +17:43:05: Texture: Robot Link Material032RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1225 | +17:43:05: Can't assign material osg11mat0 to SubEntity of Robot Link66 because this Material does not exist. Have you forgotten to define it in a .material script? |
1226 | +17:43:05: Texture: Robot Link Material033RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1227 | +17:43:05: Texture: Robot Link Material033RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1228 | +17:43:05: Can't assign material osg13mat0 to SubEntity of Robot Link68 because this Material does not exist. Have you forgotten to define it in a .material script? |
1229 | +17:43:05: Texture: Robot Link Material034RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1230 | +17:43:05: Texture: Robot Link Material034RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1231 | +17:43:05: Can't assign material osg2mat0 to SubEntity of Robot Link70 because this Material does not exist. Have you forgotten to define it in a .material script? |
1232 | +17:43:05: Texture: Robot Link Material035RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1233 | +17:43:05: Texture: Robot Link Material035RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1234 | +17:43:05: Can't assign material osg16mat0 to SubEntity of Robot Link72 because this Material does not exist. Have you forgotten to define it in a .material script? |
1235 | +17:43:05: Texture: Robot Link Material036RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1236 | +17:43:05: Texture: Robot Link Material036RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1237 | +17:43:05: Can't assign material osg11mat0 to SubEntity of Robot Link74 because this Material does not exist. Have you forgotten to define it in a .material script? |
1238 | +17:43:05: Texture: Robot Link Material037RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1239 | +17:43:05: Texture: Robot Link Material037RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1240 | +17:43:05: Can't assign material Material.001 to SubEntity of Robot Link76 because this Material does not exist. Have you forgotten to define it in a .material script? |
1241 | +17:43:05: Texture: Robot Link Material038RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1242 | +17:43:05: Texture: Robot Link Material038RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1243 | +17:43:05: Can't assign material osg13mat0 to SubEntity of Robot Link78 because this Material does not exist. Have you forgotten to define it in a .material script? |
1244 | +17:43:05: Texture: Robot Link Material039RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1245 | +17:43:05: Texture: Robot Link Material039RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1246 | +17:43:05: Can't assign material osg2mat0 to SubEntity of Robot Link80 because this Material does not exist. Have you forgotten to define it in a .material script? |
1247 | +17:43:05: Texture: Robot Link Material040RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1248 | +17:43:05: Texture: Robot Link Material040RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1249 | +17:43:05: Can't assign material osg16mat0 to SubEntity of Robot Link82 because this Material does not exist. Have you forgotten to define it in a .material script? |
1250 | +17:43:05: Texture: Robot Link Material041RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1251 | +17:43:05: Texture: Robot Link Material041RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1252 | +17:43:05: Can't assign material osg11mat0 to SubEntity of Robot Link84 because this Material does not exist. Have you forgotten to define it in a .material script? |
1253 | +17:43:05: Texture: Robot Link Material042RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1254 | +17:43:05: Texture: Robot Link Material042RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1255 | +17:43:05: Can't assign material Material.011 to SubEntity of Robot Link86 because this Material does not exist. Have you forgotten to define it in a .material script? |
1256 | +17:43:05: Can't assign material Material.010 to SubEntity of Robot Link86 because this Material does not exist. Have you forgotten to define it in a .material script? |
1257 | +17:43:05: Can't assign material Material.009 to SubEntity of Robot Link86 because this Material does not exist. Have you forgotten to define it in a .material script? |
1258 | +17:43:05: Can't assign material Material.008 to SubEntity of Robot Link86 because this Material does not exist. Have you forgotten to define it in a .material script? |
1259 | +17:43:05: Can't assign material Material.007 to SubEntity of Robot Link86 because this Material does not exist. Have you forgotten to define it in a .material script? |
1260 | +17:43:05: Can't assign material Material.006 to SubEntity of Robot Link86 because this Material does not exist. Have you forgotten to define it in a .material script? |
1261 | +17:43:05: Can't assign material Material.005 to SubEntity of Robot Link86 because this Material does not exist. Have you forgotten to define it in a .material script? |
1262 | +17:43:05: Can't assign material Material.004 to SubEntity of Robot Link86 because this Material does not exist. Have you forgotten to define it in a .material script? |
1263 | +17:43:05: Can't assign material Material.003 to SubEntity of Robot Link86 because this Material does not exist. Have you forgotten to define it in a .material script? |
1264 | +17:43:05: Can't assign material Material.002 to SubEntity of Robot Link86 because this Material does not exist. Have you forgotten to define it in a .material script? |
1265 | +17:43:05: Can't assign material Material.001 to SubEntity of Robot Link86 because this Material does not exist. Have you forgotten to define it in a .material script? |
1266 | +17:43:05: Texture: Robot Link Material043RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1267 | +17:43:05: Texture: Robot Link Material043RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1268 | +17:43:05: Texture: Robot Link Material043RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1269 | +17:43:05: Texture: Robot Link Material043RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1270 | +17:43:05: Texture: Robot Link Material043RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1271 | +17:43:05: Texture: Robot Link Material043RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1272 | +17:43:05: Texture: Robot Link Material043RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1273 | +17:43:05: Texture: Robot Link Material043RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1274 | +17:43:05: Texture: Robot Link Material043RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1275 | +17:43:05: Texture: Robot Link Material043RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1276 | +17:43:05: Texture: Robot Link Material043RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1277 | +17:43:05: Texture: Robot Link Material043RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1278 | +17:43:05: Texture: Robot Link Material044RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1279 | +17:43:05: Texture: Robot Link Material044RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1280 | +17:43:05: Can't assign material osg20mat0 to SubEntity of Robot Link90 because this Material does not exist. Have you forgotten to define it in a .material script? |
1281 | +17:43:05: Texture: Robot Link Material045RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1282 | +17:43:05: Texture: Robot Link Material045RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1283 | +17:43:05: Texture: Robot Link Material046RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1284 | +17:43:05: Texture: Robot Link Material046RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1285 | +17:43:05: Can't assign material osg19mat0 to SubEntity of Robot Link94 because this Material does not exist. Have you forgotten to define it in a .material script? |
1286 | +17:43:05: Texture: Robot Link Material047RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1287 | +17:43:05: Texture: Robot Link Material047RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1288 | +17:43:05: Can't assign material osg18mat0 to SubEntity of Robot Link96 because this Material does not exist. Have you forgotten to define it in a .material script? |
1289 | +17:43:05: Texture: Robot Link Material048RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1290 | +17:43:05: Texture: Robot Link Material048RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1291 | +17:43:05: Texture: Robot Link Material049RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1292 | +17:43:05: Texture: Robot Link Material049RobotPickTexture: Loading 1 faces(PF_R8G8B8,1x1x1) with 0 generated mipmaps from Image. Internal format is PF_X8R8G8B8,1x1x1. |
1293 | +17:43:16: Font Arialusing texture size 512x512 |
1294 | +17:43:16: Info: Freetype returned null for character 160 in font Arial |
1295 | +17:43:16: Texture: ArialTexture: Loading 1 faces(PF_BYTE_LA,512x512x1) with 0 generated mipmaps from Image. Internal format is PF_BYTE_LA,512x512x1. |
1296 | +17:43:16: OGRE EXCEPTION(7:InternalErrorException): Vertex Buffer: Out of memory in GLHardwareVertexBuffer::lock at /home/ugo/ros_latest/stacks/visualization_common/ogre/build/ogre_src_v1-7-1/RenderSystems/GL/src/OgreGLHardwareVertexBuffer.cpp (line 126) |
1297 | |
1298 | === added directory 'shadow_robot/cyberglove/bin' |
1299 | === added directory 'shadow_robot/cyberglove/bin/test' |
1300 | === added file 'shadow_robot/cyberglove/cmake_install.cmake' |
1301 | --- shadow_robot/cyberglove/cmake_install.cmake 1970-01-01 00:00:00 +0000 |
1302 | +++ shadow_robot/cyberglove/cmake_install.cmake 2010-11-03 16:17:45 +0000 |
1303 | @@ -0,0 +1,44 @@ |
1304 | +# Install script for directory: /home/ugo/Projects/ROS_interfaces/sr-ros-interface/trunk/shadow_robot/cyberglove |
1305 | + |
1306 | +# Set the install prefix |
1307 | +IF(NOT DEFINED CMAKE_INSTALL_PREFIX) |
1308 | + SET(CMAKE_INSTALL_PREFIX "/usr/local") |
1309 | +ENDIF(NOT DEFINED CMAKE_INSTALL_PREFIX) |
1310 | +STRING(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") |
1311 | + |
1312 | +# Set the install configuration name. |
1313 | +IF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) |
1314 | + IF(BUILD_TYPE) |
1315 | + STRING(REGEX REPLACE "^[^A-Za-z0-9_]+" "" |
1316 | + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") |
1317 | + ELSE(BUILD_TYPE) |
1318 | + SET(CMAKE_INSTALL_CONFIG_NAME "RelWithDebInfo") |
1319 | + ENDIF(BUILD_TYPE) |
1320 | + MESSAGE(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") |
1321 | +ENDIF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) |
1322 | + |
1323 | +# Set the component getting installed. |
1324 | +IF(NOT CMAKE_INSTALL_COMPONENT) |
1325 | + IF(COMPONENT) |
1326 | + MESSAGE(STATUS "Install component: \"${COMPONENT}\"") |
1327 | + SET(CMAKE_INSTALL_COMPONENT "${COMPONENT}") |
1328 | + ELSE(COMPONENT) |
1329 | + SET(CMAKE_INSTALL_COMPONENT) |
1330 | + ENDIF(COMPONENT) |
1331 | +ENDIF(NOT CMAKE_INSTALL_COMPONENT) |
1332 | + |
1333 | +# Install shared libraries without execute permission? |
1334 | +IF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) |
1335 | + SET(CMAKE_INSTALL_SO_NO_EXE "1") |
1336 | +ENDIF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) |
1337 | + |
1338 | +IF(CMAKE_INSTALL_COMPONENT) |
1339 | + SET(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") |
1340 | +ELSE(CMAKE_INSTALL_COMPONENT) |
1341 | + SET(CMAKE_INSTALL_MANIFEST "install_manifest.txt") |
1342 | +ENDIF(CMAKE_INSTALL_COMPONENT) |
1343 | + |
1344 | +FILE(WRITE "/home/ugo/Projects/ROS_interfaces/sr-ros-interface/trunk/shadow_robot/cyberglove/${CMAKE_INSTALL_MANIFEST}" "") |
1345 | +FOREACH(file ${CMAKE_INSTALL_MANIFEST_FILES}) |
1346 | + FILE(APPEND "/home/ugo/Projects/ROS_interfaces/sr-ros-interface/trunk/shadow_robot/cyberglove/${CMAKE_INSTALL_MANIFEST}" "${file}\n") |
1347 | +ENDFOREACH(file) |
1348 | |
1349 | === added file 'shadow_robot/cyberglove/create_eclipse_project' |
1350 | --- shadow_robot/cyberglove/create_eclipse_project 1970-01-01 00:00:00 +0000 |
1351 | +++ shadow_robot/cyberglove/create_eclipse_project 2010-11-03 16:17:45 +0000 |
1352 | @@ -0,0 +1,9 @@ |
1353 | +#!/bin/bash |
1354 | + |
1355 | +cd $(dirname $0) |
1356 | +mv Makefile Makefile.ros |
1357 | +cmake -G"Eclipse CDT4 - Unix Makefiles" -Wno-dev . |
1358 | +rm Makefile |
1359 | +rm CMakeCache.txt |
1360 | +rm -rf CMakeFiles |
1361 | +mv Makefile.ros Makefile |
1362 | |
1363 | === added file 'shadow_robot/cyberglove/cyberglove.launch' |
1364 | --- shadow_robot/cyberglove/cyberglove.launch 1970-01-01 00:00:00 +0000 |
1365 | +++ shadow_robot/cyberglove/cyberglove.launch 2010-11-03 16:17:45 +0000 |
1366 | @@ -0,0 +1,20 @@ |
1367 | +<launch> |
1368 | + |
1369 | + <param name="robot_description" textfile="$(find |
1370 | + cyberglove)/model/cyberglove.xml"/> |
1371 | + |
1372 | + <node pkg="cyberglove" name="cyberglove" type="cyberglove"> |
1373 | + <param name="cyberglove_prefix" type="string" value="/cyberglove" /> |
1374 | + <param name="publish_frequency" type="double" value="20.0" /> |
1375 | + <param name="path_to_glove" type="string" value="/dev/ttyS0" /> |
1376 | + <param name="path_to_calibration" type="string" value="$(find |
1377 | + sr_control_gui)/param/cyberglove.cal" /> |
1378 | + </node> |
1379 | + |
1380 | + <!-- Robot state publisher --> |
1381 | + <node pkg="robot_state_publisher" type="state_publisher" |
1382 | + name="robot_state_publisher"> |
1383 | + <param name="publish_frequency" type="double" value="10.0" /> |
1384 | + <param name="tf_prefix" type="string" value="" /> |
1385 | + </node> |
1386 | +</launch> |
1387 | |
1388 | === added directory 'shadow_robot/cyberglove/include' |
1389 | === added directory 'shadow_robot/cyberglove/include/cyberglove' |
1390 | === added file 'shadow_robot/cyberglove/include/cyberglove/cyberglove_publisher.h' |
1391 | --- shadow_robot/cyberglove/include/cyberglove/cyberglove_publisher.h 1970-01-01 00:00:00 +0000 |
1392 | +++ shadow_robot/cyberglove/include/cyberglove/cyberglove_publisher.h 2010-11-03 16:17:45 +0000 |
1393 | @@ -0,0 +1,71 @@ |
1394 | +/** |
1395 | + * @file cyberglove_publisher.h |
1396 | + * @author Ugo Cupcic <ugo@shadowrobot.com>, Contact <contact@shadowrobot.com> |
1397 | + * @date Thu Apr 22 10:25:55 2010 |
1398 | + * |
1399 | + * @brief This class reads and publishes data concerning the |
1400 | + * cyberglove. To publish those data, just call the publish() |
1401 | + * function. |
1402 | + * |
1403 | + * |
1404 | + */ |
1405 | + |
1406 | +#ifndef CYBERGLOVE_PUBLISHER_H_ |
1407 | +# define CYBERGLOVE_PUBLISHER_H_ |
1408 | + |
1409 | +#include <ros/ros.h> |
1410 | +#include <vector> |
1411 | + |
1412 | +//messages |
1413 | +#include <sensor_msgs/JointState.h> |
1414 | +#include "cyberglove/xml_calibration_parser.h" |
1415 | + |
1416 | +using namespace ros; |
1417 | + |
1418 | +namespace cyberglove_publisher{ |
1419 | + |
1420 | +class CyberglovePublisher |
1421 | +{ |
1422 | + public: |
1423 | + /// Constructor |
1424 | + CyberglovePublisher(); |
1425 | + |
1426 | + /// Destructor |
1427 | + ~CyberglovePublisher(); |
1428 | + |
1429 | + Publisher cyberglove_pub; |
1430 | + void initialize_calibration(std::string path_to_calibration); |
1431 | + void publish(); |
1432 | + bool isPublishing(); |
1433 | + void setPublishing(bool value); |
1434 | + private: |
1435 | + ///////////////// |
1436 | + // CALLBACKS // |
1437 | + ///////////////// |
1438 | + |
1439 | + //ros node handle |
1440 | + NodeHandle node, n_tilde; |
1441 | + Rate publish_rate; |
1442 | + std::string path_to_glove; |
1443 | + bool publishing; |
1444 | + |
1445 | + ///the calibration parser |
1446 | + xml_calibration_parser::XmlCalibrationParser calibration_parser; |
1447 | + |
1448 | + Publisher cyberglove_raw_pub; |
1449 | + |
1450 | + sensor_msgs::JointState jointstate_msg; |
1451 | + sensor_msgs::JointState jointstate_raw_msg; |
1452 | + |
1453 | + void add_jointstate(float position, std::string joint_name); |
1454 | + |
1455 | + std::vector<float> calibration_values; |
1456 | + |
1457 | + float* glovePositions; |
1458 | + |
1459 | + bool checkGloveState(); |
1460 | + |
1461 | +}; // end class CyberglovePublisher |
1462 | + |
1463 | +} // end namespace |
1464 | +#endif /* !CYBERGLOVE_PUBLISHER_H_ */ |
1465 | |
1466 | === added file 'shadow_robot/cyberglove/include/cyberglove/cyberglove_service.h' |
1467 | --- shadow_robot/cyberglove/include/cyberglove/cyberglove_service.h 1970-01-01 00:00:00 +0000 |
1468 | +++ shadow_robot/cyberglove/include/cyberglove/cyberglove_service.h 2010-11-03 16:17:45 +0000 |
1469 | @@ -0,0 +1,47 @@ |
1470 | +/** |
1471 | + * @file cyberglove_service.h |
1472 | + * @author Ugo Cupcic <ugo@shadowrobot.com>, Contact <contact@shadowrobot.com> |
1473 | + * @date Thu Apr 22 10:25:55 2010 |
1474 | + * |
1475 | + * @brief A service which can stop / start the Cyberglove publisher. |
1476 | + * |
1477 | + * |
1478 | + */ |
1479 | + |
1480 | + |
1481 | +#ifndef CYBERGLOVE_SERVICE_H_ |
1482 | +# define CYBERGLOVE_SERVICE_H_ |
1483 | + |
1484 | +#include <ros/ros.h> |
1485 | +#include <vector> |
1486 | +#include "cyberglove_publisher.h" |
1487 | +#include "cyberglove/Start.h" |
1488 | +#include "cyberglove/Calibration.h" |
1489 | +#include <boost/smart_ptr.hpp> |
1490 | + |
1491 | +//messages |
1492 | + |
1493 | +using namespace ros; |
1494 | + |
1495 | +namespace cyberglove_service{ |
1496 | + |
1497 | + class CybergloveService |
1498 | + { |
1499 | + public: |
1500 | + /// Constructor |
1501 | + CybergloveService(boost::shared_ptr<cyberglove_publisher::CyberglovePublisher> publish); |
1502 | + ~CybergloveService(){}; |
1503 | + |
1504 | + //CybergloveService(); |
1505 | + bool start(cyberglove::Start::Request &req, cyberglove::Start::Response &res); |
1506 | + bool calibration(cyberglove::Calibration::Request &req, cyberglove::Calibration::Response &res); |
1507 | + private: |
1508 | + |
1509 | + NodeHandle node; |
1510 | + boost::shared_ptr<cyberglove_publisher::CyberglovePublisher> pub; |
1511 | + ros::ServiceServer service_start; |
1512 | + ros::ServiceServer service_calibration; |
1513 | + }; |
1514 | + |
1515 | +} |
1516 | +#endif |
1517 | |
1518 | === added file 'shadow_robot/cyberglove/include/cyberglove/serial_glove.h' |
1519 | --- shadow_robot/cyberglove/include/cyberglove/serial_glove.h 1970-01-01 00:00:00 +0000 |
1520 | +++ shadow_robot/cyberglove/include/cyberglove/serial_glove.h 2010-11-03 16:17:45 +0000 |
1521 | @@ -0,0 +1,48 @@ |
1522 | +/** |
1523 | + * @file serial_glove.h |
1524 | + * @author Ugo Cupcic <ugo@shadowrobot.com> |
1525 | + * @date Thu Apr 22 10:25:55 2010 |
1526 | + * |
1527 | + * @brief The C interface to interact with the cyberglove. |
1528 | + * |
1529 | + * |
1530 | + */ |
1531 | +#ifdef __cplusplus |
1532 | +extern "C" { |
1533 | +#endif |
1534 | + |
1535 | +#ifndef SERIAL_GLOVE_H |
1536 | +#define SERIAL_GLOVE_H |
1537 | + |
1538 | + |
1539 | + int setup_glove(const char* path_to_glove); |
1540 | + float* glove_get_values(void); |
1541 | + int read_button_value(void); |
1542 | + |
1543 | + |
1544 | +#define PORT "3490" // use one port, client request or sends data depending on message |
1545 | +#define GLOVE_SIZE 22 // number of sensors in the glove |
1546 | + |
1547 | + |
1548 | + |
1549 | +//! call the enum names directly as if they are #defines |
1550 | +//! the message protocol headers, for passing or requesting data, or for issuing commands |
1551 | + |
1552 | + typedef enum { |
1553 | + MSG_TEST_CONNECTION = 100, |
1554 | + MSG_UPDATE_SETPOINTS, |
1555 | + MSG_GET_POSITIONS, |
1556 | + MSG_RESTART_ROBOT, |
1557 | + |
1558 | + MSG_DATA_READY = 200, |
1559 | + MSG_DATA_UNAVAILABLE |
1560 | + } msg_id_t; |
1561 | + |
1562 | + |
1563 | + |
1564 | + |
1565 | +#endif |
1566 | + |
1567 | +#ifdef __cplusplus |
1568 | +} |
1569 | +#endif |
1570 | |
1571 | === added file 'shadow_robot/cyberglove/include/cyberglove/xml_calibration_parser.h' |
1572 | --- shadow_robot/cyberglove/include/cyberglove/xml_calibration_parser.h 1970-01-01 00:00:00 +0000 |
1573 | +++ shadow_robot/cyberglove/include/cyberglove/xml_calibration_parser.h 2010-11-03 16:17:45 +0000 |
1574 | @@ -0,0 +1,119 @@ |
1575 | +/** |
1576 | + * @file xml_calibration_parser.h |
1577 | + * @author Ugo Cupcic <ugo@shadowrobot.com> |
1578 | + * @date Tue Apr 27 11:30:41 2010 |
1579 | + * |
1580 | + * @brief This is a simple xml parser, used to parse the calibration |
1581 | + * file for the cyberglove. |
1582 | + * A Calibration file must have this format: |
1583 | + * <Cyberglove_calibration> |
1584 | + * <Joint name="G_ThumbRotate"> |
1585 | + * <calib raw_value="0.0" calibrated_value="-60"/> |
1586 | + * <calib raw_value="0.42" calibrated_value="100"/> |
1587 | + * </Joint> |
1588 | + * </Cyberglove_calibration> |
1589 | + * |
1590 | + * The calibration will be used by the glove node to stream coherent |
1591 | + * angles (and not an uncalibrated sensor value between 0 and 1). |
1592 | + * |
1593 | + * |
1594 | + */ |
1595 | + |
1596 | + |
1597 | +#ifndef XML_CALIBRATION_PARSER_H_ |
1598 | +# define XML_CALIBRATION_PARSER_H_ |
1599 | + |
1600 | +//xml parser library |
1601 | +#include <tinyxml/tinyxml.h> |
1602 | + |
1603 | +//generic C/C++ include |
1604 | +#include <string> |
1605 | +#include <vector> |
1606 | +#include <map> |
1607 | + |
1608 | +namespace xml_calibration_parser{ |
1609 | + |
1610 | +class XmlCalibrationParser |
1611 | +{ |
1612 | + public: |
1613 | + XmlCalibrationParser(){}; |
1614 | + XmlCalibrationParser(std::string path_to_calibration); |
1615 | + ~XmlCalibrationParser(){}; |
1616 | + |
1617 | + float get_calibration_value(float position, std::string joint_name); |
1618 | + |
1619 | + struct Calibration |
1620 | + { |
1621 | + float raw_value; |
1622 | + float calibrated_value; |
1623 | + }; |
1624 | + |
1625 | + struct JointCalibration |
1626 | + { |
1627 | + std::string name; |
1628 | + std::vector<Calibration> calibrations; |
1629 | + }; |
1630 | + |
1631 | + |
1632 | + std::vector<JointCalibration> getJointsCalibrations(); |
1633 | + |
1634 | + protected: |
1635 | + void parse_calibration_file( TiXmlNode* pParent ); |
1636 | + std::vector<Calibration> parse_joint_attributes( TiXmlNode* pParent ); |
1637 | + |
1638 | + /// The vector containing the calibration |
1639 | + std::vector<JointCalibration> jointsCalibrations; |
1640 | + // use a map to easily access the value |
1641 | + typedef std::map<std::string, std::vector<float> > mapType; |
1642 | + mapType joints_calibrations_map; |
1643 | + |
1644 | + int build_calibration_table(); |
1645 | + |
1646 | + std::vector<float> calibration_to_lookup_table(std::vector<Calibration> calib); |
1647 | + |
1648 | + float compute_lookup_value(int index, std::vector<Calibration> calib); |
1649 | + |
1650 | + float linear_interpolate( float x , |
1651 | + float x0, float y0, |
1652 | + float x1, float y1 ); |
1653 | + |
1654 | + // consts for the lookup tables |
1655 | + static const float lookup_precision; |
1656 | + static const float lookup_offset; |
1657 | + |
1658 | + /** |
1659 | + * rounds the given number |
1660 | + * |
1661 | + * @param number a float |
1662 | + * |
1663 | + * @return the float rounded to the closest int |
1664 | + */ |
1665 | + int round(float number); |
1666 | + |
1667 | + /** |
1668 | + * inline function to convert a raw position to a valid index for |
1669 | + * our lookup table |
1670 | + * |
1671 | + * @param raw_position the raw position (directly read from the glove) |
1672 | + * |
1673 | + * @return the calibrated value |
1674 | + */ |
1675 | + int return_index_from_raw_position(float raw_position); |
1676 | + |
1677 | + /** |
1678 | + * inline function to convert an index of our lookup table to a raw |
1679 | + * position. |
1680 | + * |
1681 | + * @param lookup_index the index in the lookup table |
1682 | + * |
1683 | + * @return the corresponding raw position |
1684 | + */ |
1685 | + static inline float return_raw_position_from_index(int lookup_index) |
1686 | + { |
1687 | + return ((float)lookup_index)/lookup_precision; |
1688 | + }; |
1689 | + |
1690 | +}; // end class XmlCalibrationParser |
1691 | + |
1692 | +} // end namespace |
1693 | +#endif /* !XML_CALIBRATION_PARSER_H_ */ |
1694 | |
1695 | === added file 'shadow_robot/cyberglove/mainpage.dox' |
1696 | --- shadow_robot/cyberglove/mainpage.dox 1970-01-01 00:00:00 +0000 |
1697 | +++ shadow_robot/cyberglove/mainpage.dox 2010-11-03 16:17:45 +0000 |
1698 | @@ -0,0 +1,32 @@ |
1699 | +/** |
1700 | +\mainpage |
1701 | +\htmlinclude manifest.html |
1702 | + |
1703 | +\b cyberglove is a generic ROS interface to Immersion's Cyberglove dataglove. |
1704 | +It reads the data from the Cyberglove, calibrate them using a calibration file and stream them to 2 different |
1705 | +/joint_states topics: one for the raw data the other one for the calibrated data. There's a utility in sr_control_gui |
1706 | +which can be used to generate a calibration file for a specific user in a few steps. |
1707 | + |
1708 | +If the button on the wrist is off, the glove won't publish any data. |
1709 | + |
1710 | +The calibration file can't be dynamically loaded for the time being, so if you \b change \b the \b calibration then |
1711 | +don't forget to \b restart \b the \b cyberglove \b node. |
1712 | + |
1713 | +\section howtouse How To Use |
1714 | +To run the cyberglove node, just run: |
1715 | +\verbatim roslaunch cyberglove cyberglove.launch \endverbatim |
1716 | + |
1717 | +You can specify some parameters in the launch file: |
1718 | +\li cyberglove_prefix The prefix to put in front of the joint_states published by the glove. |
1719 | +\li publish_frequency The frequency at which you want to publish the data. |
1720 | +\li path_to_glove The path to the port on which the Cyberglove is connected (usually /dev/ttyS0) |
1721 | +\li path_to_calibration The path to the calibration file for the Cyberglove |
1722 | + |
1723 | + |
1724 | +\section codeapi Code API |
1725 | +\li serial_glove.h The C interface to interact with the cyberglove |
1726 | +\li xml_calibration_parser::XmlCalibrationParser The calibration file parser. |
1727 | +\li cyberglove_service::CybergloveService A service which can stop / start the Cyberglove publisher. |
1728 | +\li cyberglove_publisher::CyberglovePublisher The actual publisher streaming the data from the cyberglove. |
1729 | + |
1730 | +*/ |
1731 | |
1732 | === added file 'shadow_robot/cyberglove/manifest.xml' |
1733 | --- shadow_robot/cyberglove/manifest.xml 1970-01-01 00:00:00 +0000 |
1734 | +++ shadow_robot/cyberglove/manifest.xml 2010-11-03 16:17:45 +0000 |
1735 | @@ -0,0 +1,29 @@ |
1736 | +<package> |
1737 | + <description brief="Cyberglove ROS interface"> |
1738 | + |
1739 | + This is a generic ROS interface to the Cyberglove from Immersion. It reads data from the Cyberglove, calibrate them |
1740 | + and streams them to two different /joint_states topic: calibrated and raw data. |
1741 | + |
1742 | + </description> |
1743 | + <author>Ugo Cupcic</author> |
1744 | + <license>GPL</license> |
1745 | + <review status="unreviewed" notes=""/> |
1746 | + <url>http://ros.org/wiki/cyberglove</url> |
1747 | + <depend package="roslib"/> |
1748 | + <depend package="rospy"/> |
1749 | + <depend package="roscpp"/> |
1750 | + <depend package="std_msgs"/> |
1751 | + <depend package="sensor_msgs"/> |
1752 | + <depend package="diagnostic_msgs"/> |
1753 | + <depend package="tinyxml"/> |
1754 | + |
1755 | + |
1756 | + <export> |
1757 | + <cpp cflags="-I${prefix}/include/"/> |
1758 | + <python path="${prefix}/python_lib"/> |
1759 | + <python path="${prefix}/src"/> |
1760 | + </export> |
1761 | + |
1762 | +</package> |
1763 | + |
1764 | + |
1765 | |
1766 | === added directory 'shadow_robot/cyberglove/model' |
1767 | === added file 'shadow_robot/cyberglove/model/cyberglove.xml' |
1768 | --- shadow_robot/cyberglove/model/cyberglove.xml 1970-01-01 00:00:00 +0000 |
1769 | +++ shadow_robot/cyberglove/model/cyberglove.xml 2010-11-03 16:17:45 +0000 |
1770 | @@ -0,0 +1,129 @@ |
1771 | +<robot name="cyberglove"> |
1772 | + <link name="cyberglove_forearm"> |
1773 | + <inertial> |
1774 | + <mass value="3.0" /> |
1775 | + <origin xyz="0 0 0.090" /> |
1776 | + <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="100.0" iyz="0.0" izz="1.0" /> |
1777 | + </inertial> |
1778 | + <visual> |
1779 | + <origin xyz="0 0 0" rpy="0 0 0" /> |
1780 | + <geometry name="cyberglove_forearm_geom"> |
1781 | + <cylinder radius="0.06" length="0.180"/> |
1782 | + </geometry> |
1783 | + </visual> |
1784 | + <collision> |
1785 | + <origin xyz="0 0 0" rpy="0 0 0" /> |
1786 | + <geometry name="cyberglove_forearm_collision"> |
1787 | + <cylinder radius="0.06" length="0.180"/> |
1788 | + </geometry> |
1789 | + <origin xyz="1 0 0" rpy="0 0 0 " /> |
1790 | + <geometry name="cyberglove_forearm_collision_geom"> |
1791 | + <box size="0.05 0.05 0.10" /> |
1792 | + </geometry> |
1793 | + </collision> |
1794 | + </link> |
1795 | + |
1796 | + <!-- FIRST FINGER--> |
1797 | + |
1798 | + <link name="ffproximal"> |
1799 | + <inertial> |
1800 | + <mass value="0.008" /> |
1801 | + <origin xyz="0 0.010 0.233" /> |
1802 | + <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="100.0" iyz="0.0" |
1803 | + izz="1.0" /> |
1804 | + </inertial> |
1805 | + <visual> |
1806 | + <origin xyz="0 0 0.0225" rpy="0 0 0" /> |
1807 | + <geometry name="ffproximal_geom"> |
1808 | + <cylinder radius="0.005" length="0.045"/> |
1809 | + </geometry> |
1810 | + </visual> |
1811 | + <collision> |
1812 | + <origin xyz="0 0 0" rpy="0 0 0 " /> |
1813 | + <geometry name="ffproximal_collision_geom"> |
1814 | + <box size="0.05 0.05 0.10" /> |
1815 | + </geometry> |
1816 | + </collision> |
1817 | + </link> |
1818 | + |
1819 | + <link name="ffmiddle"> |
1820 | + <inertial> |
1821 | + <origin xyz="0 0 0.045" rpy="0 0 0" /> |
1822 | + <mass value="0.008" /> |
1823 | + <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="100.0" iyz="0.0" |
1824 | + izz="1.0" /> |
1825 | + </inertial> |
1826 | + <visual> |
1827 | + <origin xyz="0 0 0.0125" rpy="0 0 0" /> |
1828 | + <geometry name="ffmiddle_geom"> |
1829 | + <cylinder radius="0.005" length="0.025"/> |
1830 | + </geometry> |
1831 | + </visual> |
1832 | + <collision> |
1833 | + <origin xyz="0 0 0" rpy="0 0 0" /> |
1834 | + <geometry name="ffmiddle_collision_geom"> |
1835 | + <box size="0.05 0.05 0.10" /> |
1836 | + </geometry> |
1837 | + </collision> |
1838 | + </link> |
1839 | + |
1840 | + <link name="ffdistal"> |
1841 | + <inertial> |
1842 | + <mass value="0.008" /> |
1843 | + <origin xyz="0 0 0.025" /> |
1844 | + <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="100.0" iyz="0.0" |
1845 | + izz="1.0" /> |
1846 | + </inertial> |
1847 | + <visual> |
1848 | + <origin xyz="0 0 0.013" rpy="0 0 0" /> |
1849 | + <geometry name="ffdistal_geom"> |
1850 | + <cylinder radius="0.005" length="0.026"/> |
1851 | + </geometry> |
1852 | + </visual> |
1853 | + <collision> |
1854 | + <origin xyz="0 0 0" rpy="0 0 0 " /> |
1855 | + <geometry name="ffdistal_collision_geom"> |
1856 | + <box size="0.05 0.05 0.10" /> |
1857 | + </geometry> |
1858 | + </collision> |
1859 | + </link> |
1860 | + |
1861 | + <!-------------------------------- |
1862 | +| JOINTS | |
1863 | + ---------------------------------> |
1864 | +<!-- |
1865 | + <joint name="attachment" type="continuous"> |
1866 | + <parent link="world"/> |
1867 | + <child link="cyberglove_forearm"/> |
1868 | + <origin xyz="5 0 0" rpy="0 0 3.14" /> |
1869 | + <axis xyz="0 1 0" /> |
1870 | + </joint> |
1871 | + --> |
1872 | + <joint name="G_IndexPIJ" type="revolute"> |
1873 | + <parent link="cyberglove_forearm"/> |
1874 | + <child link="ffproximal"/> |
1875 | + <origin xyz="0 0.010 0.233" rpy="0 0 0" /> |
1876 | + <axis xyz="0 0 1" /> |
1877 | + <limit lower="0" upper="1.5707963267948966" |
1878 | + effort="10" velocity="1.0"/> |
1879 | + </joint> |
1880 | + |
1881 | + <joint name="G_IndexMPJ" type="revolute"> |
1882 | + <parent link="ffproximal"/> |
1883 | + <child link="ffmiddle"/> |
1884 | + <origin xyz="0 0 0.045" rpy="0 0 0" /> |
1885 | + <axis xyz="1 0 0" /> |
1886 | + <limit lower="0" upper="1.5707963267948966" effort="10" |
1887 | + velocity="1.0"/> |
1888 | + </joint> |
1889 | + |
1890 | + <joint name="G_IndexDIJ" type="revolute"> |
1891 | + <parent link="ffmiddle"/> |
1892 | + <child link="ffdistal"/> |
1893 | + <origin xyz="0 0 0.025" rpy="0 0 0" /> |
1894 | + <axis xyz="1 0 0" /> |
1895 | + <limit lower="0" upper="1.5707963267948966" effort="10" |
1896 | + velocity="1.0"/> |
1897 | + </joint> |
1898 | + |
1899 | +</robot> |
1900 | |
1901 | === added directory 'shadow_robot/cyberglove/python_lib' |
1902 | === added file 'shadow_robot/cyberglove/python_lib/cyberglove_calibrer.py' |
1903 | --- shadow_robot/cyberglove/python_lib/cyberglove_calibrer.py 1970-01-01 00:00:00 +0000 |
1904 | +++ shadow_robot/cyberglove/python_lib/cyberglove_calibrer.py 2010-11-03 16:17:45 +0000 |
1905 | @@ -0,0 +1,317 @@ |
1906 | +#!/usr/bin/env python |
1907 | +""" |
1908 | +Calibration utility for the cyberglove. |
1909 | + |
1910 | +@author: Ugo Cupcic |
1911 | +@contact: ugo@shadowrobot.com, contact@shadowrobot.com |
1912 | +""" |
1913 | +import roslib; roslib.load_manifest('sr_control_gui') |
1914 | + |
1915 | +import os |
1916 | +from cyberglove_library import Cyberglove |
1917 | +from cyberglove.srv import Calibration as CalibrationSrv |
1918 | + |
1919 | +import rospy |
1920 | + |
1921 | +class Joint: |
1922 | + """ |
1923 | + A class containing simple information regarding a joint: name, and calibrated value |
1924 | + """ |
1925 | + def __init__(self, name, min=0, max = 90): |
1926 | + """ |
1927 | + @param name: the name of the joint |
1928 | + @param min: the min value to calibrate |
1929 | + @param max: the max value to calibrate |
1930 | + """ |
1931 | + self.name = name |
1932 | + self.min = min |
1933 | + self.max = max |
1934 | + |
1935 | + |
1936 | +class CalibrationStep: |
1937 | + """ |
1938 | + A class containing all the data for a given calibration step |
1939 | + """ |
1940 | + def __init__(self, step_name="", step_description = [""], joints = []): |
1941 | + """ |
1942 | + @param step_name: A short name for this calibration step |
1943 | + @param step_description: A table containing 2 descriptions: the first one describes the min pose, the second |
1944 | + the max |
1945 | + @param joints: A table containing the joints to be calibrated |
1946 | + |
1947 | + """ |
1948 | + self.step_name = step_name |
1949 | + self.step_description = step_description |
1950 | + self.joints = joints |
1951 | + |
1952 | +class Calibration: |
1953 | + """ |
1954 | + A class Containing all the calibration data for a given joint. |
1955 | + """ |
1956 | + def __init__(self, raw_min = 0.0, raw_max= 0.0, |
1957 | + calibrated_min = 0.0, calibrated_max= 0.0, |
1958 | + is_calibrated = 0): |
1959 | + self.raw_min = raw_min |
1960 | + self.raw_max = raw_max |
1961 | + self.calibrated_min = calibrated_min |
1962 | + self.calibrated_max = calibrated_max |
1963 | + self.is_calibrated = is_calibrated |
1964 | + |
1965 | +def default_description(step_name, max = 0): |
1966 | + """ |
1967 | + The default description function for a step. Just prints a text for each step. |
1968 | + |
1969 | + @param step_name: the name of the step |
1970 | + @param max: if 0=>we're reading the min values, if 1=> max values |
1971 | + """ |
1972 | + if max == 0: |
1973 | + print "calibrating min values for: "+ str(step_name) |
1974 | + else: |
1975 | + print "calibrating max values for: "+ str(step_name) |
1976 | + |
1977 | +def do_nothing(step_name, max = 0): |
1978 | + """ |
1979 | + A function that does nothing. Used to have an empty description function. |
1980 | + """ |
1981 | + nothing = True |
1982 | + |
1983 | +class CybergloveCalibrer: |
1984 | + """ |
1985 | + A utility to calibrate the cyberglove. |
1986 | + """ |
1987 | + def __init__(self, description_function = default_description): |
1988 | + """ |
1989 | + Initialize some class variables: a table containing the calibration steps, a connection to the cyberglove |
1990 | + library and a description function for the calibration steps |
1991 | + |
1992 | + @param description_function: specify a function you want to use to describe the calibration steps ( text / |
1993 | + pictures / animation / ... ). Must take a joint name as parameter. |
1994 | + """ |
1995 | + self.calibration_steps = [] |
1996 | + |
1997 | + self.cyberglove = Cyberglove() |
1998 | + |
1999 | + # fill the table containing all the joints |
2000 | + self.joints = {} |
2001 | + for name in self.cyberglove.get_joints_names(): |
2002 | + self.joints[name] = Calibration() |
2003 | + |
2004 | + self.get_calibration_steps() |
2005 | + |
2006 | + if description_function == None: |
2007 | + description_function = do_nothing |
2008 | + self.description_function = description_function |
2009 | + |
2010 | + def get_calibration_steps(self): |
2011 | + """ |
2012 | + Read the calibration steps from the xml file. |
2013 | + |
2014 | + @return: 0 when the values were read. |
2015 | + """ |
2016 | + |
2017 | + #first step: calibrate 0s, 3s and TH4 |
2018 | + joints1 = [Joint("G_IndexMPJ", 0, 90), Joint("G_IndexPIJ", 0, 90), Joint("G_IndexDIJ", 0, 90), |
2019 | + Joint("G_MiddleMPJ", 0, 90), Joint("G_MiddlePIJ", 0, 90), Joint("G_MiddleDIJ", 0, 90), |
2020 | + Joint("G_RingMPJ", 0, 90), Joint("G_RingPIJ", 0, 90), Joint("G_RingDIJ", 0, 90), |
2021 | + Joint("G_PinkieMPJ", 0, 90), Joint("G_PinkiePIJ", 0, 90), Joint("G_PinkieDIJ", 0, 90), |
2022 | + Joint("G_ThumbAb", 50, 0) ] |
2023 | + self.calibration_steps.append(CalibrationStep(step_name="Joints 0s, 3s and thumb abduction (THJ4)", |
2024 | + step_description = ["Hand flat on a table, fingers joined, thumb opened", |
2025 | + "Hand forming a fist, thumb closed"], |
2026 | + joints = joints1 )) |
2027 | + |
2028 | + #second step: calibrate 4s, TH1, TH2, TH5 and WR2 |
2029 | + joints2 = [Joint("G_ThumbIJ", 90, 0), Joint("G_ThumbMPJ", 30, -30), |
2030 | + Joint("G_MiddleIndexAb", 0, 50), Joint("G_RingMiddleAb", 0, 50), Joint("G_PinkieRingAb", 0, 50), |
2031 | + Joint("G_WristYaw", 10, -30)] |
2032 | + self.calibration_steps.append(CalibrationStep(step_name="Joints 4s + TH1, 2, and WR2", |
2033 | + step_description = ["Hand flat fingers joined, thumb completely curled under the palm, wrist 2 bent to the left", |
2034 | + "Hand flat fingers apart, thumb completely opened, wrist bent 2 to the right"], |
2035 | + joints = joints2 )) |
2036 | + |
2037 | + #third step: calibrate TH5 |
2038 | + joints3 = [Joint("G_ThumbRotate", 60, -60)] |
2039 | + self.calibration_steps.append(CalibrationStep(step_name="Joint TH5", |
2040 | + step_description = ["thumb completely under the palm", |
2041 | + "thumb completely opened, curled over the palm"], |
2042 | + joints = joints3 )) |
2043 | + |
2044 | + #fourth step: calibrate LF5 and WR1 |
2045 | + joints4 = [Joint("G_PalmArch", 0, 40), Joint("G_WristPitch", -30, 40)] |
2046 | + self.calibration_steps.append(CalibrationStep(step_name="LF5 and WR1", |
2047 | + step_description = ["Hand flat, wrist 1 bent backward", |
2048 | + "Palm curled (LFJ5), wrist 1 bent forward"], |
2049 | + joints = joints4 )) |
2050 | + |
2051 | + return 0 |
2052 | + |
2053 | + def do_step_min(self, index): |
2054 | + """ |
2055 | + Run the given step of the calibration, gets the min values. |
2056 | + |
2057 | + @param index: the index of the step in the calibration file |
2058 | + @return: 0 when the values were read. |
2059 | + """ |
2060 | + joints = self.calibration_steps[index].joints |
2061 | + # display the description |
2062 | + self.description_function(self.calibration_steps[index].step_description[0], 0) |
2063 | + |
2064 | + for joint in joints: |
2065 | + name = joint.name |
2066 | + #read the min values |
2067 | + self.joints[name].raw_min = self.cyberglove.read_raw_average_value(name) |
2068 | + self.joints[name].calibrated_min = joint.min |
2069 | + #still needs to read the max before fully calibrated |
2070 | + self.joints[name].is_calibrated += 0.5 |
2071 | + return 0 |
2072 | + |
2073 | + def do_step_max(self, index): |
2074 | + """ |
2075 | + Run the given step of the calibration, gets the max values. |
2076 | + As this method is called after the do_step_min() method, we don't display the description |
2077 | + |
2078 | + @param index: the index of the step in the calibration file |
2079 | + @return: 0 when the values were read. |
2080 | + """ |
2081 | + joints = self.calibration_steps[index].joints |
2082 | + # display the description |
2083 | + self.description_function(self.calibration_steps[index].step_description[1], 0) |
2084 | + |
2085 | + for joint in joints: |
2086 | + name = joint.name |
2087 | + #read the max values |
2088 | + self.joints[name].raw_max = self.cyberglove.read_raw_average_value(name) |
2089 | + self.joints[name].calibrated_max = joint.max |
2090 | + #still needs to read the max before fully calibrated |
2091 | + self.joints[name].is_calibrated += 0.5 |
2092 | + return 0 |
2093 | + |
2094 | + def is_step_done(self, joint_name): |
2095 | + """ |
2096 | + Check if the joint is calibrated. |
2097 | + |
2098 | + @param joint_name: the name of the joint |
2099 | + @return: 1 if the joint has already been calibrated. |
2100 | + """ |
2101 | + |
2102 | + return self.joints[joint_name].is_calibrated |
2103 | + |
2104 | + def all_steps_done(self): |
2105 | + """ |
2106 | + Check if all the steps were processed. |
2107 | + |
2108 | + @return: True if all the steps were processed. |
2109 | + """ |
2110 | + for calib in self.joints.values(): |
2111 | + if calib.is_calibrated != 1: |
2112 | + return False |
2113 | + |
2114 | + return True |
2115 | + |
2116 | + def reorder_calibration(self): |
2117 | + """ |
2118 | + Reorder the calibration: set the raw_min to the min raw_value |
2119 | + """ |
2120 | + for name in self.joints.keys(): |
2121 | + if self.joints[name].raw_min > self.joints[name].raw_max: |
2122 | + tmp_raw = self.joints[name].raw_min |
2123 | + tmp_cal = self.joints[name].calibrated_min |
2124 | + self.joints[name].raw_min = self.joints[name].raw_max |
2125 | + self.joints[name].calibrated_min = self.joints[name].calibrated_max |
2126 | + self.joints[name].raw_max = tmp_raw |
2127 | + self.joints[name].calibrated_max = tmp_cal |
2128 | + |
2129 | + def write_calibration_file(self, filepath): |
2130 | + """ |
2131 | + Checks if all the steps were processed by calling self.all_steps_done() |
2132 | + Reorder the calibration |
2133 | + Then writes the whole calibration to a given file. |
2134 | + |
2135 | + @param filepath: Where to write the calibration |
2136 | + @return: 0 if the file has been written, |
2137 | + -1 if the calibration is not finished yet, |
2138 | + -2 if other error |
2139 | + """ |
2140 | + |
2141 | + #Where all the steps processed? |
2142 | + if not self.all_steps_done(): |
2143 | + return -1 |
2144 | + |
2145 | + #reorder the calibration |
2146 | + self.reorder_calibration() |
2147 | + |
2148 | + ############### |
2149 | + # Write to an xml file |
2150 | + ############### |
2151 | + #store the text in a table |
2152 | + text = [] |
2153 | + |
2154 | + text.append("<?xml version=\"1.0\" ?>") |
2155 | + text.append("<Cyberglove_calibration>") |
2156 | + for name in self.joints: |
2157 | + #joint name |
2158 | + text.append("<Joint name=\""+name+"\">") |
2159 | + |
2160 | + cal = self.joints[name] |
2161 | + #min value |
2162 | + text.append("<calib raw_value=\""+str(cal.raw_min) |
2163 | + +"\" calibrated_value=\"" |
2164 | + +str(cal.calibrated_min)+"\"/>") |
2165 | + |
2166 | + #max value |
2167 | + text.append("<calib raw_value=\""+str(cal.raw_max) |
2168 | + +"\" calibrated_value=\"" |
2169 | + +str(cal.calibrated_max)+"\"/>") |
2170 | + |
2171 | + text.append("</Joint>") |
2172 | + |
2173 | + text.append("</Cyberglove_calibration>") |
2174 | + |
2175 | + #write the text to a file |
2176 | + try: |
2177 | + output = open(filepath, "w") |
2178 | + for line in text: |
2179 | + output.write(line+"\n") |
2180 | + |
2181 | + output.close() |
2182 | + except: |
2183 | + return -2 |
2184 | + |
2185 | + return 0 |
2186 | + |
2187 | + def load_calib(self, filename): |
2188 | + if filename == "": |
2189 | + return -1 |
2190 | + |
2191 | + rospy.wait_for_service('/cyberglove/calibration') |
2192 | + try: |
2193 | + calib = rospy.ServiceProxy('cyberglove/calibration', CalibrationSrv) |
2194 | + path = filename.encode("iso-8859-1") |
2195 | + resp = calib(path) |
2196 | + return resp.state |
2197 | + except rospy.ServiceException, e: |
2198 | + print 'Failed to call start service' |
2199 | + return -2 |
2200 | + |
2201 | + |
2202 | + |
2203 | +############## |
2204 | +# MAIN # |
2205 | +############## |
2206 | +def main(): |
2207 | + cyber_calib = CybergloveCalibrer() |
2208 | + for i in range(0, len(cyber_calib.calibration_steps)): |
2209 | + raw_input(cyber_calib.calibration_steps[i].step_description[0]) |
2210 | + cyber_calib.do_step_min(i) |
2211 | + raw_input(cyber_calib.calibration_steps[i].step_description[1]) |
2212 | + |
2213 | + cyber_calib.do_step_max(i) |
2214 | + error = cyber_calib.write_calibration_file("../../param/cyberglove.cal") |
2215 | + print error |
2216 | + |
2217 | + return 0 |
2218 | + |
2219 | + |
2220 | +# start the script |
2221 | +if __name__ == "__main__": |
2222 | + main() |
2223 | |
2224 | === added file 'shadow_robot/cyberglove/python_lib/cyberglove_library.py' |
2225 | --- shadow_robot/cyberglove/python_lib/cyberglove_library.py 1970-01-01 00:00:00 +0000 |
2226 | +++ shadow_robot/cyberglove/python_lib/cyberglove_library.py 2010-11-03 16:17:45 +0000 |
2227 | @@ -0,0 +1,152 @@ |
2228 | +import roslib; roslib.load_manifest('sr_control_gui') |
2229 | +import time |
2230 | +import os |
2231 | +import math |
2232 | +import rospy |
2233 | +import subprocess |
2234 | +import threading |
2235 | +import rosgraph.masterapi |
2236 | +from sr_hand.msg import sendupdate, joint, joints_data |
2237 | +from sensor_msgs.msg import * |
2238 | + |
2239 | +class Joint(): |
2240 | + def __init__(self, name="", motor="", min=0, max=90): |
2241 | + self.name = name |
2242 | + self.motor = motor |
2243 | + self.min = min |
2244 | + self.max = max |
2245 | + |
2246 | +class Cyberglove: |
2247 | + """ |
2248 | + Interface to the Cyberglove publisher. |
2249 | + """ |
2250 | + def __init__(self, max_values = 2): |
2251 | + self.joints = { "G_ThumbRotate": Joint(), |
2252 | + "G_ThumbMPJ": Joint(), |
2253 | + "G_ThumbIJ": Joint(), |
2254 | + "G_ThumbAb": Joint(), |
2255 | + "G_IndexMPJ": Joint(), |
2256 | + "G_IndexPIJ": Joint(), |
2257 | + "G_IndexDIJ": Joint(), |
2258 | + "G_MiddleMPJ": Joint(), |
2259 | + "G_MiddlePIJ": Joint(), |
2260 | + "G_MiddleDIJ": Joint(), |
2261 | + "G_MiddleIndexAb": Joint(), |
2262 | + "G_RingMPJ": Joint(), |
2263 | + "G_RingPIJ": Joint(), |
2264 | + "G_RingDIJ": Joint(), |
2265 | + "G_RingMiddleAb": Joint(), |
2266 | + "G_PinkieMPJ": Joint(), |
2267 | + "G_PinkiePIJ": Joint(), |
2268 | + "G_PinkieDIJ": Joint(), |
2269 | + "G_PinkieRingAb": Joint(), |
2270 | + "G_PalmArch": Joint(), |
2271 | + "G_WristPitch": Joint(), |
2272 | + "G_WristYaw": Joint() } |
2273 | + |
2274 | + self.raw_messages = [] |
2275 | + self.calibrated_messages = [] |
2276 | + self.max_values = max_values |
2277 | + self.map = {} |
2278 | + self.hasglove = 0 |
2279 | + self.isFirstMessage = True |
2280 | + self.liste = 0 |
2281 | + self.raw = rospy.Subscriber('/cyberglove/raw/joint_states',JointState,self.callback_raw) |
2282 | + self.calibrated = rospy.Subscriber('/cyberglove/calibrated/joint_states',JointState,self.callback_calibrated) |
2283 | + threading.Thread(None, rospy.spin) |
2284 | + if self.has_glove(): |
2285 | + time.sleep(1.0) |
2286 | + self.createMap() |
2287 | + else: |
2288 | + raise Exception("No glove found") |
2289 | + |
2290 | + def callback_raw(self, data): |
2291 | + """ |
2292 | + Adds the last values received to the list of raw values |
2293 | + @param data: the message which called the callback |
2294 | + """ |
2295 | + self.addValue(self.raw_messages, data) |
2296 | + |
2297 | + def callback_calibrated(self, data): |
2298 | + """ |
2299 | + Adds the last values received to the list of calibrated values |
2300 | + @param data: the message which called the callback |
2301 | + """ |
2302 | + self.addValue(self.calibrated_messages, data) |
2303 | + |
2304 | + def addValue(self, vector, value): |
2305 | + """ |
2306 | + Fills a vector with the received values, and replaces the old values |
2307 | + when the vector is full |
2308 | + @param vector : the vector to fill (raw or calibrated) |
2309 | + @param value : the value to add |
2310 | + """ |
2311 | + if len(vector) < self.max_values: |
2312 | + vector.append(value) |
2313 | + else: |
2314 | + vector.pop(0) |
2315 | + vector.append(value) |
2316 | + |
2317 | + def createMap(self): |
2318 | + """ |
2319 | + Maps the name of the joints to their index in the message |
2320 | + """ |
2321 | + for index in range(0, len(self.raw_messages[0].name)): |
2322 | + self.map[self.raw_messages[0].name[index]] = index |
2323 | + |
2324 | + def read_raw_average_value(self, joint_name): |
2325 | + """ |
2326 | + return the raw value of a given joint |
2327 | + |
2328 | + @param joint_name: the name of the glove of the Cyberglove |
2329 | + """ |
2330 | + raw_value = 0 |
2331 | + joint_index = self.map[joint_name] |
2332 | + for index in range(0, len(self.raw_messages)): |
2333 | + raw_value = raw_value + self.raw_messages[index].position[joint_index] |
2334 | + |
2335 | + raw_value = raw_value / len(self.raw_messages) |
2336 | + |
2337 | + return raw_value |
2338 | + |
2339 | + def read_calibrated_average_value(self, joint_name): |
2340 | + """ |
2341 | + return the current positions for the given joint_name |
2342 | + |
2343 | + @param joint_name: the name of the joint |
2344 | + @return: the corresponding position |
2345 | + """ |
2346 | + |
2347 | + calibrated_value = 0 |
2348 | + |
2349 | + joint_index = self.map[joint_name] |
2350 | + for index in range(0, len(self.calibrated_messages)): |
2351 | + calibrated_value = calibrated_value + self.calibrated_messages[index].position[joint_index] |
2352 | + |
2353 | + calibrated_value = calibrated_value / len(self.calibrated_messages) |
2354 | + |
2355 | + return calibrated_value |
2356 | + |
2357 | + def get_joints_names(self): |
2358 | + """ |
2359 | + Return an array containing the Cyberglove joints names |
2360 | + |
2361 | + @return: the joints names array |
2362 | + """ |
2363 | + return self.joints.keys() |
2364 | + |
2365 | + def has_glove(self): |
2366 | + """ |
2367 | + @return: True if a cyberglove is detected by ROS |
2368 | + """ |
2369 | + if not self.hasglove == 0: |
2370 | + return self.hasglove |
2371 | + self.hasglove = False |
2372 | + if self.liste == 0: |
2373 | + master = rosgraph.masterapi.Master('/rostopic') |
2374 | + self.liste = master.getPublishedTopics('/') |
2375 | + for topic_typ in self.liste : |
2376 | + for topic in topic_typ: |
2377 | + if '/cyberglove' in topic : |
2378 | + self.hasglove = True |
2379 | + return self.hasglove |
2380 | |
2381 | === added file 'shadow_robot/cyberglove/python_lib/cyberglove_mapper.py' |
2382 | --- shadow_robot/cyberglove/python_lib/cyberglove_mapper.py 1970-01-01 00:00:00 +0000 |
2383 | +++ shadow_robot/cyberglove/python_lib/cyberglove_mapper.py 2010-11-03 16:17:45 +0000 |
2384 | @@ -0,0 +1,355 @@ |
2385 | +#!/usr/bin/env python |
2386 | +""" |
2387 | +Minimizes the mapping matrix using a simplex algorithm |
2388 | + |
2389 | +@author: Ugo Cupcic |
2390 | +@contact: ugo@shadowrobot.com, contact@shadowrobot.com |
2391 | +""" |
2392 | + |
2393 | +import roslib; roslib.load_manifest('sr_control_gui') |
2394 | +import rospy |
2395 | +from scipy.optimize import fmin |
2396 | +from cyberglove_library import Cyberglove |
2397 | + |
2398 | +class MappingConfiguration: |
2399 | + def __init__(self, glove_data = [], hand_data = [], description = ""): |
2400 | + self.glove_data = glove_data |
2401 | + self.hand_data = hand_data |
2402 | + self.description = description |
2403 | + |
2404 | + def copy(self): |
2405 | + tmp = MappingConfiguration(self.glove_data, self.hand_data, self.description) |
2406 | + return tmp |
2407 | + |
2408 | +class MappingMinimizer: |
2409 | + def __init__(self, verbose = 1): |
2410 | + rospy.init_node("cyberglove_mapper_minimizer") |
2411 | + #connect to the cyberglove |
2412 | + self.cyberglove = Cyberglove() |
2413 | + |
2414 | + self.verbose = verbose |
2415 | + |
2416 | + glove_sensors = ["G_ThumbRotate", "G_ThumbMPJ", "G_ThumbIJ", "G_ThumbAb", "G_IndexMPJ", "G_IndexPIJ", |
2417 | + "G_IndexDIJ", "G_MiddleMPJ", "G_MiddlePIJ", "G_MiddleDIJ", "G_MiddleIndexAb", "G_RingMPJ", |
2418 | + "G_RingPIJ", "G_RingDIJ", "G_RingMiddleAb", "G_PinkieMPJ", "G_PinkiePIJ", "G_PinkieDIJ", |
2419 | + "G_PinkieRingAb", "G_PalmArch", "G_WristPitch", "G_WristYaw"] |
2420 | + |
2421 | + index = 0 |
2422 | + self.glove_name_index_map = {} |
2423 | + for sensor in glove_sensors: |
2424 | + self.glove_name_index_map[sensor] = index |
2425 | + index += 1 |
2426 | + |
2427 | + # fill the table containing all the joints |
2428 | + hand_joints = ["TH1","TH2","TH3","TH4","TH5","FF0","FF3","FF4","MF0","MF3","MF4","RF0","RF3","RF4","LF0", |
2429 | + "LF3","LF4","LF5","WR1","WR2"] |
2430 | + |
2431 | + index = 0 |
2432 | + self.hand_name_index_map = {} |
2433 | + for sensor in hand_joints: |
2434 | + self.hand_name_index_map[sensor] = index |
2435 | + index += 1 |
2436 | + |
2437 | + self.thumb_glove = { "G_ThumbRotate": 0, |
2438 | + "G_ThumbMPJ": 1, |
2439 | + "G_ThumbAb": 2 } |
2440 | + |
2441 | + self.thumb_hand = { "TH2": 0, |
2442 | + "TH4": 1, |
2443 | + "TH5": 2 } |
2444 | + |
2445 | + self.configurations = [] |
2446 | + self.initialise_configurations() |
2447 | + |
2448 | + self.simplex_iteration_index = 0 |
2449 | + |
2450 | + if(self.verbose == 1): |
2451 | + for conf in self.configurations: |
2452 | + print "-------" |
2453 | + print conf.description |
2454 | + print conf.glove_data |
2455 | + print conf.hand_data |
2456 | + print "-------" |
2457 | + print "" |
2458 | + |
2459 | + self.minerror = 1000000 |
2460 | + self.maxerror = 0 |
2461 | + |
2462 | + def initialise_configurations(self): |
2463 | + configuration = MappingConfiguration() |
2464 | + |
2465 | + ### |
2466 | + # First configuration |
2467 | + configuration.description = "All fingers and thumb are curved maximum in a punch form ... " |
2468 | + configuration.glove_data = [] |
2469 | + #corresponding data for the hand |
2470 | + configuration.hand_data = [[30.0, 52.0, 5.0], |
2471 | + [30.0, 43.0, 0.0], |
2472 | + [30.0, 68.0, 16.0] |
2473 | + ] |
2474 | + |
2475 | + self.configurations.append(configuration.copy()) |
2476 | + |
2477 | + ### |
2478 | + # Second configuration |
2479 | + configuration.description = "Thumb touching first finger tip ... " |
2480 | + configuration.glove_data = [] |
2481 | + #corresponding data for the hand |
2482 | + configuration.hand_data = [[30.0, 54.0, -5.0], |
2483 | + [19.0, 58.0, 28.0]] |
2484 | + |
2485 | + self.configurations.append(configuration.copy()) |
2486 | + |
2487 | + ### |
2488 | + # Third configuration |
2489 | + configuration.description = "Thumb touching middle finger tip ... " |
2490 | + configuration.glove_data = [] |
2491 | + #corresponding data for the hand |
2492 | + configuration.hand_data = [[30.0, 64.0, 9.0], |
2493 | + [1.0, 68.0, 29.0]] |
2494 | + |
2495 | + self.configurations.append(configuration.copy()) |
2496 | + |
2497 | + ### |
2498 | + # Fourth configuration |
2499 | + configuration.description = "Thumb touching ring finger tip ... " |
2500 | + configuration.glove_data = [] |
2501 | + #corresponding data for the hand |
2502 | + configuration.hand_data = [[30.0, 75.0, 19.0], |
2503 | + [1.0, 75.0, 42.0]] |
2504 | + |
2505 | + self.configurations.append(configuration.copy()) |
2506 | + |
2507 | + ### |
2508 | + # Fifth configuration |
2509 | + configuration.description = "Thumb touching little finger tip ... " |
2510 | + configuration.glove_data = [] |
2511 | + #corresponding data for the hand |
2512 | + configuration.hand_data = [[30.0, 75.0, 3.0], |
2513 | + [1.0, 75.0, 35.0]] |
2514 | + |
2515 | + self.configurations.append(configuration.copy()) |
2516 | + |
2517 | + ### |
2518 | + # Sixth configuration |
2519 | + configuration.description = "Thumb touching all the finger tips ... " |
2520 | + configuration.glove_data = [] |
2521 | + #corresponding data for the hand |
2522 | + configuration.hand_data = [[-30.0, 75.0, 60.0], |
2523 | + [-7.0, 63.0, 60.0]] |
2524 | + |
2525 | + self.configurations.append(configuration.copy()) |
2526 | + |
2527 | + ### |
2528 | + # Seventh configuration |
2529 | + configuration.description = "hand flat, thumb relaxed along the fingers " |
2530 | + configuration.glove_data = [] |
2531 | + #corresponding data for the hand |
2532 | + configuration.hand_data = [[0.0, 0.0, -60.0]] |
2533 | + |
2534 | + self.configurations.append(configuration.copy()) |
2535 | + |
2536 | + ### |
2537 | + # Eigth configuration |
2538 | + configuration.description = "hand flat, thumb opened " |
2539 | + configuration.glove_data = [] |
2540 | + #corresponding data for the hand |
2541 | + configuration.hand_data = [[0.0, 75.0, -60.0]] |
2542 | + |
2543 | + self.configurations.append(configuration.copy()) |
2544 | + |
2545 | + def evaluation_function(self, matrix): |
2546 | + """ |
2547 | + The error is computed by adding the square error for each configuration. |
2548 | + """ |
2549 | + error = 0 |
2550 | + |
2551 | + #rebuild the matrix as a matrix, not a vector (the implementation of the simplex in scipy works on vectors |
2552 | + matrix_tmp = [] |
2553 | + for i in range(len(self.thumb_glove)): |
2554 | + line = [] |
2555 | + for j in range(len(self.thumb_hand)): |
2556 | + line.append(matrix[i*len(self.thumb_hand)+j]) |
2557 | + matrix_tmp.append(line) |
2558 | + |
2559 | + matrix = matrix_tmp |
2560 | + computed_vector_hand = [] |
2561 | + |
2562 | + for config in self.configurations: |
2563 | + #get the hand vectors from the glove data |
2564 | + for vec_glove in config.glove_data: |
2565 | + computed_vector_hand.append(self.multiply(vec_glove, matrix)) |
2566 | + |
2567 | + #compute the square error |
2568 | + for vec_comp, vec_hand in zip(computed_vector_hand, config.hand_data): |
2569 | + for computed_hand_data in vec_comp: |
2570 | + for hand_data in vec_hand: |
2571 | + error += (computed_hand_data-hand_data)*(computed_hand_data-hand_data) |
2572 | + |
2573 | + if self.verbose == 1: |
2574 | + print "error: "+str(error) |
2575 | + |
2576 | + if error < self.minerror: |
2577 | + self.minerror = error |
2578 | + |
2579 | + if error > self.maxerror: |
2580 | + self.maxerror = error |
2581 | + |
2582 | + return error |
2583 | + |
2584 | + def multiply(self, vector_glove, matrix): |
2585 | + """ |
2586 | + multiply the vector by the matrix. Returns a vector. |
2587 | + """ |
2588 | + vector_hand = [] |
2589 | + index_col = 0 |
2590 | + print vector_glove |
2591 | + print matrix |
2592 | + for glove_data in vector_glove: |
2593 | + data = 0 |
2594 | + for line in matrix: |
2595 | + data += (glove_data*line[index_col]) |
2596 | + vector_hand.append(data) |
2597 | + index_col += 1 |
2598 | + |
2599 | + return vector_hand |
2600 | + |
2601 | + def callback(self, xk): |
2602 | + """ |
2603 | + Function called at each iteration |
2604 | + """ |
2605 | + self.simplex_iteration_index += 1 |
2606 | + if self.simplex_iteration_index % 50 == 0: |
2607 | + print "-------------------------" |
2608 | + print "iteration number: "+ str(self.simplex_iteration_index) |
2609 | + #print xk |
2610 | + |
2611 | + def minimize(self): |
2612 | + start = [] |
2613 | + for i in range(0, len(self.thumb_hand)): |
2614 | + line = [] |
2615 | + for j in range(0, len(self.thumb_glove)): |
2616 | + line.append(0.1) |
2617 | + start.append(line) |
2618 | + |
2619 | + |
2620 | + xopt = fmin(self.evaluation_function, start, callback=self.callback, maxiter = 5000) |
2621 | + |
2622 | + #rebuild the result as a matrix, not a vector (the implementation of the simplex in scipy works on vectors |
2623 | + output = [] |
2624 | + for i in range(len(self.thumb_glove)): |
2625 | + line = [] |
2626 | + for j in range(len(self.thumb_hand)): |
2627 | + line.append(xopt[i*len(self.thumb_hand)+j]) |
2628 | + output.append(line) |
2629 | + |
2630 | + print "min error: "+ str(self.minerror) |
2631 | + print "max error: "+ str(self.maxerror) |
2632 | + |
2633 | + return output |
2634 | + |
2635 | + def write_full_mapping(self, output_path = "../../../param/GloveToHandMappings"): |
2636 | + """ |
2637 | + Writes the mapping matrix to a file: |
2638 | + the glove values are the lines, the hand values are the columns |
2639 | + """ |
2640 | + |
2641 | + #initialise the matrix with 0s |
2642 | + mapping_matrix = [] |
2643 | + for i in range(0, len(self.glove_name_index_map)): |
2644 | + line = [] |
2645 | + for j in range(0, len(self.hand_name_index_map)): |
2646 | + line.append(0.0) |
2647 | + mapping_matrix.append(line) |
2648 | + |
2649 | + # TH3 is always 0, RF4 as well |
2650 | + #fill the matrix with the known values + th1 (all except the thumb) |
2651 | + mapping_matrix[self.glove_name_index_map["G_IndexDIJ"]][self.hand_name_index_map["FF0"]] = 1.0 |
2652 | + mapping_matrix[self.glove_name_index_map["G_IndexPIJ"]][self.hand_name_index_map["FF0"]] = 1.0 |
2653 | + mapping_matrix[self.glove_name_index_map["G_IndexMPJ"]][self.hand_name_index_map["FF3"]] = 1.0 |
2654 | + mapping_matrix[self.glove_name_index_map["G_MiddleIndexAb"]][self.hand_name_index_map["FF4"]] = -1.0 |
2655 | + |
2656 | + mapping_matrix[self.glove_name_index_map["G_MiddleDIJ"]][self.hand_name_index_map["MF0"]] = 1.0 |
2657 | + mapping_matrix[self.glove_name_index_map["G_MiddlePIJ"]][self.hand_name_index_map["MF0"]] = 1.0 |
2658 | + mapping_matrix[self.glove_name_index_map["G_MiddleMPJ"]][self.hand_name_index_map["MF3"]] = 1.0 |
2659 | + mapping_matrix[self.glove_name_index_map["G_RingMiddleAb"]][self.hand_name_index_map["MF4"]] = -1.0 |
2660 | + |
2661 | + mapping_matrix[self.glove_name_index_map["G_RingDIJ"]][self.hand_name_index_map["RF0"]] = 1.0 |
2662 | + mapping_matrix[self.glove_name_index_map["G_RingPIJ"]][self.hand_name_index_map["RF0"]] = 1.0 |
2663 | + mapping_matrix[self.glove_name_index_map["G_RingMPJ"]][self.hand_name_index_map["RF3"]] = 1.0 |
2664 | + |
2665 | + mapping_matrix[self.glove_name_index_map["G_PinkieDIJ"]][self.hand_name_index_map["LF0"]] = 1.0 |
2666 | + mapping_matrix[self.glove_name_index_map["G_PinkiePIJ"]][self.hand_name_index_map["LF0"]] = 1.0 |
2667 | + mapping_matrix[self.glove_name_index_map["G_PinkieMPJ"]][self.hand_name_index_map["LF3"]] = 1.0 |
2668 | + mapping_matrix[self.glove_name_index_map["G_PinkieRingAb"]][self.hand_name_index_map["LF4"]] = -1.0 |
2669 | + mapping_matrix[self.glove_name_index_map["G_PalmArch"]][self.hand_name_index_map["LF5"]] = 1.0 |
2670 | + |
2671 | + mapping_matrix[self.glove_name_index_map["G_WristPitch"]][self.hand_name_index_map["WR1"]] = 1.0 |
2672 | + mapping_matrix[self.glove_name_index_map["G_WristYaw"]][self.hand_name_index_map["WR2"]] = 1.0 |
2673 | + |
2674 | + mapping_matrix[self.glove_name_index_map["G_ThumbIJ"]][self.hand_name_index_map["TH1"]] = 1.0 |
2675 | + |
2676 | + #mapping_matrix[self.glove_name_index_map["G_ThumbAb"]][self.hand_name_index_map["TH4"]] = 1.0 |
2677 | + #mapping_matrix[self.glove_name_index_map["G_ThumbRotate"]][self.hand_name_index_map["TH5"]] = 1.0 |
2678 | + #mapping_matrix[self.glove_name_index_map["G_ThumbMPJ"]][self.hand_name_index_map["TH2"]] = 1.0 |
2679 | + |
2680 | + |
2681 | + #compute the best mapping for the thumb except th1 |
2682 | + thumb_mapping = self.minimize() |
2683 | + |
2684 | + #fill the matrix with the thumb values computed with the simplex |
2685 | + for glove_name in self.thumb_glove.keys(): |
2686 | + for hand_name in self.thumb_hand.keys(): |
2687 | + #indexes in the computed thumb mapping matrix |
2688 | + tmp_index_glove = self.thumb_glove[glove_name] |
2689 | + tmp_index_hand = self.thumb_hand[hand_name] |
2690 | + |
2691 | + #retrieve the mapping value for those sensors |
2692 | + mapping_value = thumb_mapping[tmp_index_glove][tmp_index_hand] |
2693 | + |
2694 | + #indexes for the whole mapping matrix |
2695 | + final_index_glove = self.glove_name_index_map[glove_name] |
2696 | + final_index_hand = self.hand_name_index_map[hand_name] |
2697 | + |
2698 | + #update matrix |
2699 | + mapping_matrix[final_index_glove][final_index_hand] = mapping_value |
2700 | + #write the matrix to a file |
2701 | + file = open(output_path, "w") |
2702 | + for line in mapping_matrix: |
2703 | + for col in line: |
2704 | + file.write(" "+str(col) ) |
2705 | + file.write("\n") |
2706 | + |
2707 | + file.close() |
2708 | + |
2709 | + def record(self, config): |
2710 | + for i in range(0, 2): |
2711 | + raw_input(str(i) + ": " + config.description) |
2712 | + vector_data = [0] * len(self.thumb_glove) |
2713 | + for sensor_name in self.thumb_glove.keys(): |
2714 | + data = self.cyberglove.read_calibrated_average_value(sensor_name) |
2715 | + vector_data[self.thumb_glove[sensor_name]] = data |
2716 | + config.glove_data.append(vector_data) |
2717 | + |
2718 | + if(self.verbose == 1): |
2719 | + print "read values:" |
2720 | + print config.glove_data |
2721 | + |
2722 | + |
2723 | +############## |
2724 | +# MAIN # |
2725 | +############## |
2726 | +def main(): |
2727 | + cyber_mapper = MappingMinimizer() |
2728 | + |
2729 | + for config in cyber_mapper.configurations: |
2730 | + cyber_mapper.record(config) |
2731 | + |
2732 | + cyber_mapper.write_full_mapping() |
2733 | + |
2734 | + return 0 |
2735 | + |
2736 | + |
2737 | +# start the script |
2738 | +if __name__ == "__main__": |
2739 | + main() |
2740 | \ No newline at end of file |
2741 | |
2742 | === added directory 'shadow_robot/cyberglove/src' |
2743 | === added file 'shadow_robot/cyberglove/src/cyberglove_node.cpp' |
2744 | --- shadow_robot/cyberglove/src/cyberglove_node.cpp 1970-01-01 00:00:00 +0000 |
2745 | +++ shadow_robot/cyberglove/src/cyberglove_node.cpp 2010-11-03 16:17:45 +0000 |
2746 | @@ -0,0 +1,53 @@ |
2747 | +/** |
2748 | + * @file cyberglove_node.cpp |
2749 | + * @author Ugo Cupcic <ugo@shadowrobot.com> |
2750 | + * @date Thu Apr 22 10:21:50 2010 |
2751 | + * |
2752 | + * @brief The cyberglove node publishes data collected from a |
2753 | + * Cyberglove. |
2754 | + * |
2755 | + * |
2756 | + */ |
2757 | + |
2758 | +#include <ros/ros.h> |
2759 | +#include <time.h> |
2760 | +#include "cyberglove/cyberglove_publisher.h" |
2761 | +#include "cyberglove/cyberglove_service.h" |
2762 | +#include "cyberglove/Start.h" |
2763 | +#include <boost/smart_ptr.hpp> |
2764 | +using namespace cyberglove_publisher; |
2765 | +using namespace cyberglove_service; |
2766 | + |
2767 | + |
2768 | + |
2769 | +///////////////////////////////// |
2770 | +// MAIN // |
2771 | +///////////////////////////////// |
2772 | + |
2773 | + |
2774 | +/** |
2775 | + * Start the cyberglove publisher. |
2776 | + * |
2777 | + * @param argc |
2778 | + * @param argv |
2779 | + * |
2780 | + * @return -1 if error (e.g. no glove found) |
2781 | + */ |
2782 | +int main(int argc, char** argv) |
2783 | +{ |
2784 | + ros::init(argc, argv, "cyberglove_publisher"); |
2785 | + //NodeHandle n; |
2786 | + boost::shared_ptr<CyberglovePublisher> cyberglove_pub(new CyberglovePublisher()); |
2787 | + |
2788 | + CybergloveService service(cyberglove_pub); |
2789 | + |
2790 | + while( ros::ok() ) |
2791 | + { |
2792 | + if(cyberglove_pub->isPublishing()){ |
2793 | + cyberglove_pub->publish(); |
2794 | + } |
2795 | + //else{ros::spinOnce();sleep(100);} |
2796 | + } |
2797 | + |
2798 | + return 0; |
2799 | +} |
2800 | |
2801 | === added file 'shadow_robot/cyberglove/src/cyberglove_publisher.cpp' |
2802 | --- shadow_robot/cyberglove/src/cyberglove_publisher.cpp 1970-01-01 00:00:00 +0000 |
2803 | +++ shadow_robot/cyberglove/src/cyberglove_publisher.cpp 2010-11-03 16:17:45 +0000 |
2804 | @@ -0,0 +1,222 @@ |
2805 | +/** |
2806 | +* @file shadowhand_publisher.cpp |
2807 | +* @author Ugo Cupcic <ugo@shadowrobot.com> |
2808 | +* @date Thu Mar 25 15:36:41 2010 |
2809 | +* |
2810 | +* @brief The goal of this ROS publisher is to publish relevant data |
2811 | +* concerning the hand at a regular time interval. |
2812 | +* Those data are (not exhaustive): positions, targets, temperatures, |
2813 | +* currents, forces, error flags, ... |
2814 | +* |
2815 | +* |
2816 | +*/ |
2817 | + |
2818 | +//ROS include |
2819 | +#include <ros/ros.h> |
2820 | + |
2821 | +//generic C/C++ include |
2822 | +#include <string> |
2823 | +#include <sstream> |
2824 | + |
2825 | +#include "cyberglove/serial_glove.h" |
2826 | +#include "cyberglove/cyberglove_publisher.h" |
2827 | + |
2828 | +using namespace ros; |
2829 | +using namespace xml_calibration_parser; |
2830 | + |
2831 | +namespace cyberglove_publisher{ |
2832 | + |
2833 | + ///////////////////////////////// |
2834 | + // CONSTRUCTOR/DESTRUCTOR // |
2835 | + ///////////////////////////////// |
2836 | + |
2837 | + CyberglovePublisher::CyberglovePublisher() |
2838 | + : n_tilde("~"), publish_rate(0.0), path_to_glove("/dev/ttyS0"), publishing(true) |
2839 | + { |
2840 | + |
2841 | + std::string path_to_calibration; |
2842 | + n_tilde.param("path_to_calibration", path_to_calibration, std::string("/etc/robot/calibration.d/cyberglove.cal")); |
2843 | + ROS_INFO("Calibration file loaded for the Cyberglove: %s", path_to_calibration.c_str()); |
2844 | + |
2845 | + initialize_calibration(path_to_calibration); |
2846 | + |
2847 | + // set publish frequency |
2848 | + double publish_freq; |
2849 | + n_tilde.param("publish_frequency", publish_freq, 20.0); |
2850 | + publish_rate = Rate(publish_freq); |
2851 | + |
2852 | + // set path to glove |
2853 | + n_tilde.param("path_to_glove", path_to_glove, std::string("/dev/ttyS0")); |
2854 | + ROS_INFO("Opening glove on port: %s", path_to_glove.c_str()); |
2855 | + |
2856 | + int error = setup_glove( path_to_glove.c_str() ); |
2857 | + //sleep 1s to be sure the glove had enough time to start |
2858 | + sleep(1); |
2859 | + |
2860 | + if( error != 0 ) |
2861 | + ROS_ERROR("Couldn't initialize the glove, is the glove plugged in?"); |
2862 | + else |
2863 | + { |
2864 | + //publishes calibrated JointState messages |
2865 | + std::string prefix; |
2866 | + std::string searched_param; |
2867 | + n_tilde.searchParam("cyberglove_prefix", searched_param); |
2868 | + n_tilde.param(searched_param, prefix, std::string()); |
2869 | + std::string full_topic = prefix + "/calibrated/joint_states"; |
2870 | + cyberglove_pub = n_tilde.advertise<sensor_msgs::JointState>(full_topic, 2); |
2871 | + |
2872 | + //publishes raw JointState messages |
2873 | + n_tilde.searchParam("cyberglove_prefix", searched_param); |
2874 | + n_tilde.param(searched_param, prefix, std::string()); |
2875 | + full_topic = prefix + "/raw/joint_states"; |
2876 | + cyberglove_raw_pub = n_tilde.advertise<sensor_msgs::JointState>(full_topic, 2); |
2877 | + } |
2878 | + |
2879 | + //initialises joint names (the order is important) |
2880 | + jointstate_msg.name.push_back("G_ThumbRotate"); |
2881 | + jointstate_msg.name.push_back("G_ThumbMPJ"); |
2882 | + jointstate_msg.name.push_back("G_ThumbIJ"); |
2883 | + jointstate_msg.name.push_back("G_ThumbAb"); |
2884 | + jointstate_msg.name.push_back("G_IndexMPJ"); |
2885 | + jointstate_msg.name.push_back("G_IndexPIJ"); |
2886 | + jointstate_msg.name.push_back("G_IndexDIJ"); |
2887 | + jointstate_msg.name.push_back("G_MiddleMPJ"); |
2888 | + jointstate_msg.name.push_back("G_MiddlePIJ"); |
2889 | + jointstate_msg.name.push_back("G_MiddleDIJ"); |
2890 | + jointstate_msg.name.push_back("G_MiddleIndexAb"); |
2891 | + jointstate_msg.name.push_back("G_RingMPJ"); |
2892 | + jointstate_msg.name.push_back("G_RingPIJ"); |
2893 | + jointstate_msg.name.push_back("G_RingDIJ"); |
2894 | + jointstate_msg.name.push_back("G_RingMiddleAb"); |
2895 | + jointstate_msg.name.push_back("G_PinkieMPJ"); |
2896 | + jointstate_msg.name.push_back("G_PinkiePIJ"); |
2897 | + jointstate_msg.name.push_back("G_PinkieDIJ"); |
2898 | + jointstate_msg.name.push_back("G_PinkieRingAb"); |
2899 | + jointstate_msg.name.push_back("G_PalmArch"); |
2900 | + jointstate_msg.name.push_back("G_WristPitch"); |
2901 | + jointstate_msg.name.push_back("G_WristYaw"); |
2902 | + |
2903 | + jointstate_raw_msg.name = jointstate_msg.name; |
2904 | + } |
2905 | + |
2906 | + CyberglovePublisher::~CyberglovePublisher() |
2907 | + { |
2908 | + } |
2909 | + |
2910 | + void CyberglovePublisher::initialize_calibration(std::string path_to_calibration) |
2911 | + { |
2912 | + calibration_parser = XmlCalibrationParser(path_to_calibration); |
2913 | + } |
2914 | + |
2915 | + bool CyberglovePublisher::isPublishing() |
2916 | + { |
2917 | + if (publishing) |
2918 | + { |
2919 | + return true; |
2920 | + } |
2921 | + else |
2922 | + { |
2923 | + //check if the value was read |
2924 | + if( checkGloveState() ) |
2925 | + { |
2926 | + ROS_INFO("The glove button was switched on, starting to publish data."); |
2927 | + publishing = true; |
2928 | + } |
2929 | + |
2930 | + ros::spinOnce(); |
2931 | + publish_rate.sleep(); |
2932 | + return false; |
2933 | + } |
2934 | + } |
2935 | + |
2936 | + void CyberglovePublisher::setPublishing(bool value){ |
2937 | + publishing = value; |
2938 | + } |
2939 | + |
2940 | + ///////////////////////////////// |
2941 | + // PUBLISH METHOD // |
2942 | + ///////////////////////////////// |
2943 | + void CyberglovePublisher::publish() |
2944 | + { |
2945 | + //if (!publishing) return; |
2946 | + //read the state of the glove button |
2947 | + if( !checkGloveState() ) |
2948 | + { |
2949 | + publishing = false; |
2950 | + ROS_INFO("The glove button is off, no data will be read / sent"); |
2951 | + ros::spinOnce(); |
2952 | + publish_rate.sleep(); |
2953 | + return; |
2954 | + } |
2955 | + |
2956 | + //read data from the glove |
2957 | + try |
2958 | + { |
2959 | + glovePositions = glove_get_values(); |
2960 | + } |
2961 | + catch(int e) |
2962 | + { |
2963 | + ROS_ERROR("The glove values can't be read"); |
2964 | + ros::spinOnce(); |
2965 | + publish_rate.sleep(); |
2966 | + return; |
2967 | + } |
2968 | + |
2969 | + //reset the messages |
2970 | + jointstate_msg.effort.clear(); |
2971 | + jointstate_msg.position.clear(); |
2972 | + jointstate_msg.velocity.clear(); |
2973 | + jointstate_raw_msg.effort.clear(); |
2974 | + jointstate_raw_msg.position.clear(); |
2975 | + jointstate_raw_msg.velocity.clear(); |
2976 | + |
2977 | + //fill the joint_state msg with the glove data |
2978 | + for(unsigned int i=0; i<GLOVE_SIZE; ++i) |
2979 | + { |
2980 | + jointstate_raw_msg.position.push_back(glovePositions[i]); |
2981 | + add_jointstate(glovePositions[i], jointstate_msg.name[i]); |
2982 | + } |
2983 | + //publish the msgs |
2984 | + cyberglove_pub.publish(jointstate_msg); |
2985 | + cyberglove_raw_pub.publish(jointstate_raw_msg); |
2986 | + |
2987 | + ros::spinOnce(); |
2988 | + publish_rate.sleep(); |
2989 | + } |
2990 | + |
2991 | + void CyberglovePublisher::add_jointstate(float position, std::string joint_name) |
2992 | + { |
2993 | + //can't read the effort from the glove |
2994 | + jointstate_msg.effort.push_back(0.0); |
2995 | + |
2996 | + //get the calibration value |
2997 | + float calibration_value = calibration_parser.get_calibration_value(position, joint_name); |
2998 | + std::cout << calibration_value << std::endl; |
2999 | + //publish the glove position |
3000 | + jointstate_msg.position.push_back(calibration_value); |
3001 | + //set velocity to 0. |
3002 | + //@TODO : send the correct velocity ? |
3003 | + jointstate_msg.velocity.push_back(0.0); |
3004 | + } |
3005 | + |
3006 | + bool CyberglovePublisher::checkGloveState() |
3007 | + { |
3008 | + int gloveButtonState = -1; |
3009 | + gloveButtonState = read_button_value(); |
3010 | + |
3011 | + //check if the value was read |
3012 | + switch( gloveButtonState) |
3013 | + { |
3014 | + case 0: |
3015 | + return false; |
3016 | + case 1: |
3017 | + return true; |
3018 | + default: |
3019 | + ROS_ERROR("The glove button state value couldn't be read."); |
3020 | + return false; |
3021 | + } |
3022 | + } |
3023 | + |
3024 | +}// end namespace |
3025 | + |
3026 | + |
3027 | |
3028 | === added file 'shadow_robot/cyberglove/src/cyberglove_service.cpp' |
3029 | --- shadow_robot/cyberglove/src/cyberglove_service.cpp 1970-01-01 00:00:00 +0000 |
3030 | +++ shadow_robot/cyberglove/src/cyberglove_service.cpp 2010-11-03 16:17:45 +0000 |
3031 | @@ -0,0 +1,40 @@ |
3032 | +#include <ros/ros.h> |
3033 | + |
3034 | +#include <string> |
3035 | +#include <sstream> |
3036 | + |
3037 | +#include "cyberglove/serial_glove.h" |
3038 | +#include "cyberglove/cyberglove_publisher.h" |
3039 | +#include "cyberglove/cyberglove_service.h" |
3040 | + |
3041 | +using namespace ros; |
3042 | + |
3043 | +namespace cyberglove_service{ |
3044 | + |
3045 | +CybergloveService::CybergloveService(boost::shared_ptr<cyberglove_publisher::CyberglovePublisher> publish) |
3046 | + : node("~"), pub(publish) |
3047 | +{ |
3048 | + service_start = node.advertiseService("start",&CybergloveService::start,this); |
3049 | + service_calibration = node.advertiseService("calibration", &CybergloveService::calibration, this); |
3050 | + ROS_INFO("Listening for service"); |
3051 | +} |
3052 | + |
3053 | +bool CybergloveService::start(cyberglove::Start::Request &req, cyberglove::Start::Response &res){ |
3054 | + if(req.start){ |
3055 | + ROS_INFO("Glove is now publishing"); |
3056 | + this->pub->setPublishing(true); |
3057 | + } |
3058 | + else{ |
3059 | + ROS_INFO("Glove has stopped publishing"); |
3060 | + this->pub->setPublishing(false); |
3061 | + } |
3062 | + //this->pub->cyberglove_pub.shutdown(); |
3063 | + return true; |
3064 | +} |
3065 | +bool CybergloveService::calibration(cyberglove::Calibration::Request &req, cyberglove::Calibration::Response &res){ |
3066 | + this->pub->setPublishing(false); |
3067 | + this->pub->initialize_calibration(req.path); |
3068 | + this->pub->setPublishing(true); |
3069 | + return true; |
3070 | +} |
3071 | +} |
3072 | |
3073 | === added file 'shadow_robot/cyberglove/src/serial_glove.c' |
3074 | --- shadow_robot/cyberglove/src/serial_glove.c 1970-01-01 00:00:00 +0000 |
3075 | +++ shadow_robot/cyberglove/src/serial_glove.c 2010-11-03 16:17:45 +0000 |
3076 | @@ -0,0 +1,236 @@ |
3077 | + |
3078 | +/** |
3079 | +@file |
3080 | + This program talks to a cyberglove on the serial port |
3081 | + |
3082 | + The only purpose is to continually sample the glove and to store the values in the |
3083 | + array \c glove_positions |
3084 | + |
3085 | + The program provides the function \fn void* read_glove_sensors(void) |
3086 | + that may be used together with a thread |
3087 | + |
3088 | + serial_glove.c |
3089 | + (C) Shadow Robot Company 2006 |
3090 | + GPL |
3091 | +*/ |
3092 | + |
3093 | +//! sudo cc -c -I/usr/realtime/include/ serial_glove.c -o serial_glove.o |
3094 | + |
3095 | + |
3096 | + |
3097 | +#include <stdio.h> |
3098 | +#include <error.h> |
3099 | +#include <stdio.h> |
3100 | +#include <unistd.h> |
3101 | + |
3102 | +#include <termios.h> |
3103 | +#include <fcntl.h> |
3104 | +#include <stdio.h> |
3105 | +#include <unistd.h> |
3106 | +#include <sys/ioctl.h> |
3107 | +#include <errno.h> |
3108 | +#include <sys/types.h> |
3109 | +#include <sys/stat.h> |
3110 | +#include <signal.h> |
3111 | +#include <string.h> |
3112 | +#include <pwd.h> |
3113 | +#include <sys/time.h> |
3114 | + |
3115 | +#include "cyberglove/serial_glove.h" |
3116 | + |
3117 | +int VERBOSE=0; |
3118 | + |
3119 | +FILE * serial; |
3120 | + |
3121 | +static float values[GLOVE_SIZE]; |
3122 | + |
3123 | + |
3124 | +float glove_positions[GLOVE_SIZE]; |
3125 | + |
3126 | +int gloveButtonValue=0; |
3127 | + |
3128 | +int glove_start_reads=0, glove_reads=0; |
3129 | + |
3130 | +char glove_message[100]; |
3131 | + |
3132 | + |
3133 | +struct termios termios_save; |
3134 | +static int serial_port_fd = -1; |
3135 | + |
3136 | +void open_board(char *port) { |
3137 | + struct termios termios_p; |
3138 | + |
3139 | + serial_port_fd = open(port, O_RDWR | O_NOCTTY); //will return a file descriptor based on an actual file |
3140 | + |
3141 | + if (serial_port_fd < 0) error(1, errno, "can't open serial port! maybe run as root..."); |
3142 | + |
3143 | + //! get attributes associated with the serial port |
3144 | + tcgetattr(serial_port_fd, &termios_p); |
3145 | + |
3146 | + //changes in termios_p won't affect termios_save behond this line... |
3147 | + //memcpy(&termios_save, &termios_p, sizeof(struct termios)); //not used |
3148 | + |
3149 | + termios_p.c_cflag = B115200; |
3150 | + termios_p.c_cflag |= CS8; |
3151 | + termios_p.c_cflag |= CREAD; |
3152 | + termios_p.c_iflag = IGNPAR | IGNBRK; |
3153 | + termios_p.c_cflag |= CLOCAL; |
3154 | + termios_p.c_oflag = 0; |
3155 | + termios_p.c_lflag = 0; // NOT in canonical mode |
3156 | + termios_p.c_cc[VTIME] = 1; //5; // half a second timeout |
3157 | + termios_p.c_cc[VMIN] = 0; // select timeout mode |
3158 | + |
3159 | + |
3160 | + |
3161 | + memcpy(&termios_save, &termios_p, sizeof(struct termios)); |
3162 | + |
3163 | + //! trying the following lines to restart serial port, see read_stepping() function |
3164 | + tcsetattr(serial_port_fd, TCSANOW, &termios_p); |
3165 | + tcflush(serial_port_fd, TCOFLUSH); |
3166 | + tcflush(serial_port_fd, TCIFLUSH); |
3167 | + |
3168 | + // unsigned char out_data[2]={0xff, 0}; |
3169 | + // write(serial_port_fd, out_data, 1); |
3170 | + |
3171 | + sleep(1); |
3172 | +} |
3173 | + |
3174 | + |
3175 | + |
3176 | + |
3177 | + |
3178 | +/** |
3179 | +called by read_values |
3180 | +*b is length GLOVE_SIZE + 2 because the first two characters returned are G and ' ' |
3181 | +*/ |
3182 | +int read_stepping(int fd, unsigned char *b, int n) { |
3183 | + int i=0; |
3184 | + //fd_set fdset; |
3185 | + int res=0; |
3186 | + int remain; |
3187 | + //int counter=0; |
3188 | + remain = n; |
3189 | + |
3190 | + do { |
3191 | + res=read(fd, &b[i], remain); |
3192 | + if (res>0) { |
3193 | + remain -= res; |
3194 | + i += res; |
3195 | + }; |
3196 | + |
3197 | + if (res<0) { error(1, errno, "readg!"); }; |
3198 | + if (res==0) { |
3199 | + strcpy(glove_message, "(glove read failed, is it connected?)"); |
3200 | + //counter++; error(0,0,"returned no data"); |
3201 | + //HACK without this the glove will sometimes freeze |
3202 | + tcsetattr(serial_port_fd, TCSANOW, &termios_save); |
3203 | + return 1; |
3204 | + }; |
3205 | + |
3206 | + if (remain) usleep (remain * 500); //wait for more characters to appear on the port |
3207 | + } while ( /* (counter<10) && */ remain); |
3208 | + |
3209 | + return (remain!=0); |
3210 | +} |
3211 | + |
3212 | +void writeg(int fd, char *b, int n) { |
3213 | + int i; |
3214 | + for (i=0;i<n;i++) { |
3215 | + write(fd, &b[i], 1); |
3216 | + }; |
3217 | + // usleep(10*n); |
3218 | +} |
3219 | + |
3220 | +//read the position values from the glove |
3221 | +void read_values(float *dest) { |
3222 | + restart: |
3223 | + glove_start_reads++; |
3224 | + tcflush(serial_port_fd, TCIFLUSH); |
3225 | + tcflush(serial_port_fd, TCOFLUSH); |
3226 | + writeg(serial_port_fd, "G", 1); |
3227 | + int i; |
3228 | + unsigned char ch[GLOVE_SIZE+2]={0}; //assigns 0 to the first char |
3229 | + |
3230 | + usleep(GLOVE_SIZE*10); |
3231 | + // int res=read(serial_port_fd, &ch, GLOVE_SIZE+2); |
3232 | + // if (res<0) error(1,errno, "reading from serial port"); |
3233 | + if (read_stepping(serial_port_fd, &ch, GLOVE_SIZE+2)) { |
3234 | + //error(0,0,"serial port timeout"); |
3235 | + goto restart; |
3236 | + }; |
3237 | + // error(0,0,"res=%d, %02x %02x %02x %02x %02x %02x", res, ch[0],ch[1],ch[2],ch[3],ch[4],ch[5]); |
3238 | + |
3239 | + if (ch[0]!='G') { |
3240 | + //error(0,0,"NO G"); |
3241 | + // log_message("%s: Failure reading glove: No G", timestamp()); |
3242 | + goto restart; |
3243 | + }; |
3244 | + |
3245 | + //! if any of the values are zero restart read as not considered reliable |
3246 | + for (i=0; i<GLOVE_SIZE; i++) { |
3247 | + if (ch[i+1]==0) { |
3248 | + //error(0,0,"Restart %d!", i); |
3249 | + goto restart; |
3250 | + }; |
3251 | + }; |
3252 | + |
3253 | + for (i=0; i<GLOVE_SIZE; i++) { |
3254 | + dest[i] = (ch[i+1]-1.0)/254.0; |
3255 | + } |
3256 | + |
3257 | + |
3258 | + strcpy(glove_message, ""); |
3259 | + glove_reads++; |
3260 | +} |
3261 | + |
3262 | +//read the button value from the glove |
3263 | +int read_button_value() { |
3264 | + restartButtonRead: |
3265 | + tcflush(serial_port_fd, TCIFLUSH); |
3266 | + tcflush(serial_port_fd, TCOFLUSH); |
3267 | + writeg(serial_port_fd, "?W", 2); |
3268 | + unsigned char ch[3]={0}; //assigns 0 to the first char |
3269 | + |
3270 | + //TODO : this should be reduced ? |
3271 | + usleep(GLOVE_SIZE*10); |
3272 | + |
3273 | + if (read_stepping(serial_port_fd, &ch, 3)) { |
3274 | + goto restartButtonRead; |
3275 | + }; |
3276 | + |
3277 | + return ch[2]; |
3278 | +} |
3279 | + |
3280 | + |
3281 | +int setup_glove(const char* path_to_glove) |
3282 | + { |
3283 | + open_board(path_to_glove); |
3284 | + |
3285 | + int i; |
3286 | + for (i=0;i<GLOVE_SIZE;i++) |
3287 | + { |
3288 | + values[i]=0.0; |
3289 | + glove_positions[i] = 0.0; |
3290 | + } |
3291 | + |
3292 | + return 0; |
3293 | + } |
3294 | + |
3295 | + |
3296 | +//at end of file |
3297 | +//static void compute_setpoints(void); |
3298 | + |
3299 | + |
3300 | + |
3301 | +//! sample the glove values - need to call setup_glove first |
3302 | +float* glove_get_values() { |
3303 | + read_values(values); |
3304 | + |
3305 | + int i; |
3306 | + for (i=0; i<GLOVE_SIZE; i++) |
3307 | + glove_positions[i] = values[i]; |
3308 | + |
3309 | + return glove_positions; |
3310 | +} |
3311 | + |
3312 | + |
3313 | |
3314 | === added file 'shadow_robot/cyberglove/src/xml_calibration_parser.cpp' |
3315 | --- shadow_robot/cyberglove/src/xml_calibration_parser.cpp 1970-01-01 00:00:00 +0000 |
3316 | +++ shadow_robot/cyberglove/src/xml_calibration_parser.cpp 2010-11-03 16:17:45 +0000 |
3317 | @@ -0,0 +1,308 @@ |
3318 | +/** |
3319 | + * @file xml_calibration_parser.cpp |
3320 | + * @author Ugo Cupcic <ugo@shadowrobot.com> |
3321 | + * @date Tue Apr 27 11:30:41 2010 |
3322 | + * |
3323 | + * @brief This is a simple xml parser, used to parse the calibration |
3324 | + * file for the cyberglove. |
3325 | + * A Calibration file must have this format: |
3326 | + * <Cyberglove_calibration> |
3327 | + * <Joint name="G_ThumbRotate"> |
3328 | + * <calib raw_value="0.0" calibrated_value="-60"/> |
3329 | + * <calib raw_value="0.42" calibrated_value="100"/> |
3330 | + * </Joint> |
3331 | + * </Cyberglove_calibration> |
3332 | + * |
3333 | + * The calibration will be used by the glove node to stream coherent |
3334 | + * angles (and not an uncalibrated sensor value between 0 and 1). |
3335 | + * |
3336 | + * |
3337 | + */ |
3338 | + |
3339 | +//ROS include |
3340 | +#include <ros/ros.h> |
3341 | + |
3342 | +#include "cyberglove/xml_calibration_parser.h" |
3343 | + |
3344 | +#include <stdio.h> |
3345 | + |
3346 | +namespace xml_calibration_parser{ |
3347 | + |
3348 | + const float XmlCalibrationParser::lookup_precision = 1000.0f; |
3349 | + const float XmlCalibrationParser::lookup_offset = 1.0f; |
3350 | + |
3351 | + /** |
3352 | + * The constructor: parses the given file and stores the calibration |
3353 | + * in the vector std::vector<JointCalibration> jointsCalibrations. |
3354 | + * |
3355 | + * @param path_to_calibration the path to the xml calibration |
3356 | + * file. Please note that it is best to use ros parameters to set |
3357 | + * the path in your code calling this constructor. |
3358 | + */ |
3359 | + XmlCalibrationParser::XmlCalibrationParser(std::string path_to_calibration) |
3360 | + { |
3361 | + TiXmlDocument doc(path_to_calibration.c_str()); |
3362 | + bool loadOkay = doc.LoadFile(); |
3363 | + if (loadOkay) |
3364 | + { |
3365 | + ROS_DEBUG("loading calibration %s", path_to_calibration.c_str()); |
3366 | + parse_calibration_file( doc.RootElement() ); |
3367 | + |
3368 | + build_calibration_table(); |
3369 | + } |
3370 | + else |
3371 | + { |
3372 | + ROS_ERROR("Failed to load file \"%s\"", path_to_calibration.c_str()); |
3373 | + } |
3374 | + } |
3375 | + |
3376 | + /** |
3377 | + * Parses the calibration file and retreive the full calibration for |
3378 | + * the cyberglove. |
3379 | + * |
3380 | + * @param pParent The parent node (Cyberglove_calibration) |
3381 | + * containing all the xml tree. |
3382 | + */ |
3383 | + void XmlCalibrationParser::parse_calibration_file( TiXmlNode* pParent ) |
3384 | + { |
3385 | + if ( !pParent ) return; |
3386 | + |
3387 | + TiXmlElement* child = pParent->FirstChildElement("Joint"); |
3388 | + |
3389 | + //no Joint elements => error |
3390 | + if( !child ) |
3391 | + { |
3392 | + ROS_ERROR( "The calibration file seems to be broken: there's no Joint elements." ); |
3393 | + return; |
3394 | + } |
3395 | + |
3396 | + bool has_sibling = true; |
3397 | + while( has_sibling ) |
3398 | + { |
3399 | + // a Joint element was found |
3400 | + XmlCalibrationParser::JointCalibration joint_calib; |
3401 | + joint_calib.name = child->Attribute("name"); |
3402 | + |
3403 | + joint_calib.calibrations = parse_joint_attributes(child); |
3404 | + |
3405 | + jointsCalibrations.push_back(joint_calib); |
3406 | + |
3407 | + //get the next Joint element |
3408 | + child = child->NextSiblingElement("Joint"); |
3409 | + //no more Joint elements => stop |
3410 | + if( !child ) |
3411 | + has_sibling = false; |
3412 | + } |
3413 | + } |
3414 | + |
3415 | + /** |
3416 | + * Parses the Joint element of the calibration file. |
3417 | + * |
3418 | + * @param pParent a Joint element |
3419 | + * |
3420 | + * @return the calibration values for this Joint. |
3421 | + */ |
3422 | + std::vector<XmlCalibrationParser::Calibration> |
3423 | + XmlCalibrationParser::parse_joint_attributes( TiXmlNode* pParent ) |
3424 | + { |
3425 | + std::vector<XmlCalibrationParser::Calibration> calibrations; |
3426 | + |
3427 | + TiXmlElement* child = pParent->FirstChildElement("calib"); |
3428 | + |
3429 | + //no Joint elements => error |
3430 | + if( !child ) |
3431 | + { |
3432 | + ROS_ERROR( "The calibration file seems to be broken: there's no calibration elements." ); |
3433 | + return calibrations; |
3434 | + } |
3435 | + bool has_sibling = true; |
3436 | + |
3437 | + while( has_sibling ) |
3438 | + { |
3439 | + // a Joint element was found |
3440 | + XmlCalibrationParser::Calibration calib; |
3441 | + float fval; |
3442 | + |
3443 | + // get the raw-value |
3444 | + if( child->QueryFloatAttribute("raw_value", &fval) == TIXML_SUCCESS ) |
3445 | + calib.raw_value = fval; |
3446 | + else |
3447 | + ROS_ERROR("The calibration file seems to be broken: there's no raw_value attribute."); |
3448 | + |
3449 | + //get the calibrated-value |
3450 | + if( child->QueryFloatAttribute("calibrated_value", &fval) == TIXML_SUCCESS ) |
3451 | + calib.calibrated_value = fval; |
3452 | + else |
3453 | + ROS_ERROR("The calibration file seems to be broken: there's no calibrated_value attribute."); |
3454 | + |
3455 | + //add the calibration to the vector |
3456 | + calibrations.push_back( calib ); |
3457 | + |
3458 | + //get the next Joint element |
3459 | + child = child->NextSiblingElement("calib"); |
3460 | + //no more Joint elements => stop |
3461 | + if( !child ) |
3462 | + has_sibling = false; |
3463 | + } |
3464 | + |
3465 | + return calibrations; |
3466 | + } |
3467 | + |
3468 | + |
3469 | + /** |
3470 | + * Transform the calibration values to a lookup table for fast |
3471 | + * processing of the calibration process. |
3472 | + * NB: the lookup table ranges from 0 to +lookup_offset |
3473 | + * with a precision of 1/lookup_precision. |
3474 | + * |
3475 | + */ |
3476 | + int XmlCalibrationParser::build_calibration_table() |
3477 | + { |
3478 | + for (unsigned int index_calib = 0; index_calib < jointsCalibrations.size(); ++index_calib) |
3479 | + { |
3480 | + std::string name = jointsCalibrations[index_calib].name; |
3481 | + std::cout << name << std::endl; |
3482 | + |
3483 | + std::vector<Calibration> calib = jointsCalibrations[index_calib].calibrations; |
3484 | + |
3485 | + std::vector<float> lookup_table((int)lookup_offset*(int)lookup_precision); |
3486 | + |
3487 | + if( calib.size() < 2 ) |
3488 | + ROS_ERROR("Not enough points were defined to set up the calibration."); |
3489 | + |
3490 | + //order the calibration vector by ascending values of raw_value |
3491 | + // ROS_ERROR("TODO: calibration vector not ordered yet"); |
3492 | + |
3493 | + std::cout << "lookup table : "; |
3494 | + |
3495 | + //setup the lookup table |
3496 | + for( unsigned int index_lookup = 0; |
3497 | + index_lookup < lookup_table.size() ; |
3498 | + ++ index_lookup ) |
3499 | + { |
3500 | + float value = compute_lookup_value(index_lookup, calib); |
3501 | + std::cout << index_lookup<<":"<<value << " "; |
3502 | + lookup_table[index_lookup] = value; |
3503 | + } |
3504 | + |
3505 | + std::cout << std::endl; |
3506 | + |
3507 | + //add the values to the map |
3508 | + joints_calibrations_map[name] = lookup_table; |
3509 | + //joints_calibrations_map.insert(std::pair <std::string, std::vector<float> >(name, lookup_table)); |
3510 | + } |
3511 | + |
3512 | + return 0; |
3513 | + } |
3514 | + |
3515 | + /** |
3516 | + * return the value to store in the lookup table for a given index, |
3517 | + * using the calibration information. |
3518 | + * |
3519 | + * @param index the index for which we compute the value |
3520 | + * |
3521 | + * @param calib the vector containing the calibration informations |
3522 | + * (a list of raw_value <=> calibrated_value) |
3523 | + * |
3524 | + * @return the value to be stored in the lookup table |
3525 | + */ |
3526 | + float XmlCalibrationParser::compute_lookup_value(int index, std::vector<XmlCalibrationParser::Calibration> calib) |
3527 | + { |
3528 | + float raw_pos = return_raw_position_from_index(index); |
3529 | + |
3530 | + if(calib.size() == 2) |
3531 | + return linear_interpolate( raw_pos, |
3532 | + calib[0].raw_value, |
3533 | + calib[0].calibrated_value, |
3534 | + calib[1].raw_value, |
3535 | + calib[1].calibrated_value |
3536 | + ); |
3537 | + |
3538 | + |
3539 | + for( unsigned int index_calib = 0; index_calib < calib.size() - 1; |
3540 | + ++index_calib) |
3541 | + { |
3542 | + if(calib[index_calib].raw_value > raw_pos) |
3543 | + { |
3544 | + return linear_interpolate( raw_pos, |
3545 | + calib[index_calib].raw_value, |
3546 | + calib[index_calib].calibrated_value, |
3547 | + calib[index_calib+1].raw_value, |
3548 | + calib[index_calib+1].calibrated_value |
3549 | + ); |
3550 | + } |
3551 | + } |
3552 | + |
3553 | + //bigger than last calibrated value => extrapolate the value from |
3554 | + //last 2 values |
3555 | + //TODO: ca marche la formule si on est en dehors des points ? oui |
3556 | + return linear_interpolate( raw_pos, |
3557 | + calib[calib.size()-1].raw_value, |
3558 | + calib[calib.size()-1].calibrated_value, |
3559 | + calib[calib.size()].raw_value, |
3560 | + calib[calib.size()].calibrated_value |
3561 | + ); |
3562 | + |
3563 | + } |
3564 | + |
3565 | + float XmlCalibrationParser::get_calibration_value(float position, std::string joint_name) |
3566 | + { |
3567 | + mapType::iterator iter = joints_calibrations_map.find(joint_name); |
3568 | + |
3569 | + if( joint_name.compare("G_ThumbAb")) |
3570 | + printf("toto"); |
3571 | + |
3572 | + if( iter != joints_calibrations_map.end() ) |
3573 | + { |
3574 | + //reads from the lookup table |
3575 | + int index = return_index_from_raw_position(position); |
3576 | + std::cout << index << std::endl; |
3577 | + return iter->second[index]; |
3578 | + } |
3579 | + else |
3580 | + { |
3581 | + ROS_ERROR("%s is not calibrated", joint_name.c_str()); |
3582 | + return 1.0f; |
3583 | + } |
3584 | + } |
3585 | + |
3586 | + float XmlCalibrationParser::linear_interpolate( float x , |
3587 | + float x0, float y0, |
3588 | + float x1, float y1 ) |
3589 | + { |
3590 | + |
3591 | + //TODO ca marche qd c'est decroissant ca? oui |
3592 | + float y = 0.0f; |
3593 | + if( x1 - x0 == 0.0f ) |
3594 | + { |
3595 | + ROS_WARN("Bad calibration: raw_calib[1] = raw_calib[0]"); |
3596 | + return 0.0f; |
3597 | + } |
3598 | + |
3599 | + y = y0 + (x-x0)* ((y1-y0)/(x1-x0)); |
3600 | + return y; |
3601 | + } |
3602 | + |
3603 | + |
3604 | + int XmlCalibrationParser::return_index_from_raw_position(float raw_position) |
3605 | + { |
3606 | + if (raw_position < 0.0f) |
3607 | + return 0; |
3608 | + if(raw_position > 1.0f) |
3609 | + return lookup_precision; |
3610 | + return round(raw_position * lookup_precision); |
3611 | + }; |
3612 | + |
3613 | + int XmlCalibrationParser::round(float number) |
3614 | + { |
3615 | + //we only have positive numbers |
3616 | + return (int)floor(number + 0.5); |
3617 | + //return number < 0.0 ? ceil(number - 0.5) : floor(number + 0.5); |
3618 | + } |
3619 | + |
3620 | + |
3621 | + std::vector<XmlCalibrationParser::JointCalibration> XmlCalibrationParser::getJointsCalibrations() |
3622 | + { |
3623 | + return jointsCalibrations; |
3624 | + } |
3625 | +}//end namespace |
3626 | |
3627 | === added directory 'shadow_robot/cyberglove/srv' |
3628 | === added file 'shadow_robot/cyberglove/srv/Calibration.srv' |
3629 | --- shadow_robot/cyberglove/srv/Calibration.srv 1970-01-01 00:00:00 +0000 |
3630 | +++ shadow_robot/cyberglove/srv/Calibration.srv 2010-11-03 16:17:45 +0000 |
3631 | @@ -0,0 +1,3 @@ |
3632 | +string path |
3633 | +--- |
3634 | +bool state |
3635 | |
3636 | === added file 'shadow_robot/cyberglove/srv/Start.srv' |
3637 | --- shadow_robot/cyberglove/srv/Start.srv 1970-01-01 00:00:00 +0000 |
3638 | +++ shadow_robot/cyberglove/srv/Start.srv 2010-11-03 16:17:45 +0000 |
3639 | @@ -0,0 +1,3 @@ |
3640 | +bool start |
3641 | +--- |
3642 | +bool state |
3643 | |
3644 | === added directory 'shadow_robot/cyberglove/test' |
3645 | === added file 'shadow_robot/cyberglove/test/cyberglove_test.cal' |
3646 | --- shadow_robot/cyberglove/test/cyberglove_test.cal 1970-01-01 00:00:00 +0000 |
3647 | +++ shadow_robot/cyberglove/test/cyberglove_test.cal 2010-11-03 16:17:45 +0000 |
3648 | @@ -0,0 +1,19 @@ |
3649 | +<?xml version="1.0" ?> |
3650 | +<Cyberglove_calibration> |
3651 | +<Joint name="test1"> |
3652 | +<calib raw_value="0.0 " calibrated_value=" 0"/> |
3653 | +<calib raw_value="0.1 " calibrated_value=" 100"/> |
3654 | +</Joint> |
3655 | +<Joint name="test2"> |
3656 | +<calib raw_value="0.0 " calibrated_value=" 10"/> |
3657 | +<calib raw_value="0.1 " calibrated_value=" 60"/> |
3658 | +</Joint> |
3659 | +<Joint name="test3"> |
3660 | +<calib raw_value="0.1 " calibrated_value=" 10"/> |
3661 | +<calib raw_value="0.2 " calibrated_value=" 60"/> |
3662 | +</Joint> |
3663 | +<Joint name="test4"> |
3664 | +<calib raw_value="0.1 " calibrated_value=" 10"/> |
3665 | +<calib raw_value="0.0 " calibrated_value=" 60"/> |
3666 | +</Joint> |
3667 | +</Cyberglove_calibration> |
3668 | |
3669 | === added file 'shadow_robot/cyberglove/test/test_calibration.cpp' |
3670 | --- shadow_robot/cyberglove/test/test_calibration.cpp 1970-01-01 00:00:00 +0000 |
3671 | +++ shadow_robot/cyberglove/test/test_calibration.cpp 2010-11-03 16:17:45 +0000 |
3672 | @@ -0,0 +1,136 @@ |
3673 | + |
3674 | + |
3675 | +#include <ros/ros.h> |
3676 | + |
3677 | +#include <math.h> |
3678 | + |
3679 | +#include <cyberglove/xml_calibration_parser.h> |
3680 | +#include <gtest/gtest.h> |
3681 | + |
3682 | +#define TEST_EXPRESSION(a) EXPECT_EQ((a), meval::EvaluateMathExpression(#a)) |
3683 | + |
3684 | +using namespace ros; |
3685 | +using namespace xml_calibration_parser; |
3686 | + |
3687 | +std::string path_to_calibration = "/home/ugo/Projects/cyberglove/cyberglove_ROS_interface/cyberglove/test/cyberglove_test.cal"; |
3688 | + |
3689 | +float epsilon = 0.01f; |
3690 | + |
3691 | +XmlCalibrationParser calib_parser; |
3692 | + |
3693 | +TEST(LookupTable, testSimple) |
3694 | +{ |
3695 | + float valtmp; |
3696 | + valtmp = calib_parser.get_calibration_value(0.05f,"test1" ); |
3697 | + EXPECT_TRUE(fabs( valtmp - 50.0f ) < epsilon) |
3698 | + << "Expected value : 50 " |
3699 | + << "Received value : "<< valtmp; |
3700 | + |
3701 | + valtmp = calib_parser.get_calibration_value(0.1f,"test1" ); |
3702 | + EXPECT_TRUE(fabs( valtmp - 100.0f ) < epsilon) |
3703 | + << "Expected value : 100 " |
3704 | + << "Received value : "<< valtmp; |
3705 | + |
3706 | + valtmp = calib_parser.get_calibration_value(0.0f,"test1" ); |
3707 | + EXPECT_TRUE(fabs( valtmp - 0.0f ) < epsilon) |
3708 | + << "Expected value : 0 " |
3709 | + << "Received value : "<< valtmp; |
3710 | + |
3711 | + valtmp = calib_parser.get_calibration_value(0.2f,"test1" ); |
3712 | + EXPECT_TRUE(fabs( valtmp - 200.0f ) < epsilon) |
3713 | + << "Expected value : 200 " |
3714 | + << "Received value : "<< valtmp; |
3715 | +} |
3716 | + |
3717 | +TEST(LookupTable, integrity) |
3718 | +{ |
3719 | + std::vector<XmlCalibrationParser::JointCalibration> myCalib = calib_parser.getJointsCalibrations(); |
3720 | + |
3721 | + EXPECT_EQ(4, myCalib.size()); |
3722 | + for(unsigned int i = 0; i<myCalib.size() ; ++i) |
3723 | + { |
3724 | + EXPECT_EQ(2, myCalib[i].calibrations.size()); |
3725 | + } |
3726 | +} |
3727 | + |
3728 | +TEST(LookupTable, testCalibNotStartingAtZero) |
3729 | +{ |
3730 | + float valtmp; |
3731 | + valtmp = calib_parser.get_calibration_value(0.05f,"test2" ); |
3732 | + EXPECT_TRUE(fabs( valtmp - 35.0f ) < epsilon) |
3733 | + << "Expected value : 35 " |
3734 | + << "Received value : "<< valtmp; |
3735 | + |
3736 | + valtmp = calib_parser.get_calibration_value(0.1f,"test2" ); |
3737 | + EXPECT_TRUE(fabs( valtmp - 60.0f ) < epsilon) |
3738 | + << "Expected value : 60 " |
3739 | + << "Received value : "<< valtmp; |
3740 | + |
3741 | + valtmp = calib_parser.get_calibration_value(0.0f,"test2" ); |
3742 | + EXPECT_TRUE(fabs( valtmp - 10.0f ) < epsilon) |
3743 | + << "Expected value : 10 " |
3744 | + << "Received value : "<< valtmp; |
3745 | + |
3746 | + valtmp = calib_parser.get_calibration_value(0.2f,"test2" ); |
3747 | + EXPECT_TRUE(fabs(valtmp - 110.0f ) < epsilon) |
3748 | + << "Expected value : 110 " |
3749 | + << "Received value : "<< valtmp; |
3750 | +} |
3751 | + |
3752 | +TEST(LookupTable, testRawNotStartingAtZero) |
3753 | +{ |
3754 | + float valtmp; |
3755 | + valtmp = calib_parser.get_calibration_value(0.15f,"test3" ); |
3756 | + EXPECT_TRUE(fabs( valtmp - 35.0f ) < epsilon) |
3757 | + << "Expected value : 35 " |
3758 | + << "Received value : "<< valtmp; |
3759 | + |
3760 | + valtmp = calib_parser.get_calibration_value(0.2f,"test3" ); |
3761 | + EXPECT_TRUE(fabs( valtmp - 60.0f ) < epsilon) |
3762 | + << "Expected value : 60 " |
3763 | + << "Received value : "<< valtmp; |
3764 | + |
3765 | + valtmp = calib_parser.get_calibration_value(0.1f,"test3" ); |
3766 | + EXPECT_TRUE(fabs( valtmp - 10.0f ) < epsilon) |
3767 | + << "Expected value : 10 " |
3768 | + << "Received value : "<< valtmp; |
3769 | + |
3770 | + valtmp = calib_parser.get_calibration_value(0.3f,"test3" ); |
3771 | + EXPECT_TRUE(fabs(valtmp - 110.0f ) < epsilon) |
3772 | + << "Expected value : 110 " |
3773 | + << "Received value : "<< valtmp; |
3774 | +} |
3775 | + |
3776 | +TEST(LookupTable, tableNotOrdered) |
3777 | +{ |
3778 | + float valtmp; |
3779 | + valtmp = calib_parser.get_calibration_value(0.05f,"test4" ); |
3780 | + EXPECT_TRUE(fabs( valtmp - 35.0f ) < epsilon) |
3781 | + << "Expected value : 35 " |
3782 | + << "Received value : "<< valtmp; |
3783 | + |
3784 | + valtmp = calib_parser.get_calibration_value(0.1f,"test4" ); |
3785 | + EXPECT_TRUE(fabs( valtmp - 10.0f ) < epsilon) |
3786 | + << "Expected value : 10 " |
3787 | + << "Received value : "<< valtmp; |
3788 | + |
3789 | + valtmp = calib_parser.get_calibration_value(0.0f,"test4" ); |
3790 | + EXPECT_TRUE(fabs( valtmp - 60.0f ) < epsilon) |
3791 | + << "Expected value : 60 " |
3792 | + << "Received value : "<< valtmp; |
3793 | + |
3794 | + valtmp = calib_parser.get_calibration_value(0.2f,"test4" ); |
3795 | + EXPECT_TRUE(fabs( valtmp + 40.0f) < epsilon) |
3796 | + << "Expected value : -40 " |
3797 | + << "Received value : "<< valtmp; |
3798 | +} |
3799 | + |
3800 | +// Run all the tests that were declared with TEST() |
3801 | +int main(int argc, char **argv){ |
3802 | + |
3803 | + calib_parser = XmlCalibrationParser(path_to_calibration); |
3804 | + |
3805 | + testing::InitGoogleTest(&argc, argv); |
3806 | + return RUN_ALL_TESTS(); |
3807 | + |
3808 | +} |
3809 | |
3810 | === added directory 'shadow_robot/dataglove' |
3811 | === added file 'shadow_robot/dataglove/CMakeLists.txt' |
3812 | --- shadow_robot/dataglove/CMakeLists.txt 1970-01-01 00:00:00 +0000 |
3813 | +++ shadow_robot/dataglove/CMakeLists.txt 2010-11-03 16:17:45 +0000 |
3814 | @@ -0,0 +1,17 @@ |
3815 | +cmake_minimum_required(VERSION 2.4.6) |
3816 | +include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake) |
3817 | + |
3818 | +# Append to CPACK_SOURCE_IGNORE_FILES a semicolon-separated list of |
3819 | +# directories (or patterns, but directories should suffice) that should |
3820 | +# be excluded from the distro. This is not the place to put things that |
3821 | +# should be ignored everywhere, like "build" directories; that happens in |
3822 | +# rosbuild/rosbuild.cmake. Here should be listed packages that aren't |
3823 | +# ready for inclusion in a distro. |
3824 | +# |
3825 | +# This list is combined with the list in rosbuild/rosbuild.cmake. Note |
3826 | +# that CMake 2.6 may be required to ensure that the two lists are combined |
3827 | +# properly. CMake 2.4 seems to have unpredictable scoping rules for such |
3828 | +# variables. |
3829 | +#list(APPEND CPACK_SOURCE_IGNORE_FILES /core/experimental) |
3830 | + |
3831 | +rosbuild_make_distribution(0.1.0) |
3832 | |
3833 | === added file 'shadow_robot/dataglove/Makefile' |
3834 | --- shadow_robot/dataglove/Makefile 1970-01-01 00:00:00 +0000 |
3835 | +++ shadow_robot/dataglove/Makefile 2010-11-03 16:17:45 +0000 |
3836 | @@ -0,0 +1,1 @@ |
3837 | +include $(shell rospack find mk)/cmake_stack.mk |
3838 | \ No newline at end of file |
3839 | |
3840 | === added directory 'shadow_robot/dataglove/dataglove_processing' |
3841 | === added file 'shadow_robot/dataglove/dataglove_processing/CMakeLists.txt' |
3842 | --- shadow_robot/dataglove/dataglove_processing/CMakeLists.txt 1970-01-01 00:00:00 +0000 |
3843 | +++ shadow_robot/dataglove/dataglove_processing/CMakeLists.txt 2010-11-03 16:17:45 +0000 |
3844 | @@ -0,0 +1,34 @@ |
3845 | +cmake_minimum_required(VERSION 2.4.6) |
3846 | +include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake) |
3847 | + |
3848 | +# Set the build type. Options are: |
3849 | +# Coverage : w/ debug symbols, w/o optimization, w/ code-coverage |
3850 | +# Debug : w/ debug symbols, w/o optimization |
3851 | +# Release : w/o debug symbols, w/ optimization |
3852 | +# RelWithDebInfo : w/ debug symbols, w/ optimization |
3853 | +# MinSizeRel : w/o debug symbols, w/ optimization, stripped binaries |
3854 | +#set(ROS_BUILD_TYPE RelWithDebInfo) |
3855 | + |
3856 | +rosbuild_init() |
3857 | + |
3858 | +#set the default path for built executables to the "bin" directory |
3859 | +set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) |
3860 | +#set the default path for built libraries to the "lib" directory |
3861 | +set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) |
3862 | + |
3863 | +#uncomment if you have defined messages |
3864 | +#rosbuild_genmsg() |
3865 | +#uncomment if you have defined services |
3866 | +rosbuild_gensrv() |
3867 | + |
3868 | +#common commands for building c++ executables and libraries |
3869 | +#rosbuild_add_library(${PROJECT_NAME} src/example.cpp) |
3870 | +#target_link_libraries(${PROJECT_NAME} another_library) |
3871 | +#rosbuild_add_boost_directories() |
3872 | +#rosbuild_link_boost(${PROJECT_NAME} thread) |
3873 | +#rosbuild_add_executable(example examples/example.cpp) |
3874 | +#target_link_libraries(example ${PROJECT_NAME}) |
3875 | + |
3876 | +#rosbuild_add_executable(optical_dataglove src/optical_dataglove.cpp src/optical_dataglove_node.cpp) |
3877 | +rosbuild_add_executable(message_publisher src/three_dimensions src/two_dimensions.cpp src/reverse_kinematics.cpp src/database_mapping.cpp src/message_publisher.cpp src/optical_dataglove_node.cpp) |
3878 | + |
3879 | |
3880 | === added file 'shadow_robot/dataglove/dataglove_processing/Makefile' |
3881 | --- shadow_robot/dataglove/dataglove_processing/Makefile 1970-01-01 00:00:00 +0000 |
3882 | +++ shadow_robot/dataglove/dataglove_processing/Makefile 2010-11-03 16:17:45 +0000 |
3883 | @@ -0,0 +1,1 @@ |
3884 | +include $(shell rospack find mk)/cmake.mk |
3885 | \ No newline at end of file |
3886 | |
3887 | === added file 'shadow_robot/dataglove/dataglove_processing/dataglove-UML.png' |
3888 | Binary files shadow_robot/dataglove/dataglove_processing/dataglove-UML.png 1970-01-01 00:00:00 +0000 and shadow_robot/dataglove/dataglove_processing/dataglove-UML.png 2010-11-03 16:17:45 +0000 differ |
3889 | === added directory 'shadow_robot/dataglove/dataglove_processing/include' |
3890 | === added directory 'shadow_robot/dataglove/dataglove_processing/include/optical_dataglove' |
3891 | === added file 'shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/data_analyser.h' |
3892 | --- shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/data_analyser.h 1970-01-01 00:00:00 +0000 |
3893 | +++ shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/data_analyser.h 2010-11-03 16:17:45 +0000 |
3894 | @@ -0,0 +1,41 @@ |
3895 | +#ifndef DATA_ANALYSER_H_ |
3896 | +#define DATA_ANALYSER_H_ |
3897 | + |
3898 | +#include "optical_dataglove/joint_data.h" |
3899 | +#include <map> |
3900 | + |
3901 | +namespace opticaldataglove{ |
3902 | + |
3903 | +/* |
3904 | + * Abstract class to define methods to make conversions between the raw source to the fingertips positions |
3905 | + * Key methods to implement in subclass are getFingerTipPositions and getHandModel, which is used to determine the distances between the human hand articulations |
3906 | + */ |
3907 | +class DataAnalyser |
3908 | +{ |
3909 | + |
3910 | +public: |
3911 | +/* |
3912 | + * Constructor |
3913 | + */ |
3914 | + DataAnalyser() |
3915 | + { |
3916 | + }; |
3917 | +/* |
3918 | + * Destructor |
3919 | + */ |
3920 | + ~DataAnalyser() |
3921 | + { |
3922 | + }; |
3923 | + |
3924 | + virtual std::map<std::string, double> getFingerTipPositions()=0; |
3925 | + virtual std::map<std::string, double> getHandModel()=0; |
3926 | + |
3927 | +protected: |
3928 | + |
3929 | + std::map<std::string, double> fingerTipPositions; |
3930 | + std::map<std::string, double> handModel; |
3931 | + |
3932 | + |
3933 | +}; |
3934 | +} |
3935 | +#endif //DATA_ANALYSER_H_ |
3936 | |
3937 | === added file 'shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/database_mapping.h' |
3938 | --- shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/database_mapping.h 1970-01-01 00:00:00 +0000 |
3939 | +++ shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/database_mapping.h 2010-11-03 16:17:45 +0000 |
3940 | @@ -0,0 +1,41 @@ |
3941 | +#ifndef DATABASEMAPPING_H_ |
3942 | +#define DATABASEMAPPING_H_ |
3943 | + |
3944 | +#include "optical_dataglove/position_mapper.h" |
3945 | + |
3946 | +namespace opticaldataglove{ |
3947 | + |
3948 | +/* |
3949 | + * Class used to perform the conversion between fingertips positions to joints values using a Database of known positions |
3950 | + */ |
3951 | +class DatabaseMapping : public PositionMapper |
3952 | +{ |
3953 | +public : |
3954 | + |
3955 | +/* |
3956 | + * Constructor |
3957 | + * @param data_analyser : data analyser performing computing to get information from hand |
3958 | + */ |
3959 | + DatabaseMapping(boost::shared_ptr<DataAnalyser> data_analyser); |
3960 | + |
3961 | +/* |
3962 | + * Destructor |
3963 | + */ |
3964 | + ~DatabaseMapping(); |
3965 | + |
3966 | +/* |
3967 | + * Returns a map with the angles of that the hand should take |
3968 | + */ |
3969 | + virtual std::map<std::string, JointData> getHandPositions(); |
3970 | + |
3971 | +private : |
3972 | + |
3973 | +/* |
3974 | + * Initializes the hand position |
3975 | + */ |
3976 | + virtual void initializeHandPositions(); |
3977 | + |
3978 | +}; |
3979 | +} |
3980 | + |
3981 | +#endif //#DATABASEMAPPING_H_ |
3982 | |
3983 | === added file 'shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/hand_model.h' |
3984 | --- shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/hand_model.h 1970-01-01 00:00:00 +0000 |
3985 | +++ shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/hand_model.h 2010-11-03 16:17:45 +0000 |
3986 | @@ -0,0 +1,52 @@ |
3987 | +#ifndef HAND_MODEL_H_ |
3988 | +#define HAND_MODEL_H_ |
3989 | + |
3990 | +#include <string> |
3991 | + |
3992 | +namespace opticaldataglove{ |
3993 | + |
3994 | +/* |
3995 | + * Class describing the distances between the joints on the human hand. These should be get only once. |
3996 | + */ |
3997 | +class HandModel |
3998 | +{ |
3999 | + |
4000 | +public : |
4001 | + |
4002 | + double THJ3_to_THJ2; |
4003 | + double THJ2_to_THJ1; |
4004 | + |
4005 | + double FFJ3_to_FFJ2; |
4006 | + double FFJ2_to_FFJ1; |
4007 | + |
4008 | + double MFJ3_to_MFJ2; |
4009 | + double MFJ2_to_MFJ1; |
4010 | + |
4011 | + double RFJ3_to_RFJ2; |
4012 | + double RFJ2_to_RFJ1; |
4013 | + |
4014 | + double LFJ3_to_LFJ2; |
4015 | + double LFJ2_to_LFJ1; |
4016 | + |
4017 | + HandModel() : |
4018 | + THJ3_to_THJ2(1.0),THJ2_to_THJ1(2.0),FFJ3_to_FFJ2(1.0),FFJ2_to_FFJ1(2.0), |
4019 | + MFJ3_to_MFJ2(1.0),MFJ2_to_MFJ1(2.0),RFJ3_to_RFJ2(1.0),RFJ2_to_RFJ1(2.0), |
4020 | + LFJ3_to_LFJ2(1.0),LFJ2_to_LFJ1(2.0) |
4021 | + { |
4022 | + } |
4023 | + |
4024 | + HandModel(HandModel& hm) : |
4025 | + THJ3_to_THJ2(hm.THJ3_to_THJ2),THJ2_to_THJ1(hm.THJ2_to_THJ1),FFJ3_to_FFJ2(hm.FFJ3_to_FFJ2),FFJ2_to_FFJ1(hm.FFJ2_to_FFJ1), |
4026 | + MFJ3_to_MFJ2(hm.MFJ3_to_MFJ2),MFJ2_to_MFJ1(hm.MFJ2_to_MFJ1),RFJ3_to_RFJ2(hm.RFJ3_to_RFJ2),RFJ2_to_RFJ1(hm.RFJ2_to_RFJ1), |
4027 | + LFJ3_to_LFJ2(hm.LFJ3_to_LFJ2),LFJ2_to_LFJ1(hm.LFJ2_to_LFJ1) |
4028 | + { |
4029 | + }; |
4030 | + |
4031 | + HandModel(const HandModel& hm) : |
4032 | + THJ3_to_THJ2(hm.THJ3_to_THJ2),THJ2_to_THJ1(hm.THJ2_to_THJ1),FFJ3_to_FFJ2(hm.FFJ3_to_FFJ2),FFJ2_to_FFJ1(hm.FFJ2_to_FFJ1), |
4033 | + MFJ3_to_MFJ2(hm.MFJ3_to_MFJ2),MFJ2_to_MFJ1(hm.MFJ2_to_MFJ1),RFJ3_to_RFJ2(hm.RFJ3_to_RFJ2),RFJ2_to_RFJ1(hm.RFJ2_to_RFJ1), |
4034 | + LFJ3_to_LFJ2(hm.LFJ3_to_LFJ2),LFJ2_to_LFJ1(hm.LFJ2_to_LFJ1) |
4035 | + { |
4036 | +} |
4037 | + |
4038 | +#endif //HAND_MODEL_H_ |
4039 | |
4040 | === added file 'shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/joint_data.h' |
4041 | --- shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/joint_data.h 1970-01-01 00:00:00 +0000 |
4042 | +++ shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/joint_data.h 2010-11-03 16:17:45 +0000 |
4043 | @@ -0,0 +1,46 @@ |
4044 | +#ifndef JOINT_DATA_H_ |
4045 | +#define JOINT_DATA_H_ |
4046 | + |
4047 | +#include <string> |
4048 | + |
4049 | +namespace opticaldataglove{ |
4050 | + |
4051 | +/* |
4052 | + * Describes a joint of the hand with any possible information |
4053 | + */ |
4054 | +class JointData |
4055 | +{ |
4056 | + |
4057 | +public: |
4058 | + double position; |
4059 | + double target; |
4060 | + double temperature; |
4061 | + double current; |
4062 | + double force; |
4063 | + std::string flags; |
4064 | + int jointIndex; |
4065 | + double min; |
4066 | + double max; |
4067 | + short isJointZero; |
4068 | + |
4069 | + JointData() : |
4070 | + position(0.0), target(0.0), temperature(0.0), current(0.0), force(0.0), flags(""), jointIndex(0), |
4071 | + min(0.0), max(90.0), isJointZero(0) |
4072 | + { |
4073 | + } |
4074 | + |
4075 | + JointData(JointData& jd) : |
4076 | + position(jd.position), target(jd.target), temperature(jd.temperature), current(jd.current), force(jd.force), |
4077 | + flags(jd.flags), jointIndex(jd.jointIndex), min(jd.min), max(jd.max), isJointZero(jd.isJointZero) |
4078 | + { |
4079 | + } |
4080 | + |
4081 | + JointData(const JointData& jd) : |
4082 | + position(jd.position), target(jd.target), temperature(jd.temperature), current(jd.current), force(jd.force), |
4083 | + flags(jd.flags), jointIndex(jd.jointIndex), min(jd.min), max(jd.max), isJointZero(jd.isJointZero) |
4084 | + { |
4085 | + } |
4086 | +}; |
4087 | + |
4088 | +} |
4089 | +#endif //JOINT_DATA_H_ |
4090 | |
4091 | === added file 'shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/message_publisher.h' |
4092 | --- shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/message_publisher.h 1970-01-01 00:00:00 +0000 |
4093 | +++ shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/message_publisher.h 2010-11-03 16:17:45 +0000 |
4094 | @@ -0,0 +1,56 @@ |
4095 | +#ifndef MESSAGE_PUBLISHER_H_ |
4096 | +#define MESSAGE_PUBLISHER_H_ |
4097 | + |
4098 | +#include <string> |
4099 | +#include <vector> |
4100 | +#include <map> |
4101 | +#include <ros/ros.h> |
4102 | +#include "opticaldataglove/Start.h" |
4103 | +#include "opticaldataglove/Stop.h" |
4104 | +#include "optical_dataglove/joint_data.h" |
4105 | +#include "optical_dataglove/position_mapper.h" |
4106 | +#include <boost/smart_ptr.hpp> |
4107 | +#include <sensor_msgs/JointState.h> |
4108 | + |
4109 | +namespace opticaldataglove |
4110 | +{ |
4111 | + |
4112 | +/* |
4113 | + * Interfacing the acquisition and computing process with the hand over ROS |
4114 | + */ |
4115 | +class MessagePublisher |
4116 | +{ |
4117 | +public: |
4118 | + |
4119 | + MessagePublisher(boost::shared_ptr<PositionMapper> position_mapper); |
4120 | + |
4121 | + |
4122 | + ~MessagePublisher(); |
4123 | + |
4124 | + std::string publishedTopic; |
4125 | + |
4126 | +/* |
4127 | + * Publishes the position of the hand on the specified topic |
4128 | + */ |
4129 | + void publish(); |
4130 | +/* |
4131 | + * ROS service to start the publishing |
4132 | + */ |
4133 | + bool start(opticaldataglove::Start::Request &req, opticaldataglove::Start::Response &res); |
4134 | +/* |
4135 | + * ROS service to stop the publishing |
4136 | + */ |
4137 | + bool stop(opticaldataglove::Stop::Request &req, opticaldataglove::Stop::Response &res); |
4138 | + |
4139 | +private: |
4140 | + |
4141 | + std::map<std::string, JointData> handPositions; |
4142 | + ros::NodeHandle node; |
4143 | + boost::shared_ptr<PositionMapper> positionMapper; |
4144 | + ros::Publisher publisher; |
4145 | + ros::ServiceServer service_start; |
4146 | + ros::ServiceServer service_stop; |
4147 | + bool isPublishing; |
4148 | +}; |
4149 | +} |
4150 | +#endif //MESSAGE_PUBLISHER_H_ |
4151 | |
4152 | === added file 'shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/optical_dataglove.h' |
4153 | --- shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/optical_dataglove.h 1970-01-01 00:00:00 +0000 |
4154 | +++ shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/optical_dataglove.h 2010-11-03 16:17:45 +0000 |
4155 | @@ -0,0 +1,45 @@ |
4156 | +/** |
4157 | + * @file optical_dataglove.h |
4158 | + * @author Ugo Cupcic <ugo@shadowrobot.com> |
4159 | + * @date Wed Jul 7 18:08:41 2010 |
4160 | + * |
4161 | + * @brief The Optical Dataglove Class. |
4162 | + * |
4163 | + * |
4164 | + */ |
4165 | + |
4166 | +#ifndef OPTICAL_DATAGLOVE_H_ |
4167 | +#define OPTICAL_DATAGLOVE_H_ |
4168 | + |
4169 | +#include <ros/ros.h> |
4170 | +#include <sensor_msgs/Image.h> |
4171 | +#include <image_transport/image_transport.h> |
4172 | +#include "cv_bridge/CvBridge.h" |
4173 | +#include <opencv/cv.h> |
4174 | +#include <opencv/highgui.h> |
4175 | +#include <math.h> |
4176 | + |
4177 | +namespace optical_dataglove |
4178 | +{ |
4179 | + class OpticalDataglove |
4180 | + { |
4181 | + public: |
4182 | + OpticalDataglove(ros::NodeHandle & nh); |
4183 | + ~OpticalDataglove(){}; |
4184 | + |
4185 | + protected: |
4186 | + ros::NodeHandle nh_; |
4187 | + image_transport::ImageTransport it_; |
4188 | + image_transport::Subscriber image_sub_; |
4189 | + sensor_msgs::CvBridge bridge_; |
4190 | + image_transport::Publisher image_pub_; |
4191 | + cv::Mat img_in_; |
4192 | + cv::Mat img_hsv_; |
4193 | + IplImage *cv_input_; |
4194 | + IplImage cv_output_; |
4195 | + |
4196 | + void imageCallback (const sensor_msgs::ImageConstPtr & msg_ptr); |
4197 | + }; |
4198 | +}; |
4199 | + |
4200 | +#endif /* ! OPTICAL_DATAGLOVE_H_ */ |
4201 | |
4202 | === added file 'shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/position_mapper.h' |
4203 | --- shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/position_mapper.h 1970-01-01 00:00:00 +0000 |
4204 | +++ shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/position_mapper.h 2010-11-03 16:17:45 +0000 |
4205 | @@ -0,0 +1,44 @@ |
4206 | +#ifndef POSITION_MAPPER_H_ |
4207 | +#define POSITION_MAPPER_H_ |
4208 | + |
4209 | +#include "optical_dataglove/joint_data.h" |
4210 | +#include "optical_dataglove/data_analyser.h" |
4211 | +#include <boost/smart_ptr.hpp> |
4212 | +#include <map> |
4213 | + |
4214 | +namespace opticaldataglove{ |
4215 | + |
4216 | +/* |
4217 | + * Abstract class to interface the DataAnalyser with the Message Publisher : computing the data received by the analyser and convert it to joints positions |
4218 | + */ |
4219 | +class PositionMapper |
4220 | +{ |
4221 | + |
4222 | +public: |
4223 | + |
4224 | +/* |
4225 | + * Constructor |
4226 | + */ |
4227 | + PositionMapper() |
4228 | + { |
4229 | + }; |
4230 | + |
4231 | +/* |
4232 | + * Destructor |
4233 | + */ |
4234 | + ~PositionMapper() |
4235 | + { |
4236 | + }; |
4237 | + |
4238 | + virtual std::map<std::string, JointData> getHandPositions()=0; |
4239 | + |
4240 | +protected: |
4241 | + |
4242 | + std::map<std::string, JointData> handPositions; |
4243 | + std::map<std::string, double> fingerTipPositions; |
4244 | + boost::shared_ptr<DataAnalyser> dataAnalyser; |
4245 | + virtual void initializeHandPositions()=0; |
4246 | +}; |
4247 | +} |
4248 | + |
4249 | +#endif //POSITION_MAPPER_H_ |
4250 | |
4251 | === added file 'shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/reverse_kinematics.h' |
4252 | --- shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/reverse_kinematics.h 1970-01-01 00:00:00 +0000 |
4253 | +++ shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/reverse_kinematics.h 2010-11-03 16:17:45 +0000 |
4254 | @@ -0,0 +1,32 @@ |
4255 | +#ifndef REVERSE_KINEMATICS_H_ |
4256 | +#define REVERSE_KINEMATICS_H_ |
4257 | + |
4258 | +#include "optical_dataglove/position_mapper.h" |
4259 | + |
4260 | +namespace opticaldataglove{ |
4261 | + |
4262 | +/* |
4263 | + * Class to use reverse kinematics to perform the mapping between fingertips position and joint positions |
4264 | + */ |
4265 | +class ReverseKinematics : public PositionMapper |
4266 | +{ |
4267 | +public : |
4268 | + |
4269 | +/* |
4270 | + * Constructor |
4271 | + * @param data_analyser : DataAnalyser which is getting the fingertips positions |
4272 | + */ |
4273 | + ReverseKinematics(boost::shared_ptr<DataAnalyser> data_analyser); |
4274 | + |
4275 | + ~ReverseKinematics(); |
4276 | + |
4277 | + virtual std::map<std::string, JointData> getHandPositions(); |
4278 | + |
4279 | +private : |
4280 | + |
4281 | + virtual void initializeHandPositions(); |
4282 | + |
4283 | +}; |
4284 | +} |
4285 | + |
4286 | +#endif //REVERSE_KINEMATICS_H_ |
4287 | |
4288 | === added file 'shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/three_dimensions.h' |
4289 | --- shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/three_dimensions.h 1970-01-01 00:00:00 +0000 |
4290 | +++ shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/three_dimensions.h 2010-11-03 16:17:45 +0000 |
4291 | @@ -0,0 +1,32 @@ |
4292 | +#ifndef THREE_DIMENSIONS_H_ |
4293 | +#define THREE_DIMENSIONS_H_ |
4294 | + |
4295 | +#include "optical_dataglove/data_analyser.h" |
4296 | + |
4297 | +namespace opticaldataglove{ |
4298 | + |
4299 | +/* |
4300 | + * Class performing the conversion between 3D pictures to fingertips positions |
4301 | + */ |
4302 | +class ThreeDimensionsAnalyser : public DataAnalyser |
4303 | +{ |
4304 | +public : |
4305 | + |
4306 | +/* |
4307 | + * Constructor |
4308 | + */ |
4309 | + ThreeDimensionsAnalyser(); |
4310 | + |
4311 | +/* |
4312 | + * Destructor |
4313 | + */ |
4314 | + ~ThreeDimensionsAnalyser(); |
4315 | + |
4316 | + |
4317 | + virtual std::map<std::string, double> getFingerTipPositions(); |
4318 | + virtual std::map<std::string, double> getHandModel(); |
4319 | + |
4320 | +}; |
4321 | +} |
4322 | + |
4323 | +#endif //THREE_DIMENSIONS_H_ |
4324 | |
4325 | === added file 'shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/two_dimensions.h' |
4326 | --- shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/two_dimensions.h 1970-01-01 00:00:00 +0000 |
4327 | +++ shadow_robot/dataglove/dataglove_processing/include/optical_dataglove/two_dimensions.h 2010-11-03 16:17:45 +0000 |
4328 | @@ -0,0 +1,32 @@ |
4329 | +#ifndef TWO_DIMENSIONS_H_ |
4330 | +#define TWO_DIMENSIONS_H_ |
4331 | + |
4332 | +#include "optical_dataglove/data_analyser.h" |
4333 | + |
4334 | +namespace opticaldataglove{ |
4335 | + |
4336 | +/* |
4337 | + * Class performing the conversion between 2D pictures to fingertips positions |
4338 | + */ |
4339 | +class TwoDimensionsAnalyser : public DataAnalyser |
4340 | +{ |
4341 | +public : |
4342 | + |
4343 | +/* |
4344 | + * Constructor |
4345 | + */ |
4346 | + TwoDimensionsAnalyser(); |
4347 | + |
4348 | +/* |
4349 | + * Destructor |
4350 | + */ |
4351 | + ~TwoDimensionsAnalyser(); |
4352 | + |
4353 | + |
4354 | + virtual std::map<std::string, double> getFingerTipPositions(); |
4355 | + virtual std::map<std::string, double> getHandModel(); |
4356 | + |
4357 | +}; |
4358 | +} |
4359 | + |
4360 | +#endif //TWO_DIMENSIONS_H_ |
4361 | |
4362 | === added directory 'shadow_robot/dataglove/dataglove_processing/launch' |
4363 | === added file 'shadow_robot/dataglove/dataglove_processing/launch/usb_camera.launch' |
4364 | --- shadow_robot/dataglove/dataglove_processing/launch/usb_camera.launch 1970-01-01 00:00:00 +0000 |
4365 | +++ shadow_robot/dataglove/dataglove_processing/launch/usb_camera.launch 2010-11-03 16:17:45 +0000 |
4366 | @@ -0,0 +1,11 @@ |
4367 | +<launch> |
4368 | + <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" > |
4369 | + <param name="video_device" value="/dev/video0" /> |
4370 | + <param name="image_width" value="640" /> |
4371 | + <param name="image_height" value="480" /> |
4372 | + <param name="pixel_format" value="mjpeg" /> |
4373 | + <param name="camera_frame_id" value="usb_cam" /> |
4374 | + <param name="io_method" value="mmap"/> |
4375 | + </node> |
4376 | + <node name="optical_dataglove" pkg="optical_dataglove" type="optical_dataglove" output="screen" /> |
4377 | +</launch> |
4378 | |
4379 | === added file 'shadow_robot/dataglove/dataglove_processing/mainpage.dox' |
4380 | --- shadow_robot/dataglove/dataglove_processing/mainpage.dox 1970-01-01 00:00:00 +0000 |
4381 | +++ shadow_robot/dataglove/dataglove_processing/mainpage.dox 2010-11-03 16:17:45 +0000 |
4382 | @@ -0,0 +1,43 @@ |
4383 | +/** |
4384 | +\mainpage |
4385 | +\htmlinclude manifest.html |
4386 | + |
4387 | +\b optical_dataglove is ... |
4388 | + |
4389 | +<!-- |
4390 | +Provide an overview of your package. |
4391 | +--> |
4392 | + |
4393 | +\section dependencies installing dependencies |
4394 | +\subsection usbcam usb_cam ros driver - Bosch |
4395 | +The optical dataglove package depends on the usb_cam driver from Bosch. |
4396 | +To install it, run the following commands: |
4397 | +\verbatim |
4398 | +cd ~/ros/stacks |
4399 | +svn co https://bosch-ros-pkg.svn.sourceforge.net/svnroot/bosch-ros-pkg |
4400 | +cd ~/ros/stacks/bosch-ros-pkg/trunk/bosch_drivers/usb_cam |
4401 | +rosdep install usb_cam |
4402 | +rosmake --rosdep-install image_view usb_cam |
4403 | + |
4404 | +\endverbatim |
4405 | + |
4406 | +You can test it has been installed by running: |
4407 | +\verbatim |
4408 | +roslaunch optical_dataglove test_usb_cam.launch |
4409 | +\endverbatim |
4410 | + |
4411 | +\section codeapi Code API |
4412 | + |
4413 | +<!-- |
4414 | +Provide links to specific auto-generated API documentation within your |
4415 | +package that is of particular interest to a reader. Doxygen will |
4416 | +document pretty much every part of your code, so do your best here to |
4417 | +point the reader to the actual API. |
4418 | + |
4419 | +If your codebase is fairly large or has different sets of APIs, you |
4420 | +should use the doxygen 'group' tag to keep these APIs together. For |
4421 | +example, the roscpp documentation has 'libros' group. |
4422 | +--> |
4423 | + |
4424 | + |
4425 | +*/ |
4426 | |
4427 | === added file 'shadow_robot/dataglove/dataglove_processing/manifest.xml' |
4428 | --- shadow_robot/dataglove/dataglove_processing/manifest.xml 1970-01-01 00:00:00 +0000 |
4429 | +++ shadow_robot/dataglove/dataglove_processing/manifest.xml 2010-11-03 16:17:45 +0000 |
4430 | @@ -0,0 +1,23 @@ |
4431 | +<package> |
4432 | + <description brief="optical_dataglove"> |
4433 | + |
4434 | + optical_dataglove |
4435 | + |
4436 | + </description> |
4437 | + <author>Ugo Cupcic</author> |
4438 | + <license>BSD</license> |
4439 | + <review status="unreviewed" notes=""/> |
4440 | + <url>http://ros.org/wiki/optical_dataglove</url> |
4441 | + <depend package="roscpp"/> |
4442 | + <depend package="rospy"/> |
4443 | + <depend package="std_msgs"/> |
4444 | + <depend package="sensor_msgs"/> |
4445 | + <depend package="cv_bridge"/> |
4446 | + <depend package="opencv2"/> |
4447 | + <depend package="usb_cam"/> |
4448 | + <depend package="image_transport"/> |
4449 | + |
4450 | +</package> |
4451 | + |
4452 | + |
4453 | + |
4454 | |
4455 | === added directory 'shadow_robot/dataglove/dataglove_processing/src' |
4456 | === added file 'shadow_robot/dataglove/dataglove_processing/src/database_mapping.cpp' |
4457 | --- shadow_robot/dataglove/dataglove_processing/src/database_mapping.cpp 1970-01-01 00:00:00 +0000 |
4458 | +++ shadow_robot/dataglove/dataglove_processing/src/database_mapping.cpp 2010-11-03 16:17:45 +0000 |
4459 | @@ -0,0 +1,62 @@ |
4460 | +#include "optical_dataglove/database_mapping.h" |
4461 | + |
4462 | +namespace opticaldataglove{ |
4463 | + |
4464 | +DatabaseMapping::DatabaseMapping(boost::shared_ptr<DataAnalyser> data_analyser): PositionMapper() |
4465 | +{ |
4466 | + this->dataAnalyser=data_analyser; |
4467 | + initializeHandPositions(); |
4468 | +} |
4469 | + |
4470 | +DatabaseMapping::~DatabaseMapping() |
4471 | +{ |
4472 | + |
4473 | +} |
4474 | + |
4475 | +std::map<std::string, JointData> DatabaseMapping::getHandPositions() |
4476 | +{ |
4477 | + return handPositions; |
4478 | +} |
4479 | + |
4480 | +void DatabaseMapping::initializeHandPositions() |
4481 | +{ |
4482 | + this->handPositions["THJ1"] = JointData(); |
4483 | + this->handPositions["THJ1"].position =0.0; |
4484 | + this->handPositions["THJ2"] = JointData(); |
4485 | + this->handPositions["THJ2"].position = 0.0; |
4486 | + this->handPositions["THJ3"] = JointData(); |
4487 | + this->handPositions["THJ3"].position = 0.0; |
4488 | + this->handPositions["THJ4"] = JointData(); |
4489 | + this->handPositions["THJ4"].position = 0.0; |
4490 | + this->handPositions["THJ5"] = JointData(); |
4491 | + this->handPositions["THJ5"].position = 0.0; |
4492 | + this->handPositions["FFJ0"] = JointData(); |
4493 | + this->handPositions["FFJ0"].position = 0.0; |
4494 | + this->handPositions["FFJ3"] = JointData(); |
4495 | + this->handPositions["FFJ3"].position = 0.0; |
4496 | + this->handPositions["FFJ4"] = JointData(); |
4497 | + this->handPositions["FFJ4"].position = 0.0; |
4498 | + this->handPositions["MFJ0"] = JointData(); |
4499 | + this->handPositions["MFJ0"].position = 0.0; |
4500 | + this->handPositions["MFJ3"] = JointData(); |
4501 | + this->handPositions["MFJ3"].position = 0.0; |
4502 | + this->handPositions["MFJ4"] = JointData(); |
4503 | + this->handPositions["MFJ4"].position = 0.0; |
4504 | + this->handPositions["RFJ0"] = JointData(); |
4505 | + this->handPositions["RFJ0"].position = 0.0; |
4506 | + this->handPositions["RFJ3"] = JointData(); |
4507 | + this->handPositions["RFJ3"].position = 0.0; |
4508 | + this->handPositions["RFJ4"] = JointData(); |
4509 | + this->handPositions["RFJ4"].position = 0.0; |
4510 | + this->handPositions["LFJ0"] = JointData(); |
4511 | + this->handPositions["LFJ0"].position = 0.0; |
4512 | + this->handPositions["LFJ3"] = JointData(); |
4513 | + this->handPositions["LFJ3"].position = 0.0; |
4514 | + this->handPositions["LFJ4"] = JointData(); |
4515 | + this->handPositions["LFJ4"].position = 0.0; |
4516 | + this->handPositions["LFJ5"] = JointData(); |
4517 | + this->handPositions["LFJ5"].position = 0.0; |
4518 | + |
4519 | +} |
4520 | + |
4521 | +} |
4522 | |
4523 | === added file 'shadow_robot/dataglove/dataglove_processing/src/message_publisher.cpp' |
4524 | --- shadow_robot/dataglove/dataglove_processing/src/message_publisher.cpp 1970-01-01 00:00:00 +0000 |
4525 | +++ shadow_robot/dataglove/dataglove_processing/src/message_publisher.cpp 2010-11-03 16:17:45 +0000 |
4526 | @@ -0,0 +1,55 @@ |
4527 | +#include "optical_dataglove/message_publisher.h" |
4528 | + |
4529 | +namespace opticaldataglove |
4530 | +{ |
4531 | + |
4532 | +MessagePublisher::MessagePublisher(boost::shared_ptr<PositionMapper> position_mapper): publishedTopic("joint_state"), node("~"), positionMapper(position_mapper), isPublishing(true) |
4533 | +{ |
4534 | + service_start = node.advertiseService("start", &MessagePublisher::start, this); |
4535 | + service_stop = node.advertiseService("stop", &MessagePublisher::stop, this); |
4536 | + publisher = node.advertise<sensor_msgs::JointState>("joint_state",2); |
4537 | + ROS_INFO("Ready to start"); |
4538 | +} |
4539 | + |
4540 | +MessagePublisher::~MessagePublisher() |
4541 | +{ |
4542 | + |
4543 | +} |
4544 | + |
4545 | +bool MessagePublisher::start(opticaldataglove::Start::Request &req, opticaldataglove::Start::Response &res) |
4546 | +{ |
4547 | + ROS_INFO("Starting publisher"); |
4548 | + isPublishing = true; |
4549 | + res.state = true; |
4550 | + return true; |
4551 | +} |
4552 | + |
4553 | +bool MessagePublisher::stop(opticaldataglove::Stop::Request &req, opticaldataglove::Stop::Response &res) |
4554 | +{ |
4555 | + ROS_INFO("Stoping publisher"); |
4556 | + isPublishing = false; |
4557 | + res.state = false; |
4558 | + return true; |
4559 | +} |
4560 | + |
4561 | +void MessagePublisher::publish() |
4562 | +{ |
4563 | + if (isPublishing){ |
4564 | + std::map<std::string, JointData> map = this->positionMapper->getHandPositions(); |
4565 | + sensor_msgs::JointState joint_state; |
4566 | + joint_state.header.stamp = ros::Time::now(); |
4567 | + |
4568 | + for(std::map<std::string, JointData>::const_iterator it = map.begin(); it != map.end(); it++) |
4569 | + { |
4570 | + JointData value = it->second; |
4571 | + joint_state.name.push_back(it->first); |
4572 | + joint_state.position.push_back(value.position); |
4573 | + joint_state.velocity.push_back(0.0); |
4574 | + joint_state.effort.push_back(0.0); |
4575 | + } |
4576 | + |
4577 | + this->publisher.publish(joint_state); |
4578 | + } |
4579 | +} |
4580 | + |
4581 | +} |
4582 | |
4583 | === added file 'shadow_robot/dataglove/dataglove_processing/src/optical_dataglove.cpp' |
4584 | --- shadow_robot/dataglove/dataglove_processing/src/optical_dataglove.cpp 1970-01-01 00:00:00 +0000 |
4585 | +++ shadow_robot/dataglove/dataglove_processing/src/optical_dataglove.cpp 2010-11-03 16:17:45 +0000 |
4586 | @@ -0,0 +1,60 @@ |
4587 | +/** |
4588 | + * @file optical_dataglove.cpp |
4589 | + * @author Ugo Cupcic <ugo@shadowrobot.com> |
4590 | + * @date Wed Jul 7 18:07:42 2010 |
4591 | + * |
4592 | + * @brief The Optical Dataglove class |
4593 | + * |
4594 | + * |
4595 | + */ |
4596 | + |
4597 | +#include "optical_dataglove/optical_dataglove.h" |
4598 | + |
4599 | +namespace optical_dataglove |
4600 | +{ |
4601 | + OpticalDataglove::OpticalDataglove (ros::NodeHandle & nh):nh_ (nh), it_ (nh_) |
4602 | + { |
4603 | + // Advertise image messages to a topic |
4604 | + image_pub_ = it_.advertise ("/demo/output_image", 1); |
4605 | + // Listen for image messages on a topic and setup callback |
4606 | + image_sub_ = it_.subscribe ("/usb_cam/image_raw", 1, &OpticalDataglove::imageCallback, this); |
4607 | + // Open HighGUI Window |
4608 | + cv::namedWindow ("hsv", 1); |
4609 | + } |
4610 | + |
4611 | + void OpticalDataglove::imageCallback (const sensor_msgs::ImageConstPtr & msg_ptr) |
4612 | + { |
4613 | + // Convert ROS Imput Image Message to IplImage |
4614 | + try |
4615 | + { |
4616 | + cv_input_ = bridge_.imgMsgToCv (msg_ptr, "bgr8"); |
4617 | + } |
4618 | + catch (sensor_msgs::CvBridgeException error) |
4619 | + { |
4620 | + ROS_ERROR ("CvBridge Input Error"); |
4621 | + } |
4622 | + |
4623 | + // Convert IplImage to cv::Mat |
4624 | + img_in_ = cv::Mat (cv_input_).clone (); |
4625 | + // Convert Input image from BGR to HSV |
4626 | + cv::cvtColor (img_in_, img_hsv_, CV_BGR2HSV); |
4627 | + |
4628 | + // Display HSV Image in HighGUI window |
4629 | + cv::imshow ("hsv", img_hsv_); |
4630 | + |
4631 | + // Needed to keep the HighGUI window open |
4632 | + cv::waitKey (3); |
4633 | + |
4634 | + // Convert cv::Mat to IplImage |
4635 | + cv_output_ = img_hsv_; |
4636 | + // Convert IplImage to ROS Output Image Message and Publish |
4637 | + try |
4638 | + { |
4639 | + image_pub_.publish (bridge_.cvToImgMsg (&cv_output_, "bgr8")); |
4640 | + } |
4641 | + catch (sensor_msgs::CvBridgeException error) |
4642 | + { |
4643 | + ROS_ERROR ("CvBridge Output error"); |
4644 | + } |
4645 | + } |
4646 | +}; //end namespace |
4647 | |
4648 | === added file 'shadow_robot/dataglove/dataglove_processing/src/optical_dataglove_node.cpp' |
4649 | --- shadow_robot/dataglove/dataglove_processing/src/optical_dataglove_node.cpp 1970-01-01 00:00:00 +0000 |
4650 | +++ shadow_robot/dataglove/dataglove_processing/src/optical_dataglove_node.cpp 2010-11-03 16:17:45 +0000 |
4651 | @@ -0,0 +1,47 @@ |
4652 | +/** |
4653 | + * @file optical_dataglove_node.cpp |
4654 | + * @author Ugo Cupcic <ugo@shadowrobot.com> |
4655 | + * @date Wed Jul 7 18:02:38 2010 |
4656 | + * |
4657 | + * @brief Contains the main for the optical dataglove. Start a ROS node. |
4658 | + * |
4659 | + * |
4660 | + */ |
4661 | + |
4662 | + |
4663 | +#include <boost/smart_ptr.hpp> |
4664 | +#include "optical_dataglove/message_publisher.h" |
4665 | +#include "optical_dataglove/data_analyser.h" |
4666 | +#include "optical_dataglove/two_dimensions.h" |
4667 | +#include "optical_dataglove/position_mapper.h" |
4668 | +#include "optical_dataglove/reverse_kinematics.h" |
4669 | +#include "optical_dataglove/optical_dataglove.h" |
4670 | + |
4671 | +using namespace opticaldataglove; |
4672 | + |
4673 | +int main (int argc, char **argv) |
4674 | +{ |
4675 | + // Initialize ROS Node |
4676 | + ros::init (argc, argv, "optical_dataglove"); |
4677 | + // Start node and create a Node Handle |
4678 | + ros::NodeHandle nh; |
4679 | + // Instantiate |
4680 | + //boost::shared_ptr<OpticalDataglove> optical_dataglove (new OpticalDataglove(nh)); |
4681 | + boost::shared_ptr<DataAnalyser> data (new TwoDimensionsAnalyser()); |
4682 | + boost::shared_ptr<PositionMapper> pos (new ReverseKinematics(data)); |
4683 | + boost::shared_ptr<MessagePublisher> mes (new MessagePublisher(pos)); |
4684 | + //mes->start(); |
4685 | + // Spin ... |
4686 | + ros::Rate loop_rate(5); |
4687 | + |
4688 | + while(ros::ok()){ |
4689 | + //ROS_INFO("ros::ok()"); |
4690 | + mes->publish(); |
4691 | + ros::spinOnce(); |
4692 | + loop_rate.sleep(); |
4693 | + } |
4694 | + |
4695 | + ros::spin (); |
4696 | + // ... until done |
4697 | + return 0; |
4698 | +} |
4699 | |
4700 | === added directory 'shadow_robot/dataglove/dataglove_processing/src/opticaldataglove' |
4701 | === added file 'shadow_robot/dataglove/dataglove_processing/src/opticaldataglove/__init__.py' |
4702 | === added directory 'shadow_robot/dataglove/dataglove_processing/src/opticaldataglove/srv' |
4703 | === added file 'shadow_robot/dataglove/dataglove_processing/src/opticaldataglove/srv/_Start.py' |
4704 | --- shadow_robot/dataglove/dataglove_processing/src/opticaldataglove/srv/_Start.py 1970-01-01 00:00:00 +0000 |
4705 | +++ shadow_robot/dataglove/dataglove_processing/src/opticaldataglove/srv/_Start.py 2010-11-03 16:17:45 +0000 |
4706 | @@ -0,0 +1,199 @@ |
4707 | +"""autogenerated by genmsg_py from StartRequest.msg. Do not edit.""" |
4708 | +import roslib.message |
4709 | +import struct |
4710 | + |
4711 | + |
4712 | +class StartRequest(roslib.message.Message): |
4713 | + _md5sum = "d41d8cd98f00b204e9800998ecf8427e" |
4714 | + _type = "opticaldataglove/StartRequest" |
4715 | + _has_header = False #flag to mark the presence of a Header object |
4716 | + _full_text = """ |
4717 | +""" |
4718 | + __slots__ = [] |
4719 | + _slot_types = [] |
4720 | + |
4721 | + def __init__(self, *args, **kwds): |
4722 | + """ |
4723 | + Constructor. Any message fields that are implicitly/explicitly |
4724 | + set to None will be assigned a default value. The recommend |
4725 | + use is keyword arguments as this is more robust to future message |
4726 | + changes. You cannot mix in-order arguments and keyword arguments. |
4727 | + |
4728 | + The available fields are: |
4729 | + |
4730 | + |
4731 | + @param args: complete set of field values, in .msg order |
4732 | + @param kwds: use keyword arguments corresponding to message field names |
4733 | + to set specific fields. |
4734 | + """ |
4735 | + if args or kwds: |
4736 | + super(StartRequest, self).__init__(*args, **kwds) |
4737 | + |
4738 | + def _get_types(self): |
4739 | + """ |
4740 | + internal API method |
4741 | + """ |
4742 | + return self._slot_types |
4743 | + |
4744 | + def serialize(self, buff): |
4745 | + """ |
4746 | + serialize message into buffer |
4747 | + @param buff: buffer |
4748 | + @type buff: StringIO |
4749 | + """ |
4750 | + try: |
4751 | + pass |
4752 | + except struct.error, se: self._check_types(se) |
4753 | + except TypeError, te: self._check_types(te) |
4754 | + |
4755 | + def deserialize(self, str): |
4756 | + """ |
4757 | + unpack serialized message in str into this message instance |
4758 | + @param str: byte array of serialized message |
4759 | + @type str: str |
4760 | + """ |
4761 | + try: |
4762 | + end = 0 |
4763 | + return self |
4764 | + except struct.error, e: |
4765 | + raise roslib.message.DeserializationError(e) #most likely buffer underfill |
4766 | + |
4767 | + |
4768 | + def serialize_numpy(self, buff, numpy): |
4769 | + """ |
4770 | + serialize message with numpy array types into buffer |
4771 | + @param buff: buffer |
4772 | + @type buff: StringIO |
4773 | + @param numpy: numpy python module |
4774 | + @type numpy module |
4775 | + """ |
4776 | + try: |
4777 | + pass |
4778 | + except struct.error, se: self._check_types(se) |
4779 | + except TypeError, te: self._check_types(te) |
4780 | + |
4781 | + def deserialize_numpy(self, str, numpy): |
4782 | + """ |
4783 | + unpack serialized message in str into this message instance using numpy for array types |
4784 | + @param str: byte array of serialized message |
4785 | + @type str: str |
4786 | + @param numpy: numpy python module |
4787 | + @type numpy: module |
4788 | + """ |
4789 | + try: |
4790 | + end = 0 |
4791 | + return self |
4792 | + except struct.error, e: |
4793 | + raise roslib.message.DeserializationError(e) #most likely buffer underfill |
4794 | + |
4795 | +_struct_I = roslib.message.struct_I |
4796 | +"""autogenerated by genmsg_py from StartResponse.msg. Do not edit.""" |
4797 | +import roslib.message |
4798 | +import struct |
4799 | + |
4800 | + |
4801 | +class StartResponse(roslib.message.Message): |
4802 | + _md5sum = "001fde3cab9e313a150416ff09c08ee4" |
4803 | + _type = "opticaldataglove/StartResponse" |
4804 | + _has_header = False #flag to mark the presence of a Header object |
4805 | + _full_text = """bool state |
4806 | + |
4807 | + |
4808 | +""" |
4809 | + __slots__ = ['state'] |
4810 | + _slot_types = ['bool'] |
4811 | + |
4812 | + def __init__(self, *args, **kwds): |
4813 | + """ |
4814 | + Constructor. Any message fields that are implicitly/explicitly |
4815 | + set to None will be assigned a default value. The recommend |
4816 | + use is keyword arguments as this is more robust to future message |
4817 | + changes. You cannot mix in-order arguments and keyword arguments. |
4818 | + |
4819 | + The available fields are: |
4820 | + state |
4821 | + |
4822 | + @param args: complete set of field values, in .msg order |
4823 | + @param kwds: use keyword arguments corresponding to message field names |
4824 | + to set specific fields. |
4825 | + """ |
4826 | + if args or kwds: |
4827 | + super(StartResponse, self).__init__(*args, **kwds) |
4828 | + #message fields cannot be None, assign default values for those that are |
4829 | + if self.state is None: |
4830 | + self.state = False |
4831 | + else: |
4832 | + self.state = False |
4833 | + |
4834 | + def _get_types(self): |
4835 | + """ |
4836 | + internal API method |
4837 | + """ |
4838 | + return self._slot_types |
4839 | + |
4840 | + def serialize(self, buff): |
4841 | + """ |
4842 | + serialize message into buffer |
4843 | + @param buff: buffer |
4844 | + @type buff: StringIO |
4845 | + """ |
4846 | + try: |
4847 | + buff.write(_struct_B.pack(self.state)) |
4848 | + except struct.error, se: self._check_types(se) |
4849 | + except TypeError, te: self._check_types(te) |
4850 | + |
4851 | + def deserialize(self, str): |
4852 | + """ |
4853 | + unpack serialized message in str into this message instance |
4854 | + @param str: byte array of serialized message |
4855 | + @type str: str |
4856 | + """ |
4857 | + try: |
4858 | + end = 0 |
4859 | + start = end |
4860 | + end += 1 |
4861 | + (self.state,) = _struct_B.unpack(str[start:end]) |
4862 | + self.state = bool(self.state) |
4863 | + return self |
4864 | + except struct.error, e: |
4865 | + raise roslib.message.DeserializationError(e) #most likely buffer underfill |
4866 | + |
4867 | + |
4868 | + def serialize_numpy(self, buff, numpy): |
4869 | + """ |
4870 | + serialize message with numpy array types into buffer |
4871 | + @param buff: buffer |
4872 | + @type buff: StringIO |
4873 | + @param numpy: numpy python module |
4874 | + @type numpy module |
4875 | + """ |
4876 | + try: |
4877 | + buff.write(_struct_B.pack(self.state)) |
4878 | + except struct.error, se: self._check_types(se) |
4879 | + except TypeError, te: self._check_types(te) |
4880 | + |
4881 | + def deserialize_numpy(self, str, numpy): |
4882 | + """ |
4883 | + unpack serialized message in str into this message instance using numpy for array types |
4884 | + @param str: byte array of serialized message |
4885 | + @type str: str |
4886 | + @param numpy: numpy python module |
4887 | + @type numpy: module |
4888 | + """ |
4889 | + try: |
4890 | + end = 0 |
4891 | + start = end |
4892 | + end += 1 |
4893 | + (self.state,) = _struct_B.unpack(str[start:end]) |
4894 | + self.state = bool(self.state) |
4895 | + return self |
4896 | + except struct.error, e: |
4897 | + raise roslib.message.DeserializationError(e) #most likely buffer underfill |
4898 | + |
4899 | +_struct_I = roslib.message.struct_I |
4900 | +_struct_B = struct.Struct("<B") |
4901 | +class Start(roslib.message.ServiceDefinition): |
4902 | + _type = 'opticaldataglove/Start' |
4903 | + _md5sum = '001fde3cab9e313a150416ff09c08ee4' |
4904 | + _request_class = StartRequest |
4905 | + _response_class = StartResponse |
4906 | |
4907 | === added file 'shadow_robot/dataglove/dataglove_processing/src/opticaldataglove/srv/_Stop.py' |
4908 | --- shadow_robot/dataglove/dataglove_processing/src/opticaldataglove/srv/_Stop.py 1970-01-01 00:00:00 +0000 |
4909 | +++ shadow_robot/dataglove/dataglove_processing/src/opticaldataglove/srv/_Stop.py 2010-11-03 16:17:45 +0000 |
4910 | @@ -0,0 +1,199 @@ |
4911 | +"""autogenerated by genmsg_py from StopRequest.msg. Do not edit.""" |
4912 | +import roslib.message |
4913 | +import struct |
4914 | + |
4915 | + |
4916 | +class StopRequest(roslib.message.Message): |
4917 | + _md5sum = "d41d8cd98f00b204e9800998ecf8427e" |
4918 | + _type = "opticaldataglove/StopRequest" |
4919 | + _has_header = False #flag to mark the presence of a Header object |
4920 | + _full_text = """ |
4921 | +""" |
4922 | + __slots__ = [] |
4923 | + _slot_types = [] |
4924 | + |
4925 | + def __init__(self, *args, **kwds): |
4926 | + """ |
4927 | + Constructor. Any message fields that are implicitly/explicitly |
4928 | + set to None will be assigned a default value. The recommend |
4929 | + use is keyword arguments as this is more robust to future message |
4930 | + changes. You cannot mix in-order arguments and keyword arguments. |
4931 | + |
4932 | + The available fields are: |
4933 | + |
4934 | + |
4935 | + @param args: complete set of field values, in .msg order |
4936 | + @param kwds: use keyword arguments corresponding to message field names |
4937 | + to set specific fields. |
4938 | + """ |
4939 | + if args or kwds: |
4940 | + super(StopRequest, self).__init__(*args, **kwds) |
4941 | + |
4942 | + def _get_types(self): |
4943 | + """ |
4944 | + internal API method |
4945 | + """ |
4946 | + return self._slot_types |
4947 | + |
4948 | + def serialize(self, buff): |
4949 | + """ |
4950 | + serialize message into buffer |
4951 | + @param buff: buffer |
4952 | + @type buff: StringIO |
4953 | + """ |
4954 | + try: |
4955 | + pass |
4956 | + except struct.error, se: self._check_types(se) |
4957 | + except TypeError, te: self._check_types(te) |
4958 | + |
4959 | + def deserialize(self, str): |
4960 | + """ |
4961 | + unpack serialized message in str into this message instance |
4962 | + @param str: byte array of serialized message |
4963 | + @type str: str |
4964 | + """ |
4965 | + try: |
4966 | + end = 0 |
4967 | + return self |
4968 | + except struct.error, e: |
4969 | + raise roslib.message.DeserializationError(e) #most likely buffer underfill |
4970 | + |
4971 | + |
4972 | + def serialize_numpy(self, buff, numpy): |
4973 | + """ |
4974 | + serialize message with numpy array types into buffer |
4975 | + @param buff: buffer |
4976 | + @type buff: StringIO |
4977 | + @param numpy: numpy python module |
4978 | + @type numpy module |
4979 | + """ |
4980 | + try: |
4981 | + pass |
4982 | + except struct.error, se: self._check_types(se) |
4983 | + except TypeError, te: self._check_types(te) |
4984 | + |
4985 | + def deserialize_numpy(self, str, numpy): |
4986 | + """ |
4987 | + unpack serialized message in str into this message instance using numpy for array types |
4988 | + @param str: byte array of serialized message |
4989 | + @type str: str |
4990 | + @param numpy: numpy python module |
4991 | + @type numpy: module |
4992 | + """ |
4993 | + try: |
4994 | + end = 0 |
4995 | + return self |
4996 | + except struct.error, e: |
4997 | + raise roslib.message.DeserializationError(e) #most likely buffer underfill |
4998 | + |
4999 | +_struct_I = roslib.message.struct_I |
5000 | +"""autogenerated by genmsg_py from StopResponse.msg. Do not edit.""" |
The diff has been truncated for viewing.