├── Chapter_9_code ├── hsv_mask.png ├── kinect2_viewer_green_ball.png ├── crazyflie_autonomous │ ├── meshes │ │ ├── kinect.jpg │ │ └── kinect.tga │ ├── config │ │ └── crazyflie2.yaml │ ├── launch │ │ ├── control_crazyflie.launch │ │ ├── hover_kinectv2.launch │ │ └── crazyflie_kinect.rviz │ ├── package.xml │ ├── scripts │ │ ├── watcher.py │ │ ├── pid.py │ │ ├── detect_crazyflie.py │ │ ├── detect_target.py │ │ └── control_crazyflie.py │ ├── urdf │ │ ├── kinect.urdf │ │ └── kinect.urdf.xacro │ └── CMakeLists.txt └── view_mask.py ├── Chapter_5_code └── ros_robotics │ ├── meshes │ ├── l_finger_color.tif │ ├── l_finger_tip_color.tif │ └── l_finger_tip.dae │ ├── CMakeLists.txt │ ├── worlds │ └── rrbot.world │ ├── launch │ ├── rrbot_rviz.launch │ ├── rrbot_control.launch │ └── rrbot_gazebo.launch │ ├── package.xml │ ├── urdf │ ├── materials.xacro │ ├── rrbot.gazebo │ ├── rrbot.xacro │ ├── rrbot2.xacro │ ├── gripper.xacro │ ├── rrbot3.xacro │ └── rrbot4.xacro │ ├── config │ └── rrbot_control.yaml │ └── urdf.rviz ├── Chapter_6_code ├── PillarTable.scene ├── home_arms_zero.py └── home_arms.py ├── Chapter_2_code └── ros_robotics │ ├── urdf │ ├── dd_robot.urdf │ ├── dd_robot2.urdf │ ├── dd_robot3.urdf │ ├── dd_robot4.urdf │ ├── dd_robot5.urdf │ ├── dd_robot6.urdf │ └── dd_robot.gazebo │ ├── worlds │ └── ddrobot.world │ ├── launch │ ├── ddrobot_gazebo.launch │ └── ddrobot_rviz.launch │ ├── package.xml │ ├── urdf.rviz │ └── CMakeLists.txt ├── Chapter_8_code ├── Turtlesim_joy_code │ ├── turtlesim_teleop.launch │ ├── move_circle.py │ └── turtlesim_joy.py └── Arduino_ultrasound_code │ └── ultrasound_sr04 │ └── ultrasound_sr04.ino ├── LICENSE ├── Chapter_3_code └── ControlTurtleBot.py.py └── README.md /Chapter_9_code/hsv_mask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/ROS-Robotics-By-Example/HEAD/Chapter_9_code/hsv_mask.png -------------------------------------------------------------------------------- /Chapter_9_code/kinect2_viewer_green_ball.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/ROS-Robotics-By-Example/HEAD/Chapter_9_code/kinect2_viewer_green_ball.png -------------------------------------------------------------------------------- /Chapter_5_code/ros_robotics/meshes/l_finger_color.tif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/ROS-Robotics-By-Example/HEAD/Chapter_5_code/ros_robotics/meshes/l_finger_color.tif -------------------------------------------------------------------------------- /Chapter_9_code/crazyflie_autonomous/meshes/kinect.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/ROS-Robotics-By-Example/HEAD/Chapter_9_code/crazyflie_autonomous/meshes/kinect.jpg -------------------------------------------------------------------------------- /Chapter_9_code/crazyflie_autonomous/meshes/kinect.tga: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/ROS-Robotics-By-Example/HEAD/Chapter_9_code/crazyflie_autonomous/meshes/kinect.tga -------------------------------------------------------------------------------- /Chapter_5_code/ros_robotics/meshes/l_finger_tip_color.tif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/ROS-Robotics-By-Example/HEAD/Chapter_5_code/ros_robotics/meshes/l_finger_tip_color.tif -------------------------------------------------------------------------------- /Chapter_6_code/PillarTable.scene: -------------------------------------------------------------------------------- 1 | (noname)+ 2 | * pillar 3 | 1 4 | box 5 | 0.308 0.13056 0.6528 6 | 0.7 -0.01 0.03 7 | 0.0108439 0.706876 0.0103685 0.707178 8 | 0 0 0 0 9 | * tabletop 10 | 1 11 | box 12 | 0.7 1.3 0.02 13 | 0.7 0.04 -0.13 14 | 0 0 0 1 15 | 0.705882 0.705882 0.705882 1 16 | . 17 | -------------------------------------------------------------------------------- /Chapter_2_code/ros_robotics/urdf/dd_robot.urdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Chapter_8_code/Turtlesim_joy_code/turtlesim_teleop.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /Chapter_5_code/ros_robotics/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.3) 2 | project(ros_robotics) 3 | 4 | find_package(catkin REQUIRED) 5 | catkin_package() 6 | 7 | ## Install ## 8 | 9 | foreach(dir config launch meshes urdf worlds) 10 | install(DIRECTORY ${dir}/ 11 | DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/${dir}) 12 | endforeach(dir) 13 | 14 | install( 15 | FILES urdf.rviz 16 | DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}) 17 | 18 | -------------------------------------------------------------------------------- /Chapter_9_code/view_mask.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import cv2 3 | import numpy 4 | 5 | # read png image and convert the image to HSV 6 | image = cv2.imread("/home/fairchildc/Desktop/mission_scene.png", cv2.CV_LOAD_IMAGE_COLOR) 7 | hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) 8 | 9 | # find green objects in the image 10 | lower_green = numpy.array([45, 110, 75], numpy.uint8) 11 | upper_green = numpy.array([65, 210, 255], numpy.uint8) 12 | mask = cv2.inRange(hsv, lower_green, upper_green) 13 | 14 | cv2.imwrite("hsv_mask2.png", mask) 15 | 16 | -------------------------------------------------------------------------------- /Chapter_2_code/ros_robotics/worlds/ddrobot.world: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | model://ground_plane 6 | 7 | 8 | model://sun 9 | 10 | 11 | model://construction_cone 12 | construction_cone 13 | -3.0 0 0 0 0 0 14 | 15 | 16 | model://construction_cone 17 | construction_cone 18 | 3.0 0 0 0 0 0 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /Chapter_5_code/ros_robotics/worlds/rrbot.world: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | model://ground_plane 8 | 9 | 10 | 11 | 12 | model://sun 13 | 14 | 15 | 16 | 17 | 18 | 5.927360 -5.376610 4.240080 0.000000 0.275643 2.356190 19 | orbit 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Chapter_9_code/crazyflie_autonomous/config/crazyflie2.yaml: -------------------------------------------------------------------------------- 1 | PIDs: 2 | X: 3 | kp: 0.2 4 | kd: 0.1 5 | ki: 0.01 6 | minOutput: -2.0 7 | maxOutput: 4.0 8 | integratorMin: -0.1 9 | integratorMax: 0.1 10 | Y: 11 | kp: -40.0 12 | kd: -4.0 13 | ki: -2.0 14 | minOutput: -2.0 15 | maxOutput: 1.0 16 | integratorMin: -0.1 17 | integratorMax: 0.1 18 | Z: 19 | kp: 5.0 20 | kd: 0.1 21 | ki: 20.0 22 | minOutput: 20000.0 23 | maxOutput: 45000.0 24 | integratorMin: -1000.0 25 | integratorMax: 2000.0 26 | Yaw: 27 | kp: -200.0 28 | kd: -20.0 29 | ki: 0.0 30 | minOutput: -200.0 31 | maxOutput: 200.0 32 | integratorMin: 0.0 33 | integratorMax: 0.0 34 | -------------------------------------------------------------------------------- /Chapter_9_code/crazyflie_autonomous/launch/control_crazyflie.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /Chapter_5_code/ros_robotics/launch/rrbot_rviz.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /Chapter_5_code/ros_robotics/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | ros_robotics 4 | 0.1.0 5 | 6 | The ros_robotics package contains URDF examples for a 2-wheeled robot, dd_robot 7 | and a robot arm, rrbot. 8 | 9 | 10 | Carol Fairchild 11 | Carol Fairchild 12 | 13 | BSD 14 | 15 | catkin 16 | 17 | controller_manager 18 | gazebo_ros 19 | joint_state_publisher 20 | robot_state_publisher 21 | rviz 22 | xacro 23 | 24 | -------------------------------------------------------------------------------- /Chapter_2_code/ros_robotics/launch/ddrobot_gazebo.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /Chapter_2_code/ros_robotics/launch/ddrobot_rviz.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /Chapter_5_code/ros_robotics/urdf/materials.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /Chapter_5_code/ros_robotics/launch/rrbot_control.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 13 | 14 | 15 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /Chapter_5_code/ros_robotics/config/rrbot_control.yaml: -------------------------------------------------------------------------------- 1 | rrbot: 2 | # Publish all joint states ----------------------------------- 3 | joint_state_controller: 4 | type: joint_state_controller/JointStateController 5 | publish_rate: 50 6 | 7 | # Position Controllers --------------------------------------- 8 | joint_base_mid_position_controller: 9 | type: effort_controllers/JointPositionController 10 | joint: joint_base_mid 11 | pid: {p: 100.0, i: 0.01, d: 10.0} 12 | joint_mid_top_position_controller: 13 | type: effort_controllers/JointPositionController 14 | joint: joint_mid_top 15 | pid: {p: 100.0, i: 0.01, d: 10.0} 16 | left_gripper_joint_position_controller: 17 | type: effort_controllers/JointPositionController 18 | joint: left_gripper_joint 19 | pid: {p: 1.0, i: 0.00, d: 0.0} 20 | right_gripper_joint_position_controller: 21 | type: effort_controllers/JointPositionController 22 | joint: right_gripper_joint 23 | pid: {p: 1.0, i: 0.00, d: 0.0} 24 | -------------------------------------------------------------------------------- /Chapter_8_code/Turtlesim_joy_code/move_circle.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | """ 3 | Script to move Turtlesim in a circle 4 | """ 5 | import rospy 6 | from geometry_msgs.msg import Twist 7 | 8 | def move_circle(): 9 | 10 | # Create a publisher which can "talk" to Turtlesim and tell it to move 11 | pub = rospy.Publisher('turtle1/cmd_vel', Twist, queue_size=1) 12 | 13 | # Create a Twist message and add linear x and angular z values 14 | move_cmd = Twist() 15 | move_cmd.linear.x = 1.0 16 | move_cmd.angular.z = 1.0 17 | 18 | # Save current time and set publish rate at 10 Hz 19 | now = rospy.Time.now() 20 | rate = rospy.Rate(10) 21 | 22 | # For the next 6 seconds publish cmd_vel move commands to Turtlesim 23 | while rospy.Time.now() < now + rospy.Duration.from_sec(6): 24 | pub.publish(move_cmd) 25 | rate.sleep() 26 | 27 | if __name__ == '__main__': 28 | try: 29 | move_circle() 30 | except rospy.ROSInterruptException: 31 | pass 32 | 33 | -------------------------------------------------------------------------------- /Chapter_5_code/ros_robotics/launch/rrbot_gazebo.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 18 | 19 | 20 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Chapter_6_code/home_arms_zero.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python # home_arms_zero.py 2 | # 3 | """ 4 | Script to return Baxter's arms to a "home zero" position 5 | """ 6 | # rospy - ROS Python API 7 | import rospy 8 | # baxter_interface - Baxter Python API 9 | import baxter_interface 10 | # initialize our ROS node, registering it with the Master 11 | rospy.init_node('Home_Arms') 12 | # create instances of baxter_interface's Limb class 13 | limb_right = baxter_interface.Limb('right') 14 | limb_left = baxter_interface.Limb('left') 15 | # store the home position of the arms 16 | home_zero_right = {'right_s0': 0.0, 'right_s1': 0.00, 'right_w0': 0.00, 'right_w1': 0.00, 'right_w2': 0.00, 'right_e0': 0.00, 'right_e1': 0.00} 17 | home_zero_left = {'left_s0': 0.0, 'left_s1': 0.00, 'left_w0': 0.00, 'left_w1': 0.00, 'left_w2': 0.00, 'left_e0': 0.00, 'left_e1': 0.00} 18 | # move both arms to home position 19 | limb_right.move_to_joint_positions(home_zero_right) 20 | limb_left.move_to_joint_positions(home_zero_left) 21 | quit() 22 | 23 | 24 | -------------------------------------------------------------------------------- /Chapter_6_code/home_arms.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | """ 4 | Script to return Baxter's arms to a "home" position 5 | """ 6 | 7 | # rospy - ROS Python API 8 | import rospy 9 | 10 | # baxter_interface - Baxter Python API 11 | import baxter_interface 12 | 13 | # initialize our ROS node, registering it with the Master 14 | rospy.init_node('Home_Arms') 15 | 16 | # create instances of baxter_interface's Limb class 17 | limb_right = baxter_interface.Limb('right') 18 | limb_left = baxter_interface.Limb('left') 19 | 20 | # store the home position of the arms 21 | home_right = {'right_s0': 0.08, 'right_s1': -1.00, 'right_w0': -0.67, 'right_w1': 1.03, 'right_w2': 0.50, 'right_e0': 1.18, 'right_e1': 1.94} 22 | home_left = {'left_s0': -0.08, 'left_s1': -1.00, 'left_w0': 0.67, 'left_w1': 1.03, 'left_w2': -0.50, 'left_e0': -1.18, 'left_e1': 1.94} 23 | 24 | # move both arms to home position 25 | limb_right.move_to_joint_positions(home_right) 26 | limb_left.move_to_joint_positions(home_left) 27 | 28 | quit() 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 Packt 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Chapter_5_code/ros_robotics/urdf/rrbot.gazebo: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | /rrbot 8 | gazebo_ros_control/DefaultRobotHWSim 9 | 10 | 11 | 12 | 13 | 14 | Gazebo/Red 15 | 16 | 17 | 18 | 19 | 0.2 20 | 0.2 21 | Gazebo/Green 22 | 23 | 24 | 25 | 26 | 0.2 27 | 0.2 28 | Gazebo/Blue 29 | 30 | 31 | 32 | 33 | 0.2 34 | 0.2 35 | 36 | 37 | 38 | 0.2 39 | 0.2 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /Chapter_2_code/ros_robotics/urdf/dd_robot2.urdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /Chapter_9_code/crazyflie_autonomous/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | crazyflie_autonomous 4 | 0.1.0 5 | 6 | The crazyflie_autonomous package contains launch files and scripts to detect 7 | the crazyflie with a Kinect v2 sensor and control the quadrotor to a target 8 | destination. 9 | 10 | 11 | Carol Fairchild 12 | Carol Fairchild 13 | 14 | BSD 15 | 16 | catkin 17 | 18 | crazyflie_driver 19 | crazyflie_demo 20 | kinect2_bridge 21 | joy 22 | rospy 23 | sys 24 | 26 | cv_bridge 27 | geometry_msgs 28 | sensor_msgs 29 | std_msgs 30 | std_srvs 31 | roslib 32 | tf 33 | xacro 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /Chapter_8_code/Turtlesim_joy_code/turtlesim_joy.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | """ 4 | Node converts joystick inputs into commands for Turtlesim 5 | """ 6 | 7 | import rospy 8 | from geometry_msgs.msg import Twist 9 | from sensor_msgs.msg import Joy 10 | from move_circle import move_circle 11 | 12 | def joy_listener(): 13 | 14 | # start node 15 | rospy.init_node("turtlesim_joy", anonymous=True) 16 | 17 | # subscribe to joystick messages on topic "joy" 18 | rospy.Subscriber("joy", Joy, tj_callback, queue_size=1) 19 | 20 | # keep node alive until stopped 21 | rospy.spin() 22 | 23 | # called when joy message is received 24 | def tj_callback(data): 25 | 26 | # start publisher of cmd_vel to control Turtlesim 27 | pub = rospy.Publisher("turtle1/cmd_vel", Twist, queue_size=1) 28 | 29 | # Create Twist message & add linear x and angular z from left joystick 30 | twist = Twist() 31 | twist.linear.x = data.axes[1] 32 | twist.angular.z = data.axes[0] 33 | 34 | # record values to log file and screen 35 | rospy.loginfo("twist.linear: %f ; angular %f", twist.linear.x, twist.angular.z) 36 | 37 | # process joystick buttons 38 | if data.buttons[0] == 1: # green button on xbox controller 39 | move_circle() 40 | 41 | # publish cmd_vel move command to Turtlesim 42 | pub.publish(twist) 43 | 44 | if __name__ == '__main__': 45 | try: 46 | joy_listener() 47 | except rospy.ROSInterruptException: 48 | pass 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /Chapter_2_code/ros_robotics/urdf/dd_robot3.urdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /Chapter_2_code/ros_robotics/urdf/dd_robot4.urdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /Chapter_9_code/crazyflie_autonomous/launch/hover_kinectv2.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /Chapter_2_code/ros_robotics/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | ros_robotics 4 | 0.0.0 5 | The ros_robotics package 6 | 7 | 8 | 9 | 10 | fairchildc 11 | 12 | 13 | 14 | 15 | 16 | TODO 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | catkin 43 | 44 | gazebo_ros 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /Chapter_3_code/ControlTurtleBot.py.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # Execute as a python script 3 | # Set linear and angular values of TurtleBot's speed and turning. 4 | import rospy # Needed to create a ROS node 5 | from geometry_msgs.msg import Twist # Message that moves base 6 | 7 | class ControlTurtleBot(): 8 | def __init__(self): 9 | # ControlTurtleBot is the name of the node sent to the master 10 | rospy.init_node('ControlTurtleBot', anonymous=False) 11 | 12 | # Message to screen 13 | rospy.loginfo(" Press CTRL+c to stop TurtleBot") 14 | 15 | # Keys CNTL + c will stop script 16 | rospy.on_shutdown(self.shutdown) 17 | 18 | #Publisher will send Twist message on topic cmd_vel_mux/input/navi 19 | 20 | self.cmd_vel = rospy.Publisher('cmd_vel_mux/input/navi', Twist, queue_size=10) 21 | 22 | # TurtleBot will receive the message 10 times per second. 23 | rate = rospy.Rate(10); 24 | # 10 Hz is fine as long as the processing does not exceed 1/10 second. 25 | 26 | # Twist is a type of geometry_msgs for linear and angular velocity 27 | move_cmd = Twist() 28 | # Linear speed in x in meters/second is + (forward) or - (backwards) 29 | move_cmd.linear.x = 0.3 # Modify this value to change speed 30 | # let's turn at 0 radians/s 31 | move_cmd.angular.z = 0 # Modify this value to cause rotation rad/s 32 | 33 | # Loop and TurtleBot will move until you type CNTL+c 34 | while not rospy.is_shutdown(): 35 | # publish the Twist values to the TurtleBot node /cmd_vel_mux 36 | self.cmd_vel.publish(move_cmd) 37 | # wait for 0.1 seconds (10 HZ) and publish again 38 | rate.sleep() 39 | 40 | 41 | def shutdown(self): 42 | # You can stop turtlebot by publishing an empty Twist message 43 | rospy.loginfo("Stopping TurtleBot") 44 | # 45 | self.cmd_vel.publish(Twist()) 46 | # Give TurtleBot time to stop 47 | rospy.sleep(1) 48 | 49 | if __name__ == '__main__': 50 | try: 51 | ControlTurtleBot() 52 | except: 53 | rospy.loginfo("End of the trip for TurtleBot") 54 | 55 | -------------------------------------------------------------------------------- /Chapter_8_code/Arduino_ultrasound_code/ultrasound_sr04/ultrasound_sr04.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * rosserial Ultrasound Example for HC-SR04 3 | */ 4 | 5 | #include 6 | #include 7 | #include 8 | 9 | const int echoPin = 5; //Echo pin 10 | const int trigPin = 6; //Trigger pin 11 | 12 | const int maxRange = 400.0; //Maximum range in centimeters 13 | const int minRange = 0.0; //Minimum range 14 | 15 | unsigned long range_timer; //Used to measure 50 ms interval 16 | 17 | // instantiate node handle and publisher for 18 | // a sensor_msgs/Range message (topic name is /ultrasound) 19 | ros::NodeHandle nh; 20 | sensor_msgs::Range range_msg; 21 | ros::Publisher pub_range( "ultrasound", &range_msg); 22 | 23 | /* 24 | * getRange() - This function reads the time duration of the echo 25 | * and converts it to centimeters. 26 | */ 27 | float getRange(){ 28 | int sample; //Holds time in microseconds 29 | 30 | // Trigger pin goes low then high for 10 us then low 31 | // to initiate the ultrasonic burst 32 | digitalWrite(trigPin, LOW); 33 | delayMicroseconds(2); 34 | 35 | digitalWrite(trigPin, HIGH); 36 | delayMicroseconds(10); 37 | digitalWrite(trigPin, LOW); 38 | 39 | // read pulse length in microseconds on the Echo pin 40 | sample = pulseIn(echoPin, HIGH); 41 | 42 | // sample in microseconds converted to centimeters 43 | // 343 m/s speed of sound; time divided by 2 44 | return sample/58.3; 45 | } 46 | 47 | char frameid[] = "/ultrasound"; // global frame id string 48 | 49 | void setup() 50 | { 51 | // initialize the node and message publisher 52 | nh.initNode(); 53 | nh.advertise(pub_range); 54 | 55 | // fill the description fields in the range_msg 56 | range_msg.radiation_type = sensor_msgs::Range::ULTRASOUND; 57 | range_msg.header.frame_id = frameid; 58 | range_msg.field_of_view = 0.26; 59 | range_msg.min_range = minRange; 60 | range_msg.max_range = maxRange; 61 | 62 | // set the digital I/O pin modes 63 | pinMode(echoPin, INPUT); 64 | pinMode(trigPin, OUTPUT); 65 | } 66 | 67 | void loop() 68 | { 69 | // sample the range data from the ultrasound sensor and 70 | // publish the range value once every 50 milliseconds 71 | if ( (millis()-range_timer) > 50){ 72 | range_msg.range = getRange(); 73 | range_msg.header.stamp = nh.now(); 74 | pub_range.publish(&range_msg); 75 | range_timer = millis() + 50; 76 | } 77 | nh.spinOnce(); 78 | } 79 | 80 | -------------------------------------------------------------------------------- /Chapter_2_code/ros_robotics/urdf/dd_robot5.urdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /Chapter_9_code/crazyflie_autonomous/scripts/watcher.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import rospy 4 | import tf 5 | from std_srvs.srv import Empty 6 | 7 | """ Watcher for Crazyflie -- monitors the location of Crazyflie in the Kinect image """ 8 | """ and will send a service call to the land service if Crazyflie's location is within """ 9 | """ the outer boundary of the image """ 10 | 11 | if __name__ == '__main__': 12 | 13 | # initialize ROS node and tf frame info from parameter server, default parameters given 14 | rospy.init_node('window_watcher', anonymous=True) 15 | crazyflie_frame = rospy.get_param("~frame", "crazyflie/base_link") 16 | camera_frame = rospy.get_param("~cam_frame", "kinect2_ir_optical_frame") 17 | r = rospy.get_param("~rate", 10) # default rate is 10 Hz 18 | 19 | # subscribe to crazyflie tf 20 | listener = tf.TransformListener() 21 | 22 | # get camera info from parameter server 23 | camera_height = rospy.get_param('camera_height') # sd height is 424; qhd height is 540 24 | camera_width = rospy.get_param('camera_width') # sd width is 512; qhd width is 960 25 | 26 | # continue to process at the given rate until a shutdown request is received 27 | rate = rospy.Rate(r) 28 | while not rospy.is_shutdown(): 29 | 30 | # get the current transform between the camera_frame and the crazyflie_frame 31 | if listener.frameExists(camera_frame) and listener.frameExists(crazyflie_frame): 32 | t = listener.getLatestCommonTime(camera_frame, crazyflie_frame) 33 | trans, rotate = listener.lookupTransform(camera_frame, crazyflie_frame, t) 34 | rospy.loginfo("watcher: cf_trans %f %f %f", trans[0], trans[1], trans[2]) 35 | 36 | # check Crazyflie's x and y location with respect to the Kinect image -- 37 | # if Crazyflie is within 100 pixels of the image's horizontal edges (x) 38 | # or if it is with in 20 pixels of the image's vertical edges (y) 39 | if (trans[0] < 100) or (trans[0] > (camera_width - 100)) or \ 40 | (trans[1] < 20) or (trans[1] > (camera_height - 20)): 41 | 42 | # wait until land service is available, then create a handle for it 43 | rospy.loginfo("Crazyflie outside of window %f %f %f", trans[0], trans[1], trans[2]) 44 | rospy.loginfo("Landing requested") 45 | rospy.wait_for_service('/crazyflie/land') 46 | 47 | # request the land service 48 | try: 49 | _land = rospy.ServiceProxy('/crazyflie/land', Empty) 50 | _land() 51 | except rospy.ServiceException, e: 52 | rospy.loginfo("Service call failed: %s", e) 53 | 54 | # suspend until next cycle 55 | rate.sleep() 56 | -------------------------------------------------------------------------------- /Chapter_9_code/crazyflie_autonomous/urdf/kinect.urdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 50 | 53 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /Chapter_9_code/crazyflie_autonomous/urdf/kinect.urdf.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 51 | 52 | 53 | 60 | 63 | 77 | 78 | -------------------------------------------------------------------------------- /Chapter_2_code/ros_robotics/urdf/dd_robot6.urdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | -------------------------------------------------------------------------------- /Chapter_9_code/crazyflie_autonomous/scripts/pid.py: -------------------------------------------------------------------------------- 1 | import rospy # use Time 2 | 3 | class PID (object): 4 | 5 | """This class treats controllers created to have PID control on a system.""" 6 | 7 | # initialization of flight PID controller 8 | def __init__(self, kp, kd, ki, minOutput, maxOutput, integratorMin, integratorMax): 9 | 10 | self.m_kp = kp # weight of proportional control 11 | self.m_kd = kd # weight of derivative control 12 | self.m_ki = ki # weight of integral control 13 | self.m_minOutput = minOutput # largest output from controller 14 | self.m_maxOutput = maxOutput # smallest output from controller 15 | self.m_integratorMin = integratorMin # maximum integral value 16 | self.m_integratorMax = integratorMax # minimum integral value 17 | 18 | # initial variable values 19 | self.m_integral = 0 20 | self.m_previousError = 0 21 | self.m_previousTime = float(rospy.Time.to_sec(rospy.Time.now())) 22 | 23 | # reset of essential PID parameters 24 | def reset (self): 25 | self.m_integral = 0 26 | self.m_previousError = 0 27 | self.m_previousTime = float(rospy.Time.to_sec(rospy.Time.now())) 28 | 29 | # sets (or resets) the integral value of the PID controller 30 | def setIntegral (self, integral): 31 | self.m_integral = integral 32 | 33 | # returns the value of ki 34 | def set_ki (self): 35 | return self.m_ki 36 | 37 | # applies proportional, derivative, and integral control to determine optimal control value 38 | def update (self, value, targetValue): 39 | 40 | # record current value and target value and find current time 41 | rospy.loginfo("values are %f and %f", value, targetValue) 42 | time = float(rospy.Time.to_sec(rospy.Time.now())) 43 | 44 | # delta time is the time since the last update 45 | dt = time - self.m_previousTime 46 | 47 | # error is the difference between the current value and the target value 48 | error = targetValue - value 49 | 50 | # determine the integral value based on the delta time and current error 51 | self.m_integral += error * dt 52 | 53 | # assure that integral is within the max and min otherwise use the central value (max or min) 54 | self.m_integral = max(min(self.m_integral, self.m_integratorMax), self.m_integratorMin) 55 | rospy.loginfo("dt is %f, error is %f and m_integral is %f", dt, error, self.m_integral) 56 | 57 | # calculate proportional based on kp and current error 58 | p = self.m_kp * error 59 | 60 | # calculate derivative based on kd and the differenced in the current error and the last error 61 | # and divide by delta time (check is made that delta time is not zero to prevent divide by 0) 62 | d = 0 63 | if dt > 0: 64 | d = self.m_kd * (error - self.m_previousError) / dt 65 | 66 | # calculate integral based on ki and integral value of PID controller 67 | i = self.m_ki * self.m_integral 68 | 69 | # sum the proportional, derivative and integral to obtain controller output value 70 | output = p + d + i 71 | rospy.loginfo("P is %f, D is %f, I is %f", p, d, i) 72 | 73 | # save current error and time for the next cycle 74 | self.m_previousError = error 75 | self.m_previousTime = time 76 | 77 | # assure that output value is within the max and min otherwise use the central value (max or min) 78 | return max(min(output, self.m_maxOutput), self.m_minOutput) 79 | 80 | -------------------------------------------------------------------------------- /Chapter_2_code/ros_robotics/urdf/dd_robot.gazebo: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | Gazebo/Blue 47 | 0 0 3 0 0 0 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | Gazebo/Black 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | Gazebo/Black 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /Chapter_5_code/ros_robotics/urdf/rrbot.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 108 | 109 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /Chapter_5_code/ros_robotics/urdf/rrbot2.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | -------------------------------------------------------------------------------- /Chapter_5_code/ros_robotics/urdf/gripper.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | transmission_interface/SimpleTransmission 97 | 98 | EffortJointInterface 99 | 100 | 101 | EffortJointInterface 102 | 1 103 | 104 | 105 | 106 | 107 | transmission_interface/SimpleTransmission 108 | 109 | EffortJointInterface 110 | 111 | 112 | EffortJointInterface 113 | 1 114 | 115 | 116 | 117 | 118 | -------------------------------------------------------------------------------- /Chapter_5_code/ros_robotics/urdf/rrbot3.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | # ROS Robotics By Example 5 | This is the code repository for [ROS Robotics By Example](https://www.packtpub.com/hardware-and-creative/ros-robotics-example?utm_source=github&utm_medium=repository&utm_campaign=9781782175193), published by [Packt](https://www.packtpub.com/?utm_source=github). It contains all the supporting project files necessary to work through the book from start to finish. 6 | ## About the Book 7 | Unity is one of the biggest game engines in the world, providing the user with a range of important tools that they need to bring their ideas into reality. Beginner game developers are optimistic, passionate, and ambitious, but that ambition can be dangerous! Too often, budding indie developers and hobbyists bite off more than they can chew. Games like Angry Birds, Cut the Rope, and Fruit Ninja are fun, simple games that have delighted players and delivered big profits to their creators. This is the perfect climate for new game developers to succeed by creating simple games with Unity, starting today. 8 | 9 | 10 | ## Instructions and Navigation 11 | All of the code is organized into folders. Each folder starts with a number followed by the application name. For example, Chapter02. 12 | 13 | 14 | 15 | The code will look like the following: 16 | ``` 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | ``` 30 | 31 | The format of this book is intended for you to follow along and perform the 32 | instructions as the information is provided. You will need a computer with Ubuntu 33 | 14.04 (Trusty Tahr) installed. Other Ubuntu versions and Linux distributions 34 | may work as well as Mac OS X, Android, and Windows but documentation for 35 | these versions will need to reference the ROS wiki (http://wiki.ros.org/ 36 | Distributions). 37 | The version of ROS that this book was written around is Indigo Igloo, which is the 38 | current release recommended for stability. Its end of life is targeted for April 2019. 39 | Other versions of ROS may be used but are untested. 40 | All the software used in this book is open source and freely available for download 41 | and use. Instructions to download the software are found in the chapter where the 42 | software is introduced. In Chapter 1, Getting Started with ROS, instructions are given 43 | to download and set up the ROS software environment. 44 | Our preferred method to download software is the use of Debian packages. Where 45 | no Debian packages exist, we refer to downloading the software from repositories 46 | such as GitHub. 47 | Gazebo simulation performs intensive graphics processing and the use of a dedicated 48 | graphics card is advised but not required. 49 | Peripheral devices such as 3D sensors, Xbox, or PS3 controllers, Arduino or 50 | Raspberry Pi controller boards, and Android mobile devices are optional equipment. 51 | 52 | ## Related Products 53 | * [iOS Game Development By Example](https://www.packtpub.com/game-development/ios-game-development-example?utm_source=github&utm_medium=repository&utm_campaign=9781785284694) 54 | 55 | * [HTML5 Game Development by Example: Beginner's Guide - Second Edition](https://www.packtpub.com/game-development/html5-game-development-example-beginners-guide-second-edition?utm_source=github&utm_medium=repository&utm_campaign=9781785287770) 56 | 57 | * [Unity 4.x Game Development by Example: Beginner's Guide](https://www.packtpub.com/game-development/unity-4x-game-development-example-beginners-guide?utm_source=github&utm_medium=repository&utm_campaign=9781849695268) 58 | 59 | ### Suggestions and Feedback 60 | [Click here](https://docs.google.com/forms/d/e/1FAIpQLSe5qwunkGf6PUvzPirPDtuy1Du5Rlzew23UBp2S-P3wB-GcwQ/viewform) if you have any feedback or suggestions. 61 | ### Download a free PDF 62 | 63 | If you have already purchased a print or Kindle version of this book, you can get a DRM-free PDF version at no cost.
Simply click on the link to claim your free PDF.
64 |

https://packt.link/free-ebook/9781782175193

-------------------------------------------------------------------------------- /Chapter_2_code/ros_robotics/urdf.rviz: -------------------------------------------------------------------------------- 1 | Panels: 2 | - Class: rviz/Displays 3 | Help Height: 78 4 | Name: Displays 5 | Property Tree Widget: 6 | Expanded: ~ 7 | Splitter Ratio: 0.807309 8 | Tree Height: 562 9 | - Class: rviz/Selection 10 | Name: Selection 11 | - Class: rviz/Tool Properties 12 | Expanded: 13 | - /2D Pose Estimate1 14 | - /2D Nav Goal1 15 | - /Publish Point1 16 | Name: Tool Properties 17 | Splitter Ratio: 0.588679 18 | - Class: rviz/Views 19 | Expanded: 20 | - /Current View1 21 | Name: Views 22 | Splitter Ratio: 0.5 23 | - Class: rviz/Time 24 | Experimental: false 25 | Name: Time 26 | SyncMode: 0 27 | SyncSource: "" 28 | Visualization Manager: 29 | Class: "" 30 | Displays: 31 | - Alpha: 0.5 32 | Cell Size: 1 33 | Class: rviz/Grid 34 | Color: 0; 0; 0 35 | Enabled: true 36 | Line Style: 37 | Line Width: 0.03 38 | Value: Lines 39 | Name: Grid 40 | Normal Cell Count: 0 41 | Offset: 42 | X: 0 43 | Y: 0 44 | Z: 0 45 | Plane: XY 46 | Plane Cell Count: 10 47 | Reference Frame: 48 | Value: true 49 | - Alpha: 1 50 | Class: rviz/RobotModel 51 | Collision Enabled: false 52 | Enabled: true 53 | Links: 54 | All Links Enabled: true 55 | Expand Joint Details: false 56 | Expand Link Details: false 57 | Expand Tree: false 58 | Link Tree Style: Links in Alphabetic Order 59 | base_link: 60 | Alpha: 1 61 | Show Axes: false 62 | Show Trail: false 63 | Value: true 64 | Name: RobotModel 65 | Robot Description: robot_description 66 | TF Prefix: "" 67 | Update Interval: 0 68 | Value: true 69 | Visual Enabled: true 70 | - Class: rviz/TF 71 | Enabled: true 72 | Frame Timeout: 15 73 | Frames: 74 | All Enabled: true 75 | Marker Scale: 1 76 | Name: TF 77 | Show Arrows: true 78 | Show Axes: true 79 | Show Names: true 80 | Tree: 81 | {} 82 | Update Interval: 0 83 | Value: true 84 | Enabled: true 85 | Global Options: 86 | Background Color: 163; 163; 163 87 | Fixed Frame: base_link 88 | Frame Rate: 30 89 | Name: root 90 | Tools: 91 | - Class: rviz/Interact 92 | Hide Inactive Objects: true 93 | - Class: rviz/MoveCamera 94 | - Class: rviz/Select 95 | - Class: rviz/FocusCamera 96 | - Class: rviz/Measure 97 | - Class: rviz/SetInitialPose 98 | Topic: /initialpose 99 | - Class: rviz/SetGoal 100 | Topic: /move_base_simple/goal 101 | - Class: rviz/PublishPoint 102 | Single click: true 103 | Topic: /clicked_point 104 | Value: true 105 | Views: 106 | Current: 107 | Class: rviz/Orbit 108 | Distance: 3.18975 109 | Enable Stereo Rendering: 110 | Stereo Eye Separation: 0.06 111 | Stereo Focal Distance: 1 112 | Swap Stereo Eyes: false 113 | Value: false 114 | Focal Point: 115 | X: 0 116 | Y: 0 117 | Z: 0 118 | Name: Current View 119 | Near Clip Distance: 0.01 120 | Pitch: 0.455398 121 | Target Frame: 122 | Value: Orbit (rviz) 123 | Yaw: 0.885398 124 | Saved: ~ 125 | Window Geometry: 126 | Displays: 127 | collapsed: false 128 | Height: 801 129 | Hide Left Dock: false 130 | Hide Right Dock: false 131 | QMainWindow State: 000000ff00000000fd000000040000000000000134000002d2fc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c0061007900730100000028000002d2000000ee00fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f0000032cfc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a0056006900650077007300000000280000032c000000ca00fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004c00000003efc0100000002fb0000000800540069006d00650000000000000004c00000042500fffffffb0000000800540069006d00650100000000000004500000000000000000000002fe000002d200000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 132 | Selection: 133 | collapsed: false 134 | Time: 135 | collapsed: false 136 | Tool Properties: 137 | collapsed: false 138 | Views: 139 | collapsed: false 140 | Width: 1080 141 | X: 280 142 | Y: 178 143 | -------------------------------------------------------------------------------- /Chapter_5_code/ros_robotics/urdf.rviz: -------------------------------------------------------------------------------- 1 | Panels: 2 | - Class: rviz/Displays 3 | Help Height: 78 4 | Name: Displays 5 | Property Tree Widget: 6 | Expanded: ~ 7 | Splitter Ratio: 0.807309 8 | Tree Height: 562 9 | - Class: rviz/Selection 10 | Name: Selection 11 | - Class: rviz/Tool Properties 12 | Expanded: 13 | - /2D Pose Estimate1 14 | - /2D Nav Goal1 15 | - /Publish Point1 16 | Name: Tool Properties 17 | Splitter Ratio: 0.588679 18 | - Class: rviz/Views 19 | Expanded: 20 | - /Current View1 21 | Name: Views 22 | Splitter Ratio: 0.5 23 | - Class: rviz/Time 24 | Experimental: false 25 | Name: Time 26 | SyncMode: 0 27 | SyncSource: "" 28 | Visualization Manager: 29 | Class: "" 30 | Displays: 31 | - Alpha: 0.5 32 | Cell Size: 1 33 | Class: rviz/Grid 34 | Color: 0; 0; 0 35 | Enabled: true 36 | Line Style: 37 | Line Width: 0.03 38 | Value: Lines 39 | Name: Grid 40 | Normal Cell Count: 0 41 | Offset: 42 | X: 0 43 | Y: 0 44 | Z: 0 45 | Plane: XY 46 | Plane Cell Count: 10 47 | Reference Frame: 48 | Value: true 49 | - Alpha: 1 50 | Class: rviz/RobotModel 51 | Collision Enabled: false 52 | Enabled: true 53 | Links: 54 | All Links Enabled: true 55 | Expand Joint Details: false 56 | Expand Link Details: false 57 | Expand Tree: false 58 | Link Tree Style: Links in Alphabetic Order 59 | base_link: 60 | Alpha: 1 61 | Show Axes: false 62 | Show Trail: false 63 | Value: true 64 | Name: RobotModel 65 | Robot Description: robot_description 66 | TF Prefix: "" 67 | Update Interval: 0 68 | Value: true 69 | Visual Enabled: true 70 | - Class: rviz/TF 71 | Enabled: true 72 | Frame Timeout: 15 73 | Frames: 74 | All Enabled: true 75 | Marker Scale: 1 76 | Name: TF 77 | Show Arrows: true 78 | Show Axes: true 79 | Show Names: true 80 | Tree: 81 | {} 82 | Update Interval: 0 83 | Value: true 84 | Enabled: true 85 | Global Options: 86 | Background Color: 163; 163; 163 87 | Fixed Frame: base_link 88 | Frame Rate: 30 89 | Name: root 90 | Tools: 91 | - Class: rviz/Interact 92 | Hide Inactive Objects: true 93 | - Class: rviz/MoveCamera 94 | - Class: rviz/Select 95 | - Class: rviz/FocusCamera 96 | - Class: rviz/Measure 97 | - Class: rviz/SetInitialPose 98 | Topic: /initialpose 99 | - Class: rviz/SetGoal 100 | Topic: /move_base_simple/goal 101 | - Class: rviz/PublishPoint 102 | Single click: true 103 | Topic: /clicked_point 104 | Value: true 105 | Views: 106 | Current: 107 | Class: rviz/Orbit 108 | Distance: 3.18975 109 | Enable Stereo Rendering: 110 | Stereo Eye Separation: 0.06 111 | Stereo Focal Distance: 1 112 | Swap Stereo Eyes: false 113 | Value: false 114 | Focal Point: 115 | X: 0 116 | Y: 0 117 | Z: 0 118 | Name: Current View 119 | Near Clip Distance: 0.01 120 | Pitch: 0.455398 121 | Target Frame: 122 | Value: Orbit (rviz) 123 | Yaw: 0.885398 124 | Saved: ~ 125 | Window Geometry: 126 | Displays: 127 | collapsed: false 128 | Height: 801 129 | Hide Left Dock: false 130 | Hide Right Dock: false 131 | QMainWindow State: 000000ff00000000fd000000040000000000000134000002d2fc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c0061007900730100000028000002d2000000ee00fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f0000032cfc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a0056006900650077007300000000280000032c000000ca00fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004c00000003efc0100000002fb0000000800540069006d00650000000000000004c00000042500fffffffb0000000800540069006d00650100000000000004500000000000000000000002fe000002d200000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 132 | Selection: 133 | collapsed: false 134 | Time: 135 | collapsed: false 136 | Tool Properties: 137 | collapsed: false 138 | Views: 139 | collapsed: false 140 | Width: 1080 141 | X: 280 142 | Y: 178 143 | -------------------------------------------------------------------------------- /Chapter_5_code/ros_robotics/urdf/rrbot4.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | transmission_interface/SimpleTransmission 124 | 125 | EffortJointInterface 126 | 127 | 128 | EffortJointInterface 129 | 1 130 | 131 | 132 | 133 | 134 | transmission_interface/SimpleTransmission 135 | 136 | EffortJointInterface 137 | 138 | 139 | EffortJointInterface 140 | 1 141 | 142 | 143 | 144 | 145 | -------------------------------------------------------------------------------- /Chapter_2_code/ros_robotics/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.3) 2 | project(ros_robotics) 3 | 4 | ## Find catkin macros and libraries 5 | ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) 6 | ## is used, also find other catkin packages 7 | find_package(catkin REQUIRED) 8 | 9 | ## System dependencies are found with CMake's conventions 10 | # find_package(Boost REQUIRED COMPONENTS system) 11 | 12 | 13 | ## Uncomment this if the package has a setup.py. This macro ensures 14 | ## modules and global scripts declared therein get installed 15 | ## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html 16 | # catkin_python_setup() 17 | 18 | ################################################ 19 | ## Declare ROS messages, services and actions ## 20 | ################################################ 21 | 22 | ## To declare and build messages, services or actions from within this 23 | ## package, follow these steps: 24 | ## * Let MSG_DEP_SET be the set of packages whose message types you use in 25 | ## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). 26 | ## * In the file package.xml: 27 | ## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET 28 | ## * If MSG_DEP_SET isn't empty the following dependencies might have been 29 | ## pulled in transitively but can be declared for certainty nonetheless: 30 | ## * add a build_depend tag for "message_generation" 31 | ## * add a run_depend tag for "message_runtime" 32 | ## * In this file (CMakeLists.txt): 33 | ## * add "message_generation" and every package in MSG_DEP_SET to 34 | ## find_package(catkin REQUIRED COMPONENTS ...) 35 | ## * add "message_runtime" and every package in MSG_DEP_SET to 36 | ## catkin_package(CATKIN_DEPENDS ...) 37 | ## * uncomment the add_*_files sections below as needed 38 | ## and list every .msg/.srv/.action file to be processed 39 | ## * uncomment the generate_messages entry below 40 | ## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) 41 | 42 | ## Generate messages in the 'msg' folder 43 | # add_message_files( 44 | # FILES 45 | # Message1.msg 46 | # Message2.msg 47 | # ) 48 | 49 | ## Generate services in the 'srv' folder 50 | # add_service_files( 51 | # FILES 52 | # Service1.srv 53 | # Service2.srv 54 | # ) 55 | 56 | ## Generate actions in the 'action' folder 57 | # add_action_files( 58 | # FILES 59 | # Action1.action 60 | # Action2.action 61 | # ) 62 | 63 | ## Generate added messages and services with any dependencies listed here 64 | # generate_messages( 65 | # DEPENDENCIES 66 | # std_msgs # Or other packages containing msgs 67 | # ) 68 | 69 | ################################### 70 | ## catkin specific configuration ## 71 | ################################### 72 | ## The catkin_package macro generates cmake config files for your package 73 | ## Declare things to be passed to dependent projects 74 | ## INCLUDE_DIRS: uncomment this if you package contains header files 75 | ## LIBRARIES: libraries you create in this project that dependent projects also need 76 | ## CATKIN_DEPENDS: catkin_packages dependent projects also need 77 | ## DEPENDS: system dependencies of this project that dependent projects also need 78 | catkin_package( 79 | # INCLUDE_DIRS include 80 | # LIBRARIES ros_robotics 81 | # CATKIN_DEPENDS other_catkin_pkg 82 | # DEPENDS system_lib 83 | ) 84 | 85 | ########### 86 | ## Build ## 87 | ########### 88 | 89 | ## Specify additional locations of header files 90 | ## Your package locations should be listed before other locations 91 | # include_directories(include) 92 | 93 | ## Declare a cpp library 94 | # add_library(ros_robotics 95 | # src/${PROJECT_NAME}/ros_robotics.cpp 96 | # ) 97 | 98 | ## Declare a cpp executable 99 | # add_executable(ros_robotics_node src/ros_robotics_node.cpp) 100 | 101 | ## Add cmake target dependencies of the executable/library 102 | ## as an example, message headers may need to be generated before nodes 103 | # add_dependencies(ros_robotics_node ros_robotics_generate_messages_cpp) 104 | 105 | ## Specify libraries to link a library or executable target against 106 | # target_link_libraries(ros_robotics_node 107 | # ${catkin_LIBRARIES} 108 | # ) 109 | 110 | ############# 111 | ## Install ## 112 | ############# 113 | 114 | # all install targets should use catkin DESTINATION variables 115 | # See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html 116 | 117 | ## Mark executable scripts (Python etc.) for installation 118 | ## in contrast to setup.py, you can choose the destination 119 | # install(PROGRAMS 120 | # scripts/my_python_script 121 | # DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 122 | # ) 123 | 124 | ## Mark executables and/or libraries for installation 125 | # install(TARGETS ros_robotics ros_robotics_node 126 | # ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 127 | # LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 128 | # RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 129 | # ) 130 | 131 | ## Mark cpp header files for installation 132 | # install(DIRECTORY include/${PROJECT_NAME}/ 133 | # DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} 134 | # FILES_MATCHING PATTERN "*.h" 135 | # PATTERN ".svn" EXCLUDE 136 | # ) 137 | 138 | ## Mark other files for installation (e.g. launch and bag files, etc.) 139 | # install(FILES 140 | # # myfile1 141 | # # myfile2 142 | # DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 143 | # ) 144 | 145 | ############# 146 | ## Testing ## 147 | ############# 148 | 149 | ## Add gtest based cpp test target and link libraries 150 | # catkin_add_gtest(${PROJECT_NAME}-test test/test_ros_robotics.cpp) 151 | # if(TARGET ${PROJECT_NAME}-test) 152 | # target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) 153 | # endif() 154 | 155 | ## Add folders to be run by python nosetests 156 | # catkin_add_nosetests(test) 157 | -------------------------------------------------------------------------------- /Chapter_9_code/crazyflie_autonomous/launch/crazyflie_kinect.rviz: -------------------------------------------------------------------------------- 1 | Panels: 2 | - Class: rviz/Displays 3 | Help Height: 81 4 | Name: Displays 5 | Property Tree Widget: 6 | Expanded: 7 | - /Crazyflie1 8 | - /TF1 9 | - /TF1/Frames1 10 | - /Kinect v21 11 | - /Kinect v21/Status1 12 | Splitter Ratio: 0.617241 13 | Tree Height: 689 14 | - Class: rviz/Selection 15 | Name: Selection 16 | - Class: rviz/Tool Properties 17 | Expanded: 18 | - /2D Pose Estimate1 19 | - /2D Nav Goal1 20 | - /Publish Point1 21 | Name: Tool Properties 22 | Splitter Ratio: 0.588679 23 | - Class: rviz/Views 24 | Expanded: 25 | - /Current View1 26 | Name: Views 27 | Splitter Ratio: 0.5 28 | - Class: rviz/Time 29 | Experimental: false 30 | Name: Time 31 | SyncMode: 0 32 | SyncSource: "" 33 | Visualization Manager: 34 | Class: "" 35 | Displays: 36 | - Alpha: 0.5 37 | Cell Size: 1 38 | Class: rviz/Grid 39 | Color: 0; 0; 0 40 | Enabled: true 41 | Line Style: 42 | Line Width: 0.03 43 | Value: Lines 44 | Name: Grid 45 | Normal Cell Count: 0 46 | Offset: 47 | X: 0 48 | Y: 0 49 | Z: 0 50 | Plane: XY 51 | Plane Cell Count: 10 52 | Reference Frame: 53 | Value: true 54 | - Alpha: 1 55 | Class: rviz/RobotModel 56 | Collision Enabled: false 57 | Enabled: true 58 | Links: 59 | All Links Enabled: true 60 | Expand Joint Details: false 61 | Expand Link Details: false 62 | Expand Tree: false 63 | Link Tree Style: Links in Alphabetic Order 64 | base_link: 65 | Alpha: 1 66 | Show Axes: false 67 | Show Trail: false 68 | Value: true 69 | Name: Crazyflie 70 | Robot Description: crazyflie/robot_description 71 | TF Prefix: crazyflie 72 | Update Interval: 0 73 | Value: true 74 | Visual Enabled: true 75 | - Alpha: 0.5 76 | Axes Length: 1 77 | Axes Radius: 0.1 78 | Class: rviz/Pose 79 | Color: 255; 25; 0 80 | Enabled: false 81 | Head Length: 0.1 82 | Head Radius: 0.05 83 | Name: Pose 84 | Shaft Length: 0.1 85 | Shaft Radius: 0.02 86 | Shape: Arrow 87 | Topic: /crazyflie/goal 88 | Value: false 89 | - Class: rviz/TF 90 | Enabled: true 91 | Frame Timeout: 15 92 | Frames: 93 | All Enabled: false 94 | crazyflie/base_link: 95 | Value: true 96 | kinect2_ir_optical_frame: 97 | Value: false 98 | kinect2_link: 99 | Value: true 100 | kinect2_rgb_optical_frame: 101 | Value: false 102 | world: 103 | Value: true 104 | Marker Scale: 1 105 | Name: TF 106 | Show Arrows: true 107 | Show Axes: true 108 | Show Names: true 109 | Tree: 110 | world: 111 | kinect2_link: 112 | crazyflie/base_link: 113 | {} 114 | kinect2_rgb_optical_frame: 115 | kinect2_ir_optical_frame: 116 | {} 117 | Update Interval: 0 118 | Value: true 119 | - Alpha: 1 120 | Class: rviz/RobotModel 121 | Collision Enabled: false 122 | Enabled: true 123 | Links: 124 | All Links Enabled: true 125 | Expand Joint Details: false 126 | Expand Link Details: false 127 | Expand Tree: false 128 | Link Tree Style: Links in Alphabetic Order 129 | kinect2_link: 130 | Alpha: 1 131 | Show Axes: false 132 | Show Trail: false 133 | Value: true 134 | Name: Kinect v2 135 | Robot Description: robot_description 136 | TF Prefix: "" 137 | Update Interval: 0 138 | Value: true 139 | Visual Enabled: true 140 | Enabled: true 141 | Global Options: 142 | Background Color: 173; 173; 173 143 | Fixed Frame: world 144 | Frame Rate: 30 145 | Name: root 146 | Tools: 147 | - Class: rviz/Interact 148 | Hide Inactive Objects: true 149 | - Class: rviz/MoveCamera 150 | - Class: rviz/Select 151 | - Class: rviz/FocusCamera 152 | - Class: rviz/Measure 153 | - Class: rviz/SetInitialPose 154 | Topic: /initialpose 155 | - Class: rviz/SetGoal 156 | Topic: /move_base_simple/goal 157 | - Class: rviz/PublishPoint 158 | Single click: true 159 | Topic: /clicked_point 160 | Value: true 161 | Views: 162 | Current: 163 | Class: rviz/Orbit 164 | Distance: 2.37468 165 | Enable Stereo Rendering: 166 | Stereo Eye Separation: 0.06 167 | Stereo Focal Distance: 1 168 | Swap Stereo Eyes: false 169 | Value: false 170 | Focal Point: 171 | X: 0.279675 172 | Y: 0.435578 173 | Z: 0.432212 174 | Name: Current View 175 | Near Clip Distance: 0.01 176 | Pitch: 0.300398 177 | Target Frame: 178 | Value: Orbit (rviz) 179 | Yaw: 5.48541 180 | Saved: ~ 181 | Window Geometry: 182 | Displays: 183 | collapsed: false 184 | Height: 973 185 | Hide Left Dock: false 186 | Hide Right Dock: true 187 | QMainWindow State: 000000ff00000000fd00000004000000000000012400000343fc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006400fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000002800000343000000dd00fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f00000343fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000002800000343000000b000fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000049a0000003efc0100000002fb0000000800540069006d006501000000000000049a000002f600fffffffb0000000800540069006d00650100000000000004500000000000000000000003700000034300000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 188 | Selection: 189 | collapsed: false 190 | Time: 191 | collapsed: false 192 | Tool Properties: 193 | collapsed: false 194 | Views: 195 | collapsed: true 196 | Width: 1178 197 | X: 519 198 | Y: 40 199 | -------------------------------------------------------------------------------- /Chapter_9_code/crazyflie_autonomous/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.3) 2 | project(crazyflie_autonomous) 3 | 4 | ## Find catkin macros and libraries 5 | ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) 6 | ## is used, also find other catkin packages 7 | ## NB: You should only find_package components for which you want build flags. 8 | ## You should not add runtime dependencies. 9 | find_package(catkin REQUIRED) 10 | 11 | ## System dependencies are found with CMake's conventions 12 | # find_package(Boost REQUIRED COMPONENTS system) 13 | 14 | 15 | ## Uncomment this if the package has a setup.py. This macro ensures 16 | ## modules and global scripts declared therein get installed 17 | ## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html 18 | # catkin_python_setup() 19 | 20 | ################################################ 21 | ## Declare ROS messages, services and actions ## 22 | ################################################ 23 | 24 | ## To declare and build messages, services or actions from within this 25 | ## package, follow these steps: 26 | ## * Let MSG_DEP_SET be the set of packages whose message types you use in 27 | ## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). 28 | ## * In the file package.xml: 29 | ## * add a build_depend tag for "message_generation" 30 | ## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET 31 | ## * If MSG_DEP_SET isn't empty the following dependency has been pulled in 32 | ## but can be declared for certainty nonetheless: 33 | ## * add a run_depend tag for "message_runtime" 34 | ## * In this file (CMakeLists.txt): 35 | ## * add "message_generation" and every package in MSG_DEP_SET to 36 | ## find_package(catkin REQUIRED COMPONENTS ...) 37 | ## * add "message_runtime" and every package in MSG_DEP_SET to 38 | ## catkin_package(CATKIN_DEPENDS ...) 39 | ## * uncomment the add_*_files sections below as needed 40 | ## and list every .msg/.srv/.action file to be processed 41 | ## * uncomment the generate_messages entry below 42 | ## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) 43 | 44 | ## Generate messages in the 'msg' folder 45 | # add_message_files( 46 | # FILES 47 | # Message1.msg 48 | # Message2.msg 49 | # ) 50 | 51 | ## Generate services in the 'srv' folder 52 | # add_service_files( 53 | # FILES 54 | 55 | # Service1.srv 56 | # Service2.srv 57 | # ) 58 | 59 | ## Generate actions in the 'action' folder 60 | # add_action_files( 61 | # FILES 62 | # Action1.action 63 | # Action2.action 64 | # ) 65 | 66 | ## Generate added messages and services with any dependencies listed here 67 | # generate_messages( 68 | # DEPENDENCIES 69 | # sensor_msgs# std_msgs 70 | # ) 71 | 72 | ################################################ 73 | ## Declare ROS dynamic reconfigure parameters ## 74 | ################################################ 75 | 76 | ## To declare and build dynamic reconfigure parameters within this 77 | ## package, follow these steps: 78 | ## * In the file package.xml: 79 | ## * add a build_depend and a run_depend tag for "dynamic_reconfigure" 80 | ## * In this file (CMakeLists.txt): 81 | ## * add "dynamic_reconfigure" to 82 | ## find_package(catkin REQUIRED COMPONENTS ...) 83 | ## * uncomment the "generate_dynamic_reconfigure_options" section below 84 | ## and list every .cfg file to be processed 85 | 86 | ## Generate dynamic reconfigure parameters in the 'cfg' folder 87 | # generate_dynamic_reconfigure_options( 88 | # cfg/DynReconf1.cfg 89 | # cfg/DynReconf2.cfg 90 | # ) 91 | 92 | ################################### 93 | ## catkin specific configuration ## 94 | ################################### 95 | ## The catkin_package macro generates cmake config files for your package 96 | ## Declare things to be passed to dependent projects 97 | ## INCLUDE_DIRS: uncomment this if you package contains header files 98 | ## LIBRARIES: libraries you create in this project that dependent projects also need 99 | ## CATKIN_DEPENDS: catkin_packages dependent projects also need 100 | ## DEPENDS: system dependencies of this project that dependent projects also need 101 | catkin_package( 102 | # INCLUDE_DIRS include 103 | # LIBRARIES crazyflie_kinect2_detector 104 | # CATKIN_DEPENDS cv_bridge image_transport roscpp sensor_msgs std_msgs 105 | # DEPENDS system_lib 106 | ) 107 | 108 | ########### 109 | ## Build ## 110 | ########### 111 | 112 | ## Specify additional locations of header files 113 | ## Your package locations should be listed before other locations 114 | # include_directories(include) 115 | 116 | ## Declare a C++ library 117 | # add_library(crazyflie_autonomous 118 | # src/${PROJECT_NAME}/crazyflie_autonomous.cpp 119 | # ) 120 | 121 | ## Add cmake target dependencies of the library 122 | ## as an example, code may need to be generated before libraries 123 | ## either from message generation or dynamic reconfigure 124 | # add_dependencies(crazyflie_autonomous ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 125 | 126 | ## Declare a C++ executable 127 | # add_executable(crazyflie_autonomous_node src/crazyflie_autonomous_node.cpp) 128 | 129 | ## Add cmake target dependencies of the executable 130 | ## same as for the library above 131 | # add_dependencies(crazyflie_autonomous_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 132 | 133 | ## Specify libraries to link a library or executable target against 134 | # target_link_libraries(crazyflie_autonomous_node 135 | # ${catkin_LIBRARIES} 136 | # ) 137 | 138 | ############# 139 | ## Install ## 140 | ############# 141 | 142 | # all install targets should use catkin DESTINATION variables 143 | # See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html 144 | 145 | ## Mark executable scripts (Python etc.) for installation 146 | ## in contrast to setup.py, you can choose the destination 147 | # install(PROGRAMS 148 | # scripts/my_python_script 149 | # DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 150 | # ) 151 | 152 | ## Mark executables and/or libraries for installation 153 | # install(TARGETS crazyflie_autonomous crazyflie_autonomous_node 154 | # ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 155 | # LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 156 | # RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 157 | # ) 158 | 159 | ## Mark cpp header files for installation 160 | # install(DIRECTORY include/${PROJECT_NAME}/ 161 | # DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} 162 | # FILES_MATCHING PATTERN "*.h" 163 | # PATTERN ".svn" EXCLUDE 164 | # ) 165 | 166 | ## Mark other files for installation (e.g. launch and bag files, etc.) 167 | # install(FILES 168 | # # myfile1 169 | # # myfile2 170 | # DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 171 | # ) 172 | 173 | ############# 174 | ## Testing ## 175 | ############# 176 | 177 | ## Add gtest based cpp test target and link libraries 178 | # catkin_add_gtest(${PROJECT_NAME}-test test/test_crazyflie_autonomous.cpp) 179 | # if(TARGET ${PROJECT_NAME}-test) 180 | # target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) 181 | # endif() 182 | 183 | ## Add folders to be run by python nosetests 184 | # catkin_add_nosetests(test) 185 | -------------------------------------------------------------------------------- /Chapter_9_code/crazyflie_autonomous/scripts/detect_crazyflie.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import sys 3 | import rospy 4 | import cv2 5 | from cv_bridge import CvBridge, CvBridgeError 6 | import numpy 7 | import tf 8 | from sensor_msgs.msg import Image 9 | from sensor_msgs.msg import CameraInfo 10 | 11 | class Detector(): 12 | 13 | """ Detector for Crazyflie -- identified by green ball mounted on battery in Kinect image """ 14 | """ Crazyflie's location is published as a tf transform of its x, y, z with respect to """ 15 | """ the Kinect v2's ir coordinate frame """ 16 | 17 | def __init__(self): 18 | 19 | # initialize ROS node and transform publisher 20 | rospy.init_node('crazyflie_detector', anonymous=True) 21 | self.pub_tf = tf.TransformBroadcaster() 22 | 23 | self.rate = rospy.Rate(50.0) # publish transform at 50 Hz 24 | 25 | # initialize values for crazyflie location on Kinect v2 image 26 | self.cf_u = 0 # u is pixels left(0) to right(+) 27 | self.cf_v = 0 # v is pixels top(0) to bottom(+) 28 | self.cf_d = 0 # d is distance camera(0) to crazyflie(+) from depth image 29 | self.last_d = 0 # last non-zero depth measurement 30 | 31 | # crazyflie orientation to Kinect v2 image (Euler) 32 | self.r = -1.5708 33 | self.p = 0 34 | self.y = -3.1415 35 | 36 | # Convert image from a ROS image message to a CV image 37 | self.bridge = CvBridge() 38 | 39 | cv2.namedWindow("KinectV2", 1) 40 | 41 | # Wait for the camera_info topic to become available 42 | rospy.wait_for_message('/kinect2/qhd/camera_info', CameraInfo) 43 | 44 | # Subscribe to Kinect v2 sd camera_info to get image frame height and width 45 | rospy.Subscriber('/kinect2/qhd/camera_info', CameraInfo, self.camera_data, queue_size=1) 46 | 47 | # Subscribe to registered color and depth images 48 | rospy.Subscriber('/kinect2/qhd/image_color_rect', Image, self.image_callback, queue_size=1) 49 | rospy.Subscriber('/kinect2/qhd/image_depth_rect', Image, self.depth_callback, queue_size=1) 50 | 51 | self.rate.sleep() # suspend until next cycle 52 | 53 | # This callback function sets parameters regarding the camera. 54 | def camera_data(self, data): 55 | # set values on the parameter server 56 | rospy.set_param('camera_link', data.header.frame_id) # kinect2_ir_optical_frame 57 | rospy.set_param('camera_height', data.height) # sd height is 424 / qhd height is 540 58 | rospy.set_param('camera_width', data.width) # sd width is 512 / qhd width is 960 59 | 60 | # set values for local variables 61 | self.cam_height = data.height 62 | self.cam_width = data.width 63 | 64 | 65 | # This callback function handles processing Kinect color image, looking for the green ball 66 | # on the Crazyflie. 67 | def image_callback(self, msg): 68 | 69 | # convert ROS image to OpenCV image 70 | try: 71 | image = self.bridge.imgmsg_to_cv2(msg, desired_encoding='bgr8') 72 | except CvBridgeError as e: 73 | print(e) 74 | 75 | # create hsv image of scene 76 | hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) 77 | 78 | # find green objects in the image 79 | lower_green = numpy.array([50, 50, 177], numpy.uint8) # fluffy green ball 80 | upper_green = numpy.array([84, 150, 255], numpy.uint8) 81 | mask = cv2.inRange(hsv, lower_green, upper_green) 82 | 83 | # dilate and erode with kernel size 11x11 84 | cv2.morphologyEx(mask, cv2.MORPH_CLOSE, numpy.ones((11,11))) 85 | 86 | # find all of the contours in the mask image 87 | contours, heirarchy = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) 88 | self.contourLength = len(contours) 89 | 90 | # Check for at least one ball found 91 | if self.contourLength < 1: 92 | print "No objects found" 93 | sys.exit("No objects found") # if no Crazyflie in image, exit process 94 | 95 | ## Loop through all of the contours, and get their areas 96 | area = [0.0]*len(contours) 97 | for i in range(self.contourLength): 98 | area[i] = cv2.contourArea(contours[i]) 99 | 100 | #### Ball #### the largest "green" object 101 | ball_image = contours[area.index(max(area))] 102 | 103 | # Find the circumcircle of the green ball and draw a blue outline around it 104 | (self.cf_u,self.cf_v),radius = cv2.minEnclosingCircle(ball_image) 105 | ball_center = (int(self.cf_u),int(self.cf_v)) 106 | ball_radius = int(radius) 107 | cv2.circle(image, ball_center, ball_radius, (255,0,0), 2) 108 | 109 | # show image with green ball outlined with a blue circle 110 | cv2.imshow ("KinectV2", image) 111 | cv2.waitKey(3) 112 | 113 | 114 | # This callback function handles processing Kinect depth image, looking for the depth value 115 | # at the location of the center of the green ball on top of Crazyflie. 116 | def depth_callback(self, msg): 117 | 118 | # create OpenCV depth image using defalut passthrough encoding 119 | try: 120 | depth_image = self.bridge.imgmsg_to_cv2(msg, desired_encoding='passthrough') 121 | except CvBridgeError as e: 122 | print(e) 123 | 124 | # using green ball (u, v) position, find depth value of Crazyflie point and divide by 1000 125 | # to change millimeters into meters (for Kinect sensors only) 126 | self.cf_d = depth_image[self.cf_v, self.cf_u] / 1000.0 127 | rospy.loginfo("Depth: x at %d y at %d z at %f", int(self.cf_u), int(self.cf_v), self.cf_d) 128 | 129 | # if depth value is zero, use the last non-zero depth value 130 | if self.cf_d == 0: 131 | self.cf_d = self.last_d 132 | else: 133 | self.last_d = self.cf_d 134 | 135 | # publish Crazyflie tf transform 136 | self.update_cf_transform (self.cf_u, self.cf_v, self.cf_d) 137 | 138 | 139 | # This function builds the Crazyflie base_link tf transform and publishes it. 140 | def update_cf_transform(self, x, y, z): 141 | 142 | # send position as transform from the parent "kinect2_ir_optical_frame" to the 143 | # child "crazyflie/base_link" (described by crazyflie.urdf.xacro) 144 | self.pub_tf.sendTransform(( x, 145 | y, 146 | z), 147 | tf.transformations.quaternion_from_euler(self.r, self.p, self.y), 148 | rospy.Time.now(), 149 | "crazyflie/base_link", "kinect2_ir_optical_frame") 150 | 151 | rospy.loginfo("Sent CF transform %f %f %f", x, y, z) 152 | 153 | 154 | if __name__ == '__main__': 155 | 156 | # start up the detector node and run until shutdown by interrupt 157 | try: 158 | detector = Detector() 159 | rospy.spin() 160 | 161 | except rospy.ROSInterruptException: 162 | rospy.loginfo("Detector node terminated.") 163 | 164 | # close all terminal windows when process is shut down 165 | cv2.destroyAllWindows() 166 | 167 | 168 | -------------------------------------------------------------------------------- /Chapter_9_code/crazyflie_autonomous/scripts/detect_target.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import rospy 3 | import cv2 4 | from cv_bridge import CvBridge, CvBridgeError 5 | import numpy 6 | import tf 7 | from geometry_msgs.msg import PoseStamped 8 | from sensor_msgs.msg import Image 9 | from sensor_msgs.msg import CameraInfo 10 | 11 | class Detector(): 12 | 13 | """ Detector for the target -- identified by pink marker """ 14 | """ Target's location is published as a PoseStamped message with its x, y, z with respect to """ 15 | """ the Kinect v2's image """ 16 | 17 | def __init__(self): 18 | 19 | # initialize ROS node 20 | rospy.init_node('target_detector', anonymous=True) 21 | 22 | # initialize publisher for target pose, PoseStamped message, and set initial sequence number 23 | self.pub = rospy.Publisher('target_pose', PoseStamped, queue_size=1) 24 | self.pub_pose = PoseStamped() 25 | self.pub_pose.header.seq = 0 26 | 27 | self.rate = rospy.Rate(1.0) # publish message at 1 Hz 28 | 29 | # initialize values for locating target on Kinect v2 image 30 | self.target_u = 0 # u is pixels left(0) to right(+) 31 | self.target_v = 0 # v is pixels top(0) to bottom(+) 32 | self.target_d = 0 # d is distance camera(0) to target(+) from depth image 33 | self.target_found = False # flag initialized to False 34 | self.last_d = 0 # last non-zero depth measurement 35 | 36 | # target orientation to Kinect v2 image (Euler) 37 | self.r = 0 38 | self.p = 0 39 | self.y = 0 40 | 41 | # Convert image from a ROS image message to a CV image 42 | self.bridge = CvBridge() 43 | 44 | # Wait for the camera_info topic to become available 45 | rospy.wait_for_message('/kinect2/qhd/image_color_rect', Image) 46 | 47 | # Subscribe to registered color and depth images 48 | rospy.Subscriber('/kinect2/qhd/image_color_rect', Image, self.image_callback, queue_size=1) 49 | rospy.Subscriber('/kinect2/qhd/image_depth_rect', Image, self.depth_callback, queue_size=1) 50 | 51 | self.rate.sleep() # suspend until next cycle 52 | 53 | # This callback function handles processing Kinect color image, looking for the pink target. 54 | def image_callback(self, msg): 55 | 56 | # convert ROS image to OpenCV image 57 | try: 58 | image = self.bridge.imgmsg_to_cv2(msg, desired_encoding='bgr8') 59 | except CvBridgeError as e: 60 | print(e) 61 | 62 | # create hsv image of scene 63 | hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) 64 | 65 | # find pink objects in the image 66 | lower_pink = numpy.array([139, 0, 240], numpy.uint8) 67 | upper_pink = numpy.array([159, 121, 255], numpy.uint8) 68 | mask = cv2.inRange(hsv, lower_pink, upper_pink) 69 | 70 | # dilate and erode with kernel size 11x11 71 | cv2.morphologyEx(mask, cv2.MORPH_CLOSE, numpy.ones((11,11))) 72 | 73 | # find all of the contours in the mask image 74 | contours, heirarchy = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) 75 | self.contourLength = len(contours) 76 | 77 | # Check for at least one target found 78 | if self.contourLength < 1: 79 | print "No target found" 80 | 81 | else: # target found 82 | 83 | ## Loop through all of the contours, and get their areas 84 | area = [0.0]*len(contours) 85 | for i in range(self.contourLength): 86 | area[i] = cv2.contourArea(contours[i]) 87 | 88 | #### Target #### the largest "pink" object 89 | target_image = contours[area.index(max(area))] 90 | 91 | # Using moments find the center of the object and draw a red outline around the object 92 | target_m = cv2.moments(target_image) 93 | self.target_u = int(target_m['m10']/target_m['m00']) 94 | self.target_v = int(target_m['m01']/target_m['m00']) 95 | points = cv2.minAreaRect(target_image) 96 | box = cv2.cv.BoxPoints(points) 97 | box = numpy.int0(box) 98 | cv2.drawContours(image, [box], 0, (0, 0, 255), 2) 99 | rospy.loginfo("Center of target is x at %d and y at %d", int(self.target_u), int(self.target_v)) 100 | 101 | self.target_found = True # set flag for depth_callback processing 102 | 103 | # show image with target outlined with a red rectangle 104 | cv2.imshow ("Target", image) 105 | cv2.waitKey(3) 106 | 107 | # This callback function handles processing Kinect depth image, looking for the depth value 108 | # at the location of the center of the pink target. 109 | def depth_callback(self, msg): 110 | 111 | # process only if target is found 112 | if self.target_found == True: 113 | 114 | # create OpenCV depth image using default passthrough encoding 115 | try: 116 | depth_image = self.bridge.imgmsg_to_cv2(msg, desired_encoding='passthrough') 117 | except CvBridgeError as e: 118 | print(e) 119 | 120 | # using target (v, u) location, find depth value of point and divide by 1000 121 | # to change millimeters into meters (for Kinect sensors only) 122 | self.target_d = depth_image[self.target_v, self.target_u] / 1000.0 123 | 124 | # if depth value is zero, use the last non-zero depth value 125 | if self.target_d == 0: 126 | self.target_d = self.last_d 127 | else: 128 | self.last_d = self.target_d 129 | 130 | # record target location and publish target pose message 131 | rospy.loginfo("Target depth: x at %d y at %d z at %f", int(self.target_u), 132 | int(self.target_v), self.target_d) 133 | self.update_target_pose (self.target_u, self.target_v, self.target_d) 134 | 135 | # This function builds the target PoseStamped message and publishes it. 136 | def update_target_pose(self, x, y, z): 137 | 138 | # set position values for target location 139 | self.pub_pose.pose.position.x = x # pose in camera pixels u 140 | self.pub_pose.pose.position.y = y # pose in camera pixels v 141 | self.pub_pose.pose.position.z = z # pose in meters from camera 142 | 143 | # determine quaternion values from euler angles of (0,0,0) 144 | quaternion = tf.transformations.quaternion_from_euler(0, 0, 0) 145 | self.pub_pose.pose.orientation.x = quaternion[0] 146 | self.pub_pose.pose.orientation.y = quaternion[1] 147 | self.pub_pose.pose.orientation.z = quaternion[2] 148 | self.pub_pose.pose.orientation.w = quaternion[3] 149 | 150 | # complete header information 151 | self.pub_pose.header.seq += 1 152 | self.pub_pose.header.stamp = rospy.Time.now() 153 | self.pub_pose.header.frame_id = "target" 154 | 155 | # publish pose of target 156 | self.pub.publish(self.pub_pose) 157 | 158 | if __name__ == '__main__': 159 | 160 | # start up the detector node and run until shutdown by interrupt 161 | try: 162 | detector = Detector() 163 | rospy.spin() 164 | 165 | except rospy.ROSInterruptException: 166 | rospy.loginfo("Detector node terminated.") 167 | 168 | # close all terminal windows when process is shut down 169 | cv2.destroyAllWindows() 170 | 171 | 172 | -------------------------------------------------------------------------------- /Chapter_9_code/crazyflie_autonomous/scripts/control_crazyflie.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import rospy 4 | import tf 5 | from pid import PID 6 | from geometry_msgs.msg import PoseStamped, Twist 7 | from std_srvs.srv import Empty 8 | 9 | class CF_Controller(): 10 | 11 | """Controller to fly a Crazyflie in a space with Kinect v2 position feedback""" 12 | """Adapted to Python from Wolfgang Hoenig's controller.cpp in package crazyflie_controller""" 13 | 14 | def __init__(self): 15 | 16 | self.ff = 0.45 # adjustment for takeoff thrust 17 | self.thrust = 0.0 # initialize thrust to 0 18 | self.target = False # initialize target sighting to False 19 | 20 | # tuple of Crazyflie flight states 21 | self.flight_state = ['idle', 'takeoff', 'hover', 'flight', 'land'] 22 | self._cf_state = 'idle' # initial flight state 23 | self.takeoff_position = [0.0, 0.0, 0.0] # inital takeoff and hover positions 24 | self.hover_position = [0.0, 0.0, 0.0] 25 | self.last_depth = 0.0 # variable to keep non-zero value for camera depth 26 | 27 | # initialize services for land and takeoff 28 | # emergency is handled by crazyflie_server.cpp in crazyflie_ros/crazyflie_driver package 29 | s1 = rospy.Service("/crazyflie/land", Empty, self._Land) 30 | s2 = rospy.Service("/crazyflie/takeoff", Empty, self._Takeoff) 31 | 32 | # subscribe to target pose 33 | self.target_position = PoseStamped() 34 | rospy.Subscriber('target_pose', PoseStamped, self._update_target_pose, queue_size=1) 35 | 36 | # Initialize the tf listener 37 | self.listener = tf.TransformListener() 38 | 39 | # initialize publisher for crazyflie command velocity (geometry_Twist) 40 | self.fly = Twist() # set the fly command 41 | self.velocity_pub = rospy.Publisher ('/crazyflie/cmd_vel', Twist, queue_size=1) 42 | 43 | # get camera info from parameter server 44 | self.camera_height = rospy.get_param('camera_height') # sd height is 424; qhd height is 540 45 | self.camera_width = rospy.get_param('camera_width') # sd width is 512; qhd width is 960 46 | 47 | # create flight PID controllers in X, Y and Z 48 | self.m_pidX = PID(rospy.get_param("~PIDs/X/kp"), 49 | rospy.get_param("~PIDs/X/kd"), 50 | rospy.get_param("~PIDs/X/ki"), 51 | rospy.get_param("~PIDs/X/minOutput"), 52 | rospy.get_param("~PIDs/X/maxOutput"), 53 | rospy.get_param("~PIDs/X/integratorMin"), 54 | rospy.get_param("~PIDs/X/integratorMax")) 55 | self.m_pidY = PID(rospy.get_param("~PIDs/Y/kp"), 56 | rospy.get_param("~PIDs/Y/kd"), 57 | rospy.get_param("~PIDs/Y/ki"), 58 | rospy.get_param("~PIDs/Y/minOutput"), 59 | rospy.get_param("~PIDs/Y/maxOutput"), 60 | rospy.get_param("~PIDs/Y/integratorMin"), 61 | rospy.get_param("~PIDs/Y/integratorMax")) 62 | self.m_pidZ = PID(rospy.get_param("~PIDs/Z/kp"), 63 | rospy.get_param("~PIDs/Z/kd"), 64 | rospy.get_param("~PIDs/Z/ki"), 65 | rospy.get_param("~PIDs/Z/minOutput"), 66 | rospy.get_param("~PIDs/Z/maxOutput"), 67 | rospy.get_param("~PIDs/Z/integratorMin"), 68 | rospy.get_param("~PIDs/Z/integratorMax")) 69 | self.m_pidYaw = PID(rospy.get_param("~PIDs/Yaw/kp"), 70 | rospy.get_param("~PIDs/Yaw/kd"), 71 | rospy.get_param("~PIDs/Yaw/ki"), 72 | rospy.get_param("~PIDs/Yaw/minOutput"), 73 | rospy.get_param("~PIDs/Yaw/maxOutput"), 74 | rospy.get_param("~PIDs/Yaw/integratorMin"), 75 | rospy.get_param("~PIDs/Yaw/integratorMax")) 76 | 77 | 78 | # This service processes the Takeoff request. 79 | def _Takeoff(self, req): 80 | rospy.loginfo("Takeoff requested!") 81 | self._cf_state = 'takeoff' 82 | return () 83 | 84 | # This service processes the Land request. 85 | def _Land(self, req): 86 | rospy.loginfo("Landing requested!") 87 | self._cf_state = 'land' 88 | return () 89 | 90 | 91 | # This callback function puts the target PoseStamped message into a local variable. 92 | def _update_target_pose(self, msg): 93 | self.target_position = msg 94 | self.target = True 95 | 96 | # This function gets the current transform between the target_frame and the source_frame. 97 | def _getTransform(self, target_frame, source_frame): 98 | 99 | if self.listener.frameExists(target_frame) and self.listener.frameExists(source_frame): 100 | t = self.listener.getLatestCommonTime(target_frame, source_frame) 101 | result, other = self.listener.lookupTransform(target_frame, source_frame, t) 102 | return result, other 103 | 104 | # This function calls the reset function for all the PID controllers. 105 | def _pidReset(self): 106 | self.m_pidX.reset() 107 | self.m_pidY.reset() 108 | self.m_pidZ.reset() 109 | self.m_pidYaw.reset() 110 | 111 | 112 | # This process handles all of the flight command messages. 113 | def iteration(self, event): 114 | 115 | try: 116 | # delta time is in a fraction of a second (0.02 sec for 50 Hz) 117 | dt = float(rospy.Time.to_sec(event.current_real)) - float(rospy.Time.to_sec(event.last_real)) 118 | 119 | except (AttributeError, TypeError): 120 | dt = 0 121 | print "dt is %f" % dt 122 | 123 | # receive tf transform on the location of Crazyflie; log critical values of x, y, z 124 | (cf_trans, cf_rot) = self._getTransform("kinect2_ir_optical_frame", cf_frame) 125 | rospy.loginfo("cf_trans %f %f %f", cf_trans[0], cf_trans[1], cf_trans[2]) 126 | 127 | 128 | ##### Idle ######## 129 | if self._cf_state == 'idle': 130 | # set command velocity message values to zero; thrust value to zero 131 | self.fly.linear.x = 0.0 132 | self.fly.linear.y = 0.0 133 | self.fly.linear.z = 0.0 134 | self.thrust = 0.0 135 | 136 | # save current position as the takeoff position 137 | self.takeoff_position = cf_trans 138 | 139 | 140 | ##### Hover ######## 141 | # use x, y, and z PID controllers to keep Crazyflie's position the same as the hover position 142 | # 143 | elif self._cf_state == 'hover': 144 | 145 | # use camera -x position 146 | # calculate PID control value for Crazyflie x control 147 | self.fly.linear.x = self.m_pidX.update((self.camera_width - cf_trans[0]), 148 | (self.camera_width - self.hover_position[0])) 149 | 150 | # use camera -z position; make sure depth value is not 0; if it is 0, use previous value 151 | # calculate PID control value for Crazyflie y control 152 | if cf_trans[2] == 0.0: 153 | rospy.loginfo("Camera z is zero") 154 | self.fly.linear.y = self.m_pidY.update(self.hover_position[2], self.last_depth) 155 | else: 156 | self.fly.linear.y = self.m_pidY.update(self.hover_position[2], cf_trans[2]) 157 | self.last_depth = cf_trans[2] 158 | 159 | # use camera -y position 160 | # calculate PID control value for Crazyflie z control 161 | self.fly.linear.z = self.m_pidZ.update((self.camera_height - cf_trans[1]), 162 | (self.camera_height - self.hover_position[1])) 163 | 164 | # record values to log file 165 | rospy.loginfo("hover_position %f %f %f", self.hover_position[0], self.hover_position[1], 166 | self.hover_position[2]) 167 | rospy.loginfo("Velocity msg published x %f y %f z % f", self.fly.linear.x, self.fly.linear.y, 168 | self.fly.linear.z) 169 | 170 | 171 | ##### Takeoff ######## 172 | # increase the thrust (z) value in the command velocity message until takeoff is achieved 173 | # 174 | elif self._cf_state == 'takeoff': 175 | 176 | self.fly.linear.x = 0.0 # set cmd_vel x and y to 0 177 | self.fly.linear.y = 0.0 178 | 179 | rospy.loginfo("new upper limit %f", self.takeoff_position[1]-25) 180 | 181 | # increase thrust until position is 25 pixels above the takeoff position 182 | # (in camera -y direction) 183 | if (cf_trans[1] < (self.takeoff_position[1]-25)) or (self.thrust > 50000): 184 | 185 | # when 25 pixels above the takeoff position is achieved, 186 | # reset controllers; log values and achievement; change state to flight 187 | self._pidReset() 188 | rospy.loginfo("Takeoff thrust %f, ki %f", self.thrust, self.m_pidZ.set_ki()) 189 | self.m_pidZ.setIntegral((self.thrust - 1500.0)/ self.m_pidZ.set_ki()) 190 | rospy.loginfo("Takeoff achieved!") 191 | self._cf_state = 'flight' 192 | self.thrust = 0.0 193 | 194 | # if position has not been achieved; increase thrust (z) value in command velocity; 195 | # calculation is based on delta time (time elapsed) and fudge factor; 196 | # slow but steady increments that decrease above 36000 197 | else: 198 | if self.thrust < 36000: 199 | self.thrust += 10000 * dt * self.ff 200 | else: 201 | self.thrust += 3000 * dt * self.ff 202 | 203 | self.fly.linear.z = self.thrust 204 | rospy.loginfo("Takeoff Thrust value %f", self.fly.linear.z) 205 | 206 | # print thrust values and command velocity values to screen for debugging 207 | print "Thrust is %f" % self.thrust 208 | print "Velocity msg published x %f y %f z % f" % (self.fly.linear.x, self.fly.linear.y, 209 | self.fly.linear.z) 210 | 211 | ##### Land ######## 212 | elif self._cf_state == 'land': 213 | 214 | # reduce pitch and roll to zero maintain thrust at 30000 for Crazyflie landing 215 | self.fly.linear.x = 0.0 216 | self.fly.linear.y = 0.0 217 | self.fly.linear.z = 30000.0 218 | self.thrust = 30000.0 219 | 220 | # log achievement and change state to idle 221 | rospy.loginfo("Landing achieved!") 222 | self._cf_state = 'idle' 223 | 224 | 225 | ##### Flight ######## 226 | # use x, y, and z PID controllers to move Crazyflie's position to the target position 227 | # 228 | elif self._cf_state == 'flight': 229 | 230 | # check for target pose, if none then hover 231 | if not self.target: 232 | rospy.loginfo("Hover position set!!!!!!!!!!") 233 | self.hover_position = cf_trans 234 | rospy.loginfo("Hover pose is %f %f %f", self.hover_position[0], self.hover_position[1], 235 | self.hover_position[2]) 236 | self._cf_state = 'hover' 237 | 238 | # if target pose exists, head for target 239 | else: 240 | rospy.loginfo("Flying to target!!!") 241 | rospy.loginfo("Target position is x %f, y %f, z %f", self.target_position.pose.position.x, 242 | self.target_position.pose.position.y, self.target_position.pose.position.z) 243 | 244 | # use camera -x position 245 | # calculate PID control value for Crazyflie x control 246 | self.fly.linear.x = self.m_pidX.update((self.camera_width - cf_trans[0]), 247 | (self.camera_width - self.target_position.pose.position.x)) 248 | 249 | # use camera -z position 250 | # calculate PID control value for Crazyflie y control 251 | self.fly.linear.y = self.m_pidY.update(cf_trans[2], self.target_position.pose.position.z) 252 | 253 | # use camera -y position 254 | # calculate PID control value for Crazyflie z control 255 | self.fly.linear.z = self.m_pidZ.update((self.camera_height - cf_trans[1]), 256 | (self.camera_height - self.target_position.pose.position.y + 25)) 257 | # for testing only (self.camera_height - cf_trans[1])) 258 | 259 | # record values to log file 260 | rospy.loginfo("Target_position %f %f %f", self.target_position.pose.position.x, 261 | self.target_position.pose.position.y, self.target_position.pose.position.z) 262 | rospy.loginfo("Velocity msg published x %f y %f z % f", self.fly.linear.x, self.fly.linear.y, 263 | self.fly.linear.z) 264 | 265 | # publish command velocity message to Crazyflie 266 | self.velocity_pub.publish(self.fly) 267 | 268 | # log flight state 269 | rospy.loginfo("CF_state is %s", str(self._cf_state)) 270 | 271 | 272 | if __name__ == '__main__': 273 | 274 | # initialize ROS node 275 | rospy.init_node('crazyflie_controller', anonymous=True) 276 | 277 | # set parameters on parameter server 278 | cf_frame = rospy.get_param("~frame", "crazyflie/base_link") 279 | frequency = rospy.get_param("frequency", 50.0) 280 | 281 | # start up the controller node and run until shutdown by interrupt 282 | try: 283 | controller = CF_Controller() 284 | rospy.Timer(rospy.Duration(1.0/frequency), controller.iteration) 285 | 286 | rospy.spin() # keep process alive 287 | 288 | except rospy.ROSInterruptException: 289 | rospy.loginfo("CF_controller node terminated.") 290 | 291 | -------------------------------------------------------------------------------- /Chapter_5_code/ros_robotics/meshes/l_finger_tip.dae: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | WakiMudi 6 | OpenCOLLADA2009 x64 7 | 8 | ColladaMaya export options: 9 | bakeTransforms=0;relativePaths=0;copyTextures=0;exportTriangles=0;exportCgfxFileReferences=1; 10 | isSampling=0;curveConstrainSampling=0;removeStaticCurves=1;exportPolygonMeshes=1;exportLights=1; 11 | exportCameras=1;exportJointsAndSkin=1;exportAnimations=1;exportInvisibleNodes=0;exportDefaultCameras=0; 12 | exportTexCoords=1;exportNormals=1;exportNormalsPerVertex=1;exportVertexColors=1;exportVertexColorsPerVertex=1; 13 | exportTexTangents=0;exportTangents=0;exportReferencedMaterials=0;exportMaterialsOnly=0; 14 | exportXRefs=1;dereferenceXRefs=1;exportCameraAsLookat=0;cameraXFov=0;cameraYFov=1;doublePrecision=0 15 | 16 | file:///C:/Users/WakiMudi/Documents/maya/projects/willow_textures/scenes/finger_tip1c_med2.mb 17 | 18 | 2010-04-30T15:42:35 19 | 2010-04-30T15:42:35 20 | 21 | Y_UP 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | file3 34 | 35 | 36 | 37 | 38 | file3-surface 39 | 40 | 41 | 42 | 43 | file2 44 | 45 | 46 | 47 | 48 | file2-surface 49 | 50 | 51 | 52 | 53 | 54 | 0 0 0 1 55 | 56 | 57 | 1 1 1 1 58 | 59 | 60 | 61 | 62 | 63 | NONE 64 | 65 | 66 | 67 | 68 | 69 | 0 0 0 1 70 | 71 | 72 | 1 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 1 82 | 1 83 | 84 | 85 | NONE 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | l_finger_tip_color.tif 99 | 100 | 101 | kFile 102 | 0 103 | file3 104 | 105 | 106 | 107 | 108 | l_finger_tip_normals.tif 109 | 110 | 111 | kFile 112 | 0 113 | file2 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | -0.2559809 0.1901715 -0.0625 -0.2559809 0.1901715 0.0625 -0.2537268 0.2114108 -0.0625 -0.2537268 0.2114108 0.0625 -0.2485333 0.1633339 -0.0625 -0.2485333 0.1633339 0.0625 -0.240199 0.1488713 -0.0625 -0.2400695 0.2358649 -0.0625 -0.2400695 0.2358649 0.0625 -0.2397677 0.1482965 -0.0625 -0.2391532 0.1476466 -0.0625 -0.2379528 0.1462927 0.0625 -0.2352117 0.1447638 -0.0625 -0.2326974 0.1445754 0.0625 -0.2271366 0.2511565 -0.06271797 -0.2269914 0.2511591 0.06255435 -0.2247762 0.2513151 0.06610249 -0.2237578 0.2513774 -0.06678473 -0.2161471 0.2611046 0.06806929 -0.213185 0.2635482 -0.06844301 -0.2118107 0.2609862 0.07228825 -0.2117051 0.2624817 -0.07210878 -0.208278 0.2667535 0.07144714 -0.2051879 0.2682248 -0.07337043 -0.204213 0.1453808 -0.0625 -0.2001819 0.2692079 0.07692641 -0.1983355 0.2712643 0.07642883 -0.1948465 0.2755677 -0.0681991 -0.1947474 0.2756261 0.06797223 -0.1937148 0.144856 0.0625 -0.1926676 0.2727923 -0.0794011 -0.1916065 0.2708877 -0.08130174 -0.188506 0.2732758 0.08140999 -0.1853678 0.2717476 0.08401084 -0.1833085 0.2732261 -0.08410865 -0.1822725 0.2793349 0.07700453 -0.1803954 0.2819513 -0.07256718 -0.1780762 0.2830504 0.07011034 -0.1773293 0.2730187 0.08665272 -0.1755807 0.2709797 -0.08802961 -0.1742155 0.1414681 -0.0625 -0.1697517 0.2685825 -0.09008111 -0.1686923 0.2655701 0.09110307 -0.1673789 0.2549954 0.09129691 -0.1661931 0.2812686 -0.08260695 -0.165061 0.2857487 -0.07547027 -0.1649993 0.2551941 -0.09114296 -0.1649574 0.2873474 -0.06819778 -0.1646604 0.2872339 0.07061147 -0.1642306 0.284144 0.0790704 -0.1634357 0.2783999 0.08591067 -0.1621671 0.2550864 -0.06250064 -0.1608366 0.2750067 -0.0885175 -0.160217 0.2657907 -0.09143894 -0.1578028 0.2549909 0.0625001 -0.154149 0.2880021 -0.07232566 -0.1536418 0.2731269 0.08988892 -0.1527463 0.253544 0.09150001 -0.1522569 0.1392039 0.09150001 -0.1521528 0.2700038 -0.09068897 -0.1518043 0.1399835 0.0625 -0.1516023 0.1349694 -0.09150001 -0.151555 0.1403298 -0.09150001 -0.1515535 0.1403337 -0.0625 -0.1515096 0.1347207 -0.0625 -0.151509 0.2880087 0.07221181 -0.151231 0.1345306 0.0625 -0.1506259 0.1341615 0.09150001 -0.1505352 0.2654169 0.09148671 -0.1497785 0.2759014 -0.08813171 -0.1494846 0.2773722 0.0871205 -0.1491202 0.2823577 -0.08274915 -0.1488227 0.2823121 0.08278743 -0.1445087 0.2857794 -0.07534167 -0.1444746 0.2858573 0.07524294 -0.1443199 0.2873035 -0.06889898 -0.1438844 0.250519 -0.06249977 -0.1437492 0.25045 -0.09150001 -0.1366871 0.2851597 0.06809411 -0.1355558 0.245961 0.0625 -0.1355558 0.245961 0.09150001 -0.1344153 0.2693709 -0.0891337 -0.1333494 0.2835393 -0.07186329 -0.1322943 0.2779932 -0.08190704 -0.131078 0.2765982 0.08273532 -0.13023 0.2612854 0.09088717 -0.1292426 0.2805861 0.07524997 -0.128109 0.2400196 -0.09150001 -0.128109 0.2400196 -0.0625 -0.1266257 0.2674961 0.08809802 -0.1254042 0.1627015 -0.09150001 -0.1254042 0.1627015 0.09150001 -0.1253817 0.1627275 -0.0625 -0.1253817 0.1627275 0.0625 -0.122071 0.2552296 -0.09128853 -0.121747 0.1200836 -0.09150001 -0.118835 0.2291149 0.0625 -0.118835 0.2291149 0.09150001 -0.1179802 0.2761696 0.06875417 -0.1168763 0.2753335 -0.0699351 -0.1163904 0.2681785 0.0825135 -0.1157189 0.1156334 0.09150001 -0.1153656 0.263647 -0.08579172 -0.1152561 0.1785771 -0.09150001 -0.1152561 0.1785771 -0.0625 -0.1152561 0.1785771 0.0625 -0.1152561 0.1785771 0.09150001 -0.1145336 0.2205494 -0.09150001 -0.1145336 0.2205494 -0.0625 -0.1138509 0.2716305 0.07487462 -0.1118825 0.2679779 -0.07929727 -0.1110071 0.1970773 -0.09150001 -0.1110071 0.1970773 -0.0625 -0.1106232 0.2018562 0.0625 -0.1106232 0.2018562 0.09150001 -0.08441962 0.0876795 -0.09150001 -0.08441962 0.0876795 0.09150001 -0.06090544 0.05292115 -0.09150001 -0.06090544 0.05292115 0.09150001 -0.0495669 0.02355337 -0.09150001 -0.0473225 -0.1313237 0.08406302 -0.04721611 -0.1317446 -0.08554724 -0.04660371 0.0134684 0.09150001 -0.04587045 -0.1387607 0.085782 -0.0458019 -0.1391128 -0.08507665 -0.04560956 -0.1322673 0.09154678 -0.04544139 -0.0793592 -0.08187514 -0.04527532 -0.07946514 0.08429152 -0.04413364 -0.07944457 -0.0888298 -0.04384666 -0.0444543 0.09150001 -0.04371814 -0.04454156 -0.09150001 -0.04359848 -0.1363798 -0.09449663 -0.04353668 -0.07262257 0.0806986 -0.04324533 -0.07207887 -0.08217085 -0.04320237 -0.00727716 -0.09150001 -0.04293997 -0.1322544 0.09729024 -0.04269479 -0.1304733 -0.09804036 -0.04246006 -0.02487911 0.09150001 -0.04211099 -0.1464566 -0.08436795 -0.04194321 -0.0796416 0.09424378 -0.0407573 -0.07003675 0.08871979 -0.04039864 -0.1489414 0.08418356 -0.04038449 -0.07997427 -0.09702864 -0.04035397 -0.07016576 -0.08995013 -0.03998458 -0.1431399 0.09625542 -0.03968093 -0.1436824 -0.09617469 -0.03946608 -0.1339814 0.1024175 -0.03905205 -0.1372301 -0.1014237 -0.03830057 -0.06449017 0.0826792 -0.03817599 -0.1511148 -0.08379622 -0.03745542 -0.06352907 -0.08281823 -0.03726139 -0.08298752 0.1014214 -0.03711813 -0.07106755 0.09709182 -0.03656593 -0.1489595 0.09431501 -0.03599248 -0.07598892 -0.1014625 -0.03586179 -0.149024 -0.09552383 -0.035251 -0.1322713 -0.1066893 -0.03499044 -0.06938825 -0.09811089 -0.03443419 -0.1324335 0.1073693 -0.03419245 -0.0638643 0.09216375 -0.03410806 -0.05392455 0.09094823 -0.03410156 -0.0539358 -0.09094367 -0.0339625 -0.07598889 0.1034925 -0.03392324 -0.08297178 -0.1047589 -0.0334243 -0.06386721 -0.09356877 -0.03259684 -0.1429494 -0.1048348 -0.03259684 -0.1429494 0.1048348 -0.03105294 -0.1561811 -0.08265221 -0.03096169 -0.1542408 0.09256731 -0.03089797 -0.1562643 0.08508219 -0.03083848 -0.1552674 -0.08971065 -0.03074188 -0.1487047 0.1014313 -0.03056617 -0.05818662 0.08130982 -0.0303551 -0.1335991 -0.1100505 -0.0297536 -0.05901399 0.08807833 -0.02952839 -0.07997435 0.1078847 -0.02918566 -0.05761643 -0.08368044 -0.02866499 -0.05915905 -0.0906481 -0.02854128 -0.07132461 -0.1054108 -0.02820098 -0.1367203 0.1104728 -0.02748364 -0.06971797 0.1050983 -0.02681506 -0.1489595 -0.1040659 -0.02674377 -0.07964158 -0.1094432 -0.02660802 0.1918753 -0.08969239 -0.02606876 -0.0638672 0.1009243 -0.02520428 -0.1464446 0.1071765 -0.02469457 -0.1544554 -0.09835249 -0.02466375 -0.06386431 -0.1016925 -0.02453656 0.1953396 -0.08768052 -0.02412004 -0.1421074 -0.1102836 -0.02404688 -0.1322673 -0.1131095 -0.02400803 -0.130929 0.1132457 -0.02367951 0.1965681 -0.08436144 -0.02314808 -0.05915904 0.09616499 -0.02300755 -0.1589892 -0.08317364 -0.02170488 -0.0550378 0.08382989 -0.02167804 -0.1592838 0.08342275 -0.02139231 -0.07821683 0.111481 -0.02121975 -0.07003675 -0.1082573 -0.01941718 -0.1539336 0.1018626 -0.01935083 -0.05455998 -0.0830516 -0.01809295 -0.1581162 0.09380539 -0.01791436 -0.1582883 -0.0930566 -0.01778947 -0.05778495 -0.0966603 -0.01778266 -0.1394888 0.1131022 -0.0177004 -0.1468909 0.1093166 -0.0173845 -0.0544373 0.07853844 -0.01692357 -0.1593957 -0.08683269 -0.01684205 -0.07960561 -0.1128031 -0.01668244 -0.1489406 -0.1078994 -0.01658116 -0.0553765 -0.09031941 -0.01654888 -0.1312879 -0.1148278 -0.01621624 -0.05662036 0.09434725 -0.01599991 -0.1382603 -0.1136685 -0.01599203 -0.06762466 0.1080517 -0.01549794 -0.1549721 -0.1006577 -0.01522539 -0.06648432 -0.1073289 -0.01510256 -0.1329826 0.114866 -0.01505456 -0.06169433 0.103026 -0.01433431 -0.07328582 0.1112946 -0.01411662 -0.06129951 -0.1025619 -0.01397153 -0.05493509 0.08908813 -0.01363896 -0.08086297 0.113149 -0.01330429 -0.07265166 -0.111015 -0.01251588 -0.1594076 0.08693563 0.05178908 0.109246 -0.09150001 0.05831304 0.1098341 0.0911931 0.06084268 0.1030651 -0.09153137 0.06721931 0.112502 -0.08821566 0.0672969 0.1128387 0.08808996 0.06734548 0.122826 -0.08091819 0.06934998 0.1240232 -0.0771784 0.07062464 0.1258832 -0.07056131 0.07154754 0.1013586 -0.09035513 0.07181158 0.1176617 0.08244278 0.07188313 0.1166816 -0.08293523 0.07191917 0.1244293 0.0724397 0.07603534 0.08271921 0.09148558 0.07960989 0.06528179 -0.09150738 0.08016048 0.1159844 -0.07293089 0.08034068 0.09533612 0.08827967 0.08036265 0.115858 0.07236861 0.08466951 0.07602973 0.09010863 0.08503905 0.09777084 -0.08445893 0.08585186 0.04905598 0.09133482 0.08607099 0.09876584 0.08273873 0.08858231 0.07306408 -0.08912442 0.08946297 0.05607174 -0.08990379 0.08984962 0.1010098 0.07524943 0.08997657 0.1008272 -0.0751827 0.09121949 0.1018231 0.06747019 0.0912195 0.1018231 -0.06747013 0.09131319 0.03902429 -0.09132616 0.09205771 0.07570668 0.08623322 0.09428733 0.05190929 0.08816947 0.0945316 0.07831843 -0.08346177 0.0961189 0.07968725 0.08111869 0.09834679 0.08557388 0.07236861 0.0983468 0.08557389 -0.07236852 0.09905438 0.05527037 -0.08429687 0.09932209 0.05876101 0.082674 0.09965158 0.07111043 -0.07890707 0.1001767 0.04152315 -0.08828787 0.1005524 0.03479984 0.09011456 0.1019167 0.04632222 0.08512078 0.1020527 0.0736378 -0.07092514 0.1026475 0.07164453 0.07030183 0.1032841 0.06155112 -0.07483015 0.1033195 0.05859359 0.07657172 0.1047675 0.06084374 0.06840407 0.1047894 0.060825 -0.0684491 0.1056223 0.04543746 -0.08273136 0.1060342 0.02266551 0.09136166 0.1063848 0.05251958 -0.07523343 0.1075837 0.05314998 0.07028525 0.1076987 0.04694796 0.07910283 0.1078803 0.05278997 -0.06822431 0.1087256 0.01938223 -0.09143958 0.1112177 0.02534742 -0.09014757 0.1134233 0.04479074 -0.07235719 0.1134911 0.02894244 0.08818256 0.1148468 0.04351283 0.06964593 0.115345 0.03188473 -0.08577051 0.1165683 0.04048729 0.07518276 0.1170206 0.03461991 0.08259513 0.1186131 0.03627966 -0.07945408 0.1198739 0.03966223 -0.07239366 0.1248723 0.03712854 -0.07083444 0.124912 0.03695552 0.07247294 0.2212311 -0.02220371 -0.09139675 0.222045 -0.02323744 0.09144966 0.2235746 -0.01584099 0.08986207 0.2242833 -0.002635241 0.07946348 0.2248836 -0.008594679 -0.08569741 0.2249197 -0.008627641 0.08570625 0.2252281 -0.01684867 -0.08989871 0.2268507 -0.05317642 0.09126099 0.2278718 -0.004129523 -0.07939713 0.2281158 -0.05440577 -0.08955185 0.2292882 -0.05324584 -0.09109938 0.2294521 -0.03213257 -0.0912462 0.2298588 -0.02950769 0.09097673 0.2298855 -0.001497239 0.07091209 0.2298878 -0.001498895 -0.07091403 0.2309387 -0.0549045 0.08904899 0.2320258 -0.06076761 -0.1018079 0.2320684 -0.07271359 0.1109267 0.2321496 -0.05440008 0.08914475 0.2321974 -0.07879486 -0.1128726 0.2322619 -0.1503036 -0.1066429 0.2325718 -0.1423911 -0.1120896 0.2326029 -0.08064023 0.1129942 0.2326124 -0.1423892 0.1120881 0.2326806 -0.009099362 0.08145922 0.2327298 -0.06881881 -0.1089808 0.2328537 -0.1328892 -0.114819 0.233006 -0.004250943 -0.07238245 0.2330061 -0.004250926 0.07238219 0.2330327 -0.156097 0.09893001 0.2331487 -0.06115204 0.102309 0.23351 -0.133 0.1147762 0.2336657 -0.05254382 0.09000642 0.2340278 -0.01618029 -0.08566672 0.2358717 -0.01879659 0.08583993 0.2365146 -0.05605017 -0.09303162 0.2366582 -0.02849864 0.08841051 0.236949 -0.05649922 0.09403541 0.2370138 -0.1582089 -0.09347588 0.2377744 -0.05330232 -0.08788454 0.237994 -0.01287427 -0.0797082 0.2380792 -0.008494276 0.07311008 0.238312 -0.06705785 0.1074025 0.2384141 -0.1593675 -0.08711292 0.2384688 -0.008109805 -0.0665 0.2386725 -0.1593069 0.08887038 0.2390079 -0.02975334 -0.08716296 0.2392211 -0.1494595 0.1070117 0.2392469 -0.05334374 0.08676762 0.2399193 -0.05446793 -0.08429098 0.2400931 -0.1537547 -0.1021566 0.2403465 -0.01091329 -0.07241601 0.2415016 -0.01788312 0.07970763 0.2427661 -0.01326529 -0.0665 0.2427661 -0.01326529 0.0665 0.2427815 -0.05437052 0.08222802 0.243231 -0.02416751 -0.0814598 0.2436501 -0.03047717 0.08291339 0.2440325 -0.05334422 -0.08250254 0.2441487 -0.01634325 0.07241571 0.2441531 -0.07405288 -0.1097195 0.2441749 -0.05254853 0.08262143 0.2450861 -0.06280708 -0.102182 0.2454244 -0.08264078 -0.111093 0.2459378 -0.1552392 0.09843325 0.2460455 -0.01910943 -0.06912987 0.2461409 -0.01906671 0.0665 0.2464352 -0.03327955 -0.07936549 0.2465974 -0.02267562 -0.07439027 0.2467386 -0.1436727 -0.1094407 0.2470177 -0.132173 0.112792 0.247306 -0.05441163 -0.07440153 0.2475942 -0.1323725 -0.1127006 0.2480009 -0.03004269 0.07583678 0.2483262 -0.05334722 0.07510701 0.2484134 -0.05254336 -0.07541857 0.248518 -0.05431029 0.07010943 0.2488108 -0.07934828 0.1101306 0.2490545 -0.05956147 0.09668974 0.2491685 -0.1407979 0.1101344 0.2494244 -0.02941259 -0.07089874 0.2494786 -0.02911716 0.06927681 0.2495319 -0.05367994 -0.06911233 0.2499071 -0.05254072 0.06842686 0.2515788 -0.05453926 -0.0804522 0.2520214 -0.05448736 0.07976776 0.2536779 -0.05404187 -0.07395126 0.2557842 -0.15527 -0.09493029 0.2558079 -0.05337306 0.06796858 0.2561172 -0.06887368 0.1033872 0.2572845 -0.05590928 0.08502777 0.257382 -0.05536472 -0.08317126 0.2574524 -0.07957994 -0.1071892 0.2576091 -0.05792208 -0.08999638 0.2576456 -0.06947539 -0.1031456 0.2590807 -0.1552299 0.09347059 0.2591315 -0.1321592 0.1089282 0.2607885 -0.1478845 0.1015128 0.2608778 -0.1589467 0.08158991 0.2612915 -0.05263022 0.07238861 0.2619676 -0.06245843 0.095084 0.2623681 -0.07693284 -0.1042557 0.2625402 -0.07570466 0.1038986 0.2626505 -0.1591615 -0.07922471 0.2628643 -0.1321365 -0.1073766 0.2640474 -0.147217 -0.1006779 0.2643699 -0.1407844 -0.1043851 0.264579 -0.1407835 0.1042829 0.2647122 -0.05034421 0.06132513 0.2647495 -0.1567315 -0.08658516 0.2651211 -0.05023432 -0.06212282 0.2660894 -0.05902043 -0.08847376 0.2669821 -0.05603767 0.08258828 0.268569 -0.08196379 0.1020292 0.2698169 -0.07244321 -0.09859552 0.2706669 -0.06325341 -0.09166717 0.2708835 -0.04963765 0.06216229 0.271028 -0.08051002 -0.1004226 0.2711911 -0.155515 0.08525376 0.2712812 -0.1321257 0.1029556 0.2723247 -0.151641 -0.09080906 0.2724146 -0.06739172 0.09399588 0.272821 -0.05112995 -0.0693852 0.2745805 -0.1321048 -0.100831 0.2745824 -0.04945817 -0.05618526 0.2746458 -0.05033502 0.06625118 0.2746724 -0.1594056 0.06477092 0.2751908 -0.07385657 0.09591777 0.2753612 -0.05461481 0.07674221 0.2767847 -0.1407233 0.09671052 0.2769372 -0.1592979 -0.06342994 0.2774064 -0.1473144 0.09185804 0.2775911 -0.06141842 0.08518556 0.2779745 -0.156872 -0.07504872 0.2782461 -0.050561 -0.06358572 0.2782714 -0.1407664 -0.09570058 0.2791004 -0.1518859 0.08464289 0.2797981 -0.06701053 -0.08869191 0.2800515 -0.05561962 -0.07560488 0.2814517 -0.04945657 0.04120936 0.281742 -0.05168494 0.06418766 0.2817725 -0.07941534 0.09230764 0.2819141 -0.07762744 -0.09207709 0.2840356 -0.04961805 -0.03942603 0.284185 -0.152622 -0.07824075 0.2845277 -0.05329483 -0.06594545 0.2847879 -0.1325302 0.09290393 0.2850473 -0.1320301 -0.09270314 0.2852038 -0.1592893 -0.04698337 0.2852708 -0.15711 0.06444997 0.2862823 -0.06749162 0.08347315 0.2870886 -0.1516775 0.07639956 0.2877006 -0.05811487 0.07288638 0.2877695 -0.07028585 -0.08371715 0.2878252 -0.1436727 -0.08516376 0.28799 -0.1591542 0.0360861 0.2885122 -0.1421798 0.0853125 0.2889731 -0.07563863 0.08468885 0.2890224 -0.06318314 -0.07726151 0.2896723 -0.05099525 -0.04183673 0.290083 -0.05100839 0.04064764 0.2902282 -0.05905676 -0.07059681 0.2906684 -0.07730848 -0.08303678 0.2907948 -0.0549317 0.0605884 0.2910826 -0.1569226 -0.05290766 0.2931353 -0.1335559 0.08403247 0.2932273 -0.06390099 0.07263264 0.2937075 -0.1573704 -0.03414703 0.2952547 -0.1476498 -0.07078613 0.2953124 -0.07322913 -0.07635882 0.2955063 -0.14765 0.07036688 0.2957161 -0.1322927 -0.08091976 0.2958621 -0.156198 0.04006212 0.2958772 -0.05609835 -0.05292331 0.2966455 -0.1517003 0.06029968 0.2967314 -0.153424 -0.05482365 0.2970387 -0.07219387 0.07338236 0.2971733 -0.05430025 -0.0328447 0.2972907 -0.05475029 0.03961691 0.2984421 -0.06349457 -0.06332618 0.2985033 -0.1407221 -0.0728662 0.2987057 -0.06833803 -0.06767813 0.2995496 -0.06382548 0.06129659 0.3000468 -0.1523196 0.04770212 0.3004085 -0.1322243 0.07394154 0.3011316 -0.06057883 0.05000895 0.3014884 -0.07600351 -0.06655614 0.3016754 -0.1408286 0.06760412 0.301902 -0.1523864 -0.03491138 0.3026571 -0.07415681 0.06377917 0.3027579 -0.1516222 0.03476217 0.3028576 -0.1463998 -0.05714658 0.3034159 -0.05989982 0.03594464 0.3036665 -0.06026785 -0.03670799 0.3036707 -0.06502529 -0.0519733 0.3040103 -0.1320931 -0.06720054 0.3053908 -0.06540595 0.04698424 0.3061075 -0.1475147 -0.04006335 0.3064749 -0.137814 -0.05844749 0.3067448 -0.07416303 0.05309053 0.3069134 -0.1436728 0.04935575 0.3069495 -0.07404632 -0.05277685 0.3074116 -0.06628736 -0.0375315 0.3079298 -0.1318431 0.05787108 0.3083402 -0.06762568 0.03243085 0.308884 -0.1436332 0.03649574 0.3100371 -0.1318919 -0.05088114 0.3100733 -0.07462292 0.03814233 0.3101018 -0.07357229 -0.03606461 0.310382 -0.1402879 -0.0382943 0.3109669 -0.1324028 0.04607275 0.312203 -0.1323387 -0.03724223 0.312244 -0.1329812 0.03579628 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | -0.8278185 -0.01579245 -0.5607738 -0.819174 -0.1203607 0.5607738 -0.7696655 0.3035177 -0.5616868 -0.803745 0.1962191 0.5616868 -0.571351 -0.244898 -0.7833154 -0.4062537 -0.1780996 0.8962358 -0.4631853 -0.3056163 -0.8319002 -0.6686805 0.4938105 -0.5558933 -0.6976324 0.4514992 0.5562891 -0.6837488 -0.5765925 -0.4472457 -0.4661557 -0.528908 -0.7091933 -0.7027413 -0.6905762 0.1710535 -0.2113298 -0.6614166 -0.7196302 -0.07931145 -0.8253729 0.5589894 -0.6250783 0.4680972 -0.6246296 -0.625186 0.1300452 0.7695654 -0.6432319 -0.03047187 0.7650648 -0.4045618 -0.6594314 -0.6336245 -0.6821961 0.6347339 0.3629344 -0.6356143 0.7455077 -0.2005314 -0.5316819 0.2426122 0.8114516 -0.592678 0.358888 -0.7210633 -0.5885034 0.7646834 0.2625325 -0.5476073 0.7020401 -0.4552645 -0.02840076 -0.8309724 -0.5555882 -0.5126446 0.4542502 0.728596 -0.4840596 0.7415116 0.4645931 -0.5048324 0.8598897 -0.07572247 -0.4541255 0.8846676 0.1055141 -0.08478703 -0.7012168 0.7078885 -0.412611 0.696581 -0.5869641 -0.4463058 0.2591394 -0.8565384 -0.391359 0.6260837 0.6744311 -0.4052195 0.2126125 0.889153 -0.3355249 0.5552455 -0.761003 -0.364821 0.8488196 0.382637 -0.3755451 0.8986218 -0.2268144 -0.3533331 0.9294183 0.1064766 -0.2520252 0.5587583 0.7901092 -0.2890155 0.3039571 -0.9077886 -0.1533398 -0.6889123 -0.7084398 -0.1511041 0.2020692 -0.9676443 -0.1845146 0.1528119 0.9708773 -0.2096319 -0.5330517 0.8197013 -0.1866295 0.7342135 -0.6527634 -0.1633977 0.9074476 -0.387092 -0.301513 -0.4645497 -0.8326364 -0.2219357 0.9714762 -0.08353765 -0.1848306 0.9679175 0.1702158 -0.1640322 0.8376405 0.5210102 -0.09802423 0.6409164 0.7613261 -0.02795364 -0.7034346 -0.71021 -0.084554 0.4841728 -0.8708773 -0.03354473 0.0831524 -0.9959722 -0.09931263 -0.6932867 0.7137862 -0.001774485 0.979251 -0.2026433 0.008618616 0.3775343 0.9259555 -0.2494284 -0.7927037 0.5562431 -0.9257821 0.120959 0.358185 0.01817819 0.2835038 -0.9587988 -0.3077923 0.1872821 0.9328394 -0.7445091 -0.2720724 -0.6096579 -0.7830955 0.5203918 -0.3405198 -0.3532335 0.09998985 -0.9301763 -0.5948867 -0.7553077 -0.2749911 0.05821215 0.9756326 0.2115475 -0.6199138 -0.7633435 0.1816965 -0.5423894 -0.6051136 0.5827962 0.008852604 0.06363989 0.9979336 0.04657432 0.5471677 -0.8357263 0.08605473 0.5775131 0.8118333 0.08249967 0.7735992 -0.6282818 0.09706582 0.7576644 0.6453857 0.2059882 0.901982 -0.3794698 0.2360243 0.8914912 0.3866989 0.2009333 0.9751616 -0.09319752 -0.3178346 -0.7313322 -0.6034354 -0.2173207 -0.5031222 -0.8364447 0.3407816 0.9369272 0.07768785 -0.3528555 -0.6031471 0.7153366 -0.5107375 -0.651148 0.5613853 0.1975414 0.4652047 -0.8628801 0.3642341 0.9055291 -0.2176018 0.3411875 0.7431796 -0.5755651 0.3330736 0.7257728 0.6019267 0.1201852 0.2295198 0.9658552 0.3973615 0.8521058 0.3406162 -0.5387097 -0.6254436 -0.5644575 -0.6152906 -0.5540907 -0.5607148 0.2416006 0.459561 0.8546537 -0.3065336 0.2421622 -0.9205403 -0.4312412 0.4105123 0.8034368 -0.5067521 0.4876862 -0.7108899 -0.5534222 0.4345712 0.7105432 0.08835167 0.130095 -0.9875572 -0.4585166 -0.8057804 -0.3748076 -0.7699348 -0.5498008 0.3239129 -0.6257958 -0.3047023 0.7180083 0.5407 0.8356713 0.09642034 0.5097209 0.8410345 -0.1812342 0.4341666 0.6161808 0.6571305 -0.4232336 -0.5638266 0.7092059 0.3303161 0.4785703 -0.8135489 -0.5600646 0.2006147 -0.8037919 -0.631049 0.3086205 -0.7117096 -0.666048 0.2205898 0.7125449 -0.4574238 0.2214684 0.8612289 -0.6252651 -0.3055619 -0.7181055 -0.903804 -0.280722 -0.3230067 0.5197892 0.7528834 0.4037149 0.5297151 0.7375128 -0.4188994 -0.827748 -0.02055162 -0.5607235 -0.6979389 0.07104979 -0.7126242 -0.8180261 -0.1078314 0.5649828 -0.8242534 0.02891027 0.5654826 -0.5087324 -0.4878268 -0.7093775 -0.6470609 -0.5199093 0.5576795 -0.7209407 -0.4122973 -0.5570058 -0.7527202 -0.3514362 0.5566911 -0.7926524 -0.2509832 -0.5556164 -0.9919356 -0.06494607 0.1088393 -0.9873838 -0.06214679 -0.1456396 -0.8113325 -0.1811029 0.555825 -0.9420986 -0.3032762 0.1430866 -0.9188625 -0.3657988 -0.1479289 -0.9389193 -0.09871196 0.3296762 -0.9822409 0.1634882 -0.09205662 -0.9763271 0.1688451 0.1351916 -0.9366675 0.1769867 -0.3022083 -0.810569 -0.4728468 0.3455341 -0.5531526 -0.1460681 -0.8201745 -0.8877461 -0.235212 -0.3957047 -0.9052834 0.4162689 0.08474875 -0.9096953 0.4058349 -0.0880497 -0.702543 -0.06988284 -0.7082019 -0.8718987 -0.1161434 0.4757137 -0.868681 -0.03570883 -0.4940833 -0.5069031 -0.008592363 0.8619602 -0.8096845 -0.5621659 -0.1684654 -0.8641808 0.1591809 0.4773395 -0.843143 0.4524048 0.2905852 -0.7671707 -0.6286047 0.1276926 -0.8178491 0.1496993 -0.5556194 -0.8166775 0.4467341 -0.3653308 -0.8038226 -0.4086274 0.4323111 -0.7795268 -0.4549811 -0.4304999 -0.7567713 -0.1069227 0.6448758 -0.7539429 -0.2634058 -0.6018201 -0.7417803 0.6607217 0.1149289 -0.6516098 -0.7509694 -0.1070029 -0.6935489 0.707598 -0.1352582 -0.7351146 0.09327043 0.6714961 -0.6996264 0.4719007 0.5365002 -0.651551 -0.6289868 0.4240954 -0.7014873 0.2854718 -0.6530094 -0.6180561 -0.665299 -0.4187887 -0.6711172 -0.06770097 -0.7382535 -0.6660619 0.503053 -0.550726 -0.5884016 -0.110228 0.8010201 -0.6135588 0.6895155 0.3848556 -0.1351535 -0.8672131 0.4792441 -0.250926 -0.9223793 -0.2936878 -0.6775779 0.265581 0.6858243 -0.6713274 0.09432813 -0.7351339 -0.599529 0.6632908 -0.4478953 -0.5813793 -0.4272136 -0.6924497 -0.5940344 -0.4330674 0.6779202 -0.4564305 -0.8874398 -0.06420129 -0.4664148 -0.8138345 0.3465987 -0.4392421 -0.8933415 0.09490761 -0.434723 -0.8676775 -0.2411465 -0.4830901 -0.6668757 0.567363 -0.4772977 0.8770475 0.05453988 -0.5005954 -0.1587289 -0.851005 -0.4835392 0.8397693 0.246936 -0.5620368 0.1328298 0.8163766 -0.4126461 0.900998 -0.1338874 -0.4336859 0.8385835 -0.329688 -0.5105259 0.4744263 -0.7171351 -0.4306516 -0.2808165 0.8577188 -0.4350706 0.4855955 0.7582285 -0.4014539 -0.6389832 -0.656152 -0.4758606 0.1584504 -0.8651302 0.3602134 0.4475751 -0.8184882 -0.4412993 0.6697309 0.5972566 -0.3564099 -0.538784 0.7633372 -0.3117628 -0.8140024 -0.490106 -0.3578732 0.6938181 -0.6249346 0.4536282 0.5392053 -0.7095626 -0.3368709 -0.4070791 -0.8490022 -0.3092554 -0.0959194 -0.9461293 -0.3287803 -0.04395227 0.9433831 0.4473258 0.549418 -0.7057191 -0.3339877 0.8416509 0.4243536 -0.2472707 -0.965464 -0.08207537 -0.2379438 0.9604277 0.1447804 -0.09111246 -0.9950252 0.0402933 -0.2970525 0.2516676 0.921099 -0.2873388 0.4451337 -0.8481112 -0.1854129 -0.791319 0.5826116 -0.51394 0.837802 -0.1842647 -0.1364333 -0.9501725 0.2802821 -0.1268057 -0.9432938 -0.3067852 -0.1787693 0.8719383 -0.4558127 -0.1867398 -0.3305955 0.9251134 -0.1039238 -0.587177 0.8027596 -0.2193322 0.9508638 0.218521 -0.04469602 -0.9938481 -0.1013311 -0.1550338 0.1515131 -0.9762214 -0.1263684 -0.6365802 -0.7607868 -0.1423548 0.962051 -0.2327941 -0.1078478 -0.06676216 -0.9919232 -0.1030787 0.9137731 0.3929293 -0.1025562 -0.3075761 -0.9459805 -0.1463239 0.5359388 0.83148 -0.07152408 -0.835493 -0.5448263 -0.1276437 0.60339 -0.7871643 -0.06475817 -0.1023369 0.9926397 -0.1450552 0.7296181 0.6682936 -0.08087332 0.3303103 0.9404013 -0.07715566 0.7671323 -0.636832 -0.04634992 0.9801098 0.1929676 -0.1002189 0.1158883 0.9881934 -0.07124251 0.3916986 -0.9173314 -0.01814359 -0.996981 0.07549617 -6.17721e-4 0.001151765 -0.9999991 0.1131211 0.1136657 0.9870581 0.04879265 0.04367387 -0.9978536 0.3334926 0.3109079 -0.8900106 0.3910781 0.3853757 0.8357891 0.5297756 0.6047007 -0.5947056 0.6126747 0.6868222 -0.3910305 0.6421656 0.7509874 -0.1537573 0.2627769 0.1896472 -0.9460351 0.5872097 0.5773172 0.5673532 0.5203559 0.5007896 -0.6916933 0.6601529 0.7287443 0.1820161 0.142411 0.0762747 0.9868644 0.111636 0.0412539 -0.9928924 0.7296382 0.6301632 -0.2655607 0.4295969 0.2380337 0.8710834 0.7576317 0.6238739 0.1917695 0.3482223 0.1132404 0.9305471 0.5960861 0.3776975 -0.7085379 0.188188 0.09281135 0.9777378 0.6632876 0.3892025 0.6391956 0.4281369 0.1362282 -0.8933871 0.3590902 0.1255004 -0.9248264 0.7828104 0.4884208 0.3855553 0.7996465 0.4494902 -0.3981508 0.8693445 0.4875427 0.0808842 0.8438961 0.5303748 -0.08088251 0.1611591 0.1081926 -0.9809802 0.5881653 0.1774896 0.7890241 0.4697703 0.1784785 0.8645585 0.7369261 0.2607727 -0.6236483 0.7808337 0.2480428 0.5733878 0.9090261 0.3498733 0.226407 0.908142 0.3543491 -0.222968 0.6931398 0.2297069 -0.6832218 0.7137344 0.2004428 0.6711227 0.8676782 0.208768 -0.4511658 0.4100122 0.2982634 -0.8619332 0.3298204 0.2579693 0.9081137 0.5594188 0.3800598 0.7366174 0.9593126 0.2380363 -0.1518485 0.9618289 0.2195283 0.1633778 0.9066776 0.2270388 -0.3555125 0.8633502 0.2890128 0.4136401 0.9519461 0.2905912 0.09672328 0.9579368 0.2686945 -0.1007981 0.6205204 0.4915603 -0.6110017 0.06238714 0.08162508 0.9947086 0.8303966 0.4239723 -0.3615091 0.8678355 0.4618323 0.1832278 0.7051612 0.5592694 0.4358502 0.8740571 0.481172 -0.0670655 0.0296744 0.0430844 -0.9986306 0.1838101 0.2752647 -0.943633 0.7013953 0.6615597 -0.2652986 0.2578549 0.4090559 0.8753194 0.6545915 0.747328 0.1140651 0.3235507 0.5445379 -0.7738175 0.560023 0.7356788 0.380987 0.431014 0.6630166 0.612075 0.4557269 0.7532412 -0.474279 0.552339 0.8016325 -0.2287074 0.4476387 0.8799979 -0.1588187 0.411151 0.880156 0.2372348 0.05599561 0.08699147 -0.994634 0.06704891 0.07283675 0.9950876 0.2329006 0.2975583 0.9258597 0.3799145 0.7864917 0.4869247 0.3280304 0.5596704 -0.7610291 0.3144402 0.5698717 0.7591927 0.2504387 0.3091925 -0.9174314 0.08112551 -0.2611431 0.9618851 0.428229 0.7242737 -0.5404141 0.07285561 -0.9229025 -0.378078 0.1360009 -0.5110069 -0.8487495 0.2170026 0.04942183 -0.9749192 0.2232625 0.08064582 0.9714166 0.5205126 0.8409846 0.1476868 0.4868225 0.8610437 -0.1469955 0.01972432 0.9866496 0.1616585 0.05098508 0.77645 -0.628113 0.06817413 0.3841145 0.9207652 0.1442822 -0.8822333 0.4481598 0.08271573 0.1826641 -0.9796897 0.05059564 -0.6744481 -0.7365866 0.05148684 -0.4379512 -0.8975232 0.05402083 0.1433537 0.9881961 0.04864341 -0.3947569 0.917497 0.5324911 0.6325914 0.5623891 0.05532901 0.5472171 -0.8351599 0.06369864 -0.1288158 -0.9896206 0.6102345 0.738446 -0.2868994 0.5428765 0.7662076 0.3438184 0.03065109 -0.8803377 0.473356 0.05365197 0.8011229 0.5960903 0.1030981 -0.1184089 0.9875982 0.3306253 -0.2420118 0.9122047 0.5069498 0.4333163 -0.7451435 0.526556 0.3698792 0.7654595 0.0590538 0.9284127 -0.3668279 0.4991432 0.111489 0.8593173 0.05735755 0.9412735 0.3327377 0.05128488 -0.9559702 -0.2889479 0.4509624 -0.3879021 -0.8038438 0.6627391 0.5570443 -0.5004783 0.6948434 0.6843334 0.2210891 0.1194658 0.5804726 0.8054685 0.01772445 -0.9967091 -0.07909987 0.6969259 0.7163704 -0.03328241 0.0381119 -0.9849954 0.1683199 0.5665946 0.1247375 -0.8145005 0.09987042 -0.6741458 0.7318151 0.5103425 -0.4482614 0.733902 0.4150786 -0.5012005 -0.7592811 0.1047559 -0.8040478 -0.5852636 0.7542671 0.6282294 -0.1908115 0.7424796 0.4237017 0.5188455 0.8256254 0.5628932 -0.03865448 0.8050155 0.5920112 0.03837811 0.7017023 7.46162e-4 0.71247 0.740292 0.2942198 -0.6044852 0.735182 0.1670398 0.6569667 0.6952787 -0.4261295 -0.5787927 0.8634604 0.4489543 0.2299483 0.2144883 0.3620266 -0.9071556 0.7485455 -0.2020272 0.6315573 0.1936304 0.7204798 -0.665895 0.2221045 0.1138969 -0.9683476 0.1481673 -0.8434391 0.5163884 0.8955785 0.4333009 -0.1009424 0.9095158 0.4142058 0.03484956 0.8509479 0.08608568 -0.5181475 0.8663021 0.3565075 -0.3498901 0.2032343 -0.4671221 -0.8605189 0.2276655 -0.09755928 0.9688398 0.929589 -0.02017542 -0.3680452 0.2449523 -0.09760813 -0.9646093 0.9000918 0.160715 0.4049758 0.8741338 -0.3720308 0.3122232 0.9010577 -0.255732 -0.3502802 0.9179602 -0.3757963 0.1269887 0.2567067 0.1865456 0.9483155 0.1780245 0.8093995 0.5596246 0.2369038 -0.3694596 0.8985412 0.9796969 0.1493266 -0.1337746 0.9742459 0.172873 0.1447747 0.8689303 -0.485782 -0.09474238 0.9690205 -0.234671 0.07699823 -0.03607435 0.9966366 -0.07358098 -0.02660745 0.9955152 0.09078368 -0.1467958 0.9862939 -0.07533625 0.2016628 -0.8639454 -0.4614439 -0.2581908 0.9656938 0.02780423 0.3019386 0.5345739 0.789344 0.06103197 0.9508593 0.3035484 0.02072408 0.9725525 -0.2317586 0.3514715 0.1667929 -0.9212209 0.1463937 0.8892096 -0.4334457 0.3331434 0.4695198 -0.8176592 0.2383775 -0.8534865 0.4633974 0.3711132 -0.09263541 0.9239554 0.3067575 -0.6338636 0.7100118 0.1473101 -0.9622177 0.2289908 -0.1086701 0.9787055 0.1741445 0.2917463 0.7328956 0.6146122 0.4198441 0.2837195 -0.8621103 0.413741 0.3148791 0.8542069 0.1218035 -0.9709865 -0.2057892 0.4177818 -0.06968889 -0.9058707 0.3457142 -0.6134348 -0.7100559 0.4046551 -0.3313472 -0.8523282 0.4213637 -0.378491 0.8241342 -0.1781175 0.9823205 0.05762441 0.2426096 -0.9027941 -0.3551108 -0.1572001 0.9836257 -0.08813936 0.2336735 0.8245113 -0.5153423 0.1561329 0.8891635 0.4301287 0.4981344 0.09477879 0.8619044 0.473652 0.3918588 -0.7887335 0.3838715 0.6542622 -0.6516008 -0.0430404 0.9949505 0.09066939 0.529217 0.1515072 -0.8348503 0.3069611 -0.873425 0.3780261 0.518407 -0.1178834 0.8469697 0.4154435 -0.7317578 -0.5403121 0.443287 0.5221228 0.7286181 0.1154949 0.9474221 -0.2984162 0.5441092 -0.1195603 -0.830452 -0.001601033 0.9988687 -0.04752734 0.1096011 0.9674205 0.2282219 0.1383717 -0.9836983 0.1148518 0.5546815 0.3072129 0.7732714 0.2737746 0.8494489 0.4510921 0.5637035 -0.3451684 0.750398 0.1093638 -0.9911771 -0.07488453 0.4781012 -0.6187068 0.6233948 0.4236223 0.6738334 0.6053865 0.3070813 -0.9145176 -0.2633601 0.2006951 0.9665722 -0.159561 0.5530128 -0.3973123 -0.7323386 0.4382981 -0.7790206 0.4483545 0.5435802 0.4405127 -0.7144712 0.3693225 0.7961482 -0.4793213 0.09553385 0.9949551 0.03062239 0.3372882 0.9025741 0.2675757 0.6508688 0.1114179 0.75097 0.6525328 0.1785326 -0.7364286 0.1570875 0.9870692 -0.03190254 0.4993137 -0.7736996 -0.3899675 0.3881454 0.8746338 -0.2904456 0.6475576 -0.1071821 0.754441 0.6663348 -0.1006738 -0.7388253 0.140612 -0.988789 -0.05024699 0.3596592 -0.905533 0.2250668 0.6137817 0.456147 0.6443615 0.5525811 -0.71082 0.4351885 0.5309506 0.7154205 0.4541639 0.6710204 0.339024 -0.6593893 0.6574523 -0.46101 -0.5960085 0.1837441 -0.9825384 0.02926508 0.6744507 -0.4289114 0.6009584 0.7258871 0.1787164 0.6641899 0.6066908 0.5612067 -0.563004 0.35545 0.9303631 -0.08988793 0.3207822 0.9449467 0.06461119 0.5781482 0.7065683 -0.4080511 0.7401288 0.1377738 -0.6582004 0.5471483 0.7992349 0.2487009 0.392664 -0.9041256 -0.1684397 0.7644005 -0.1244213 0.6326224 0.706739 0.4985552 0.5019588 0.407712 -0.9121535 -0.04179585 0.6745497 -0.6148895 -0.408526 0.7908878 0.2514411 -0.5579191 0.6907429 -0.5838875 0.4265559 0.7871215 -0.08359047 -0.6111075 0.4724336 -0.8780506 0.07637738 0.6165166 0.7576882 -0.2140467 0.6288007 -0.7294959 0.2691566 0.5876909 -0.7835044 -0.2018423 0.8028588 0.2664699 0.5333024 0.5602782 0.8275255 -0.03591577 0.5824091 0.8064369 0.1022704 0.7596991 0.5086092 -0.4051839 0.8053151 -0.3639527 -0.467981 0.8237261 0.352709 -0.4439275 0.7860757 0.505947 0.3551095 0.6800542 -0.7181418 0.1476436 0.8562319 -0.04341627 0.5147639 0.7176228 0.6630149 0.2131401 0.8970762 0.1274078 -0.4231093 0.8176306 -0.3869019 0.426365 0.6087255 -0.792059 -0.04577921 0.8954688 0.1697973 0.4114662 0.7016808 -0.7111996 0.04288581 0.8009388 -0.5277888 -0.2827295 0.7578349 0.6489136 0.06780447 0.7724352 0.6299998 -0.08027431 0.8300953 0.5036977 -0.2392287 0.8904412 -0.0784592 -0.448284 0.8748946 0.4419038 0.1981934 0.784955 -0.6134033 -0.08707431 0.8981783 -0.3023275 -0.3191766 0.9403763 0.1892194 0.2826452 0.8745918 -0.4334433 0.2172926 0.9345897 0.2220068 -0.2779483 0.9012653 0.41796 -0.1141509 0.9355273 -0.1021907 0.3381503 0.9065147 0.420388 0.038796 0.8628932 -0.5010392 0.0661428 0.9597408 -0.08065281 -0.2690587 0.97947 0.1659293 0.1144815 0.9833924 0.1702417 -0.06290662 0.9314162 -0.3453252 -0.1149537 0.9762307 -0.09029218 0.1970298 0.9929205 -0.06089232 -0.1019852 0.9875223 -0.1461938 0.05854062 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 0.6000769 0.4170645 0.6097912 0.3931945 0.6074986 0.4065673 0.5946689 0.3769559 0.6111707 0.3960274 0.605283 0.4138756 0.5913467 0.4287685 0.6042148 0.3781416 0.6109386 0.3859381 0.6093549 0.4049005 0.6001837 0.4209791 0.6040764 0.3617511 0.6166402 0.3904004 0.5933588 0.3637471 0.6110362 0.3645554 0.6209814 0.3741139 0.5865135 0.3482291 0.6003469 0.3434215 0.6157961 0.3733964 0.5713065 0.3331353 0.4636317 0.1732235 0.6059533 0.3401679 0.6148685 0.3608027 0.6193278 0.3602052 0.5467001 0.3257225 0.4663439 0.1651138 0.5256861 0.3299046 0.6065693 0.3309285 0.4505443 0.1533391 0.6141698 0.3441871 0.439155 0.1572256 0.4706976 0.1610384 0.4536403 0.1481664 0.622528 0.3562802 0.4087672 0.1483642 0.4364181 0.1390961 0.4331164 0.1494315 0.6177697 0.3425302 0.3849444 0.1301456 0.455666 0.1447554 0.4328248 0.1427622 0.6096854 0.3286361 0.4113429 0.1407495 0.5113551 0.3390653 0.3958981 0.135094 0.4417319 0.137085 0.4175279 0.1362046 0.4688667 0.3303223 0.3906107 0.1234142 0.4173768 0.1325961 0.4062994 0.1338624 0.485592 0.3618329 0.4436327 0.3020685 0.3501846 0.02404173 0.4901438 0.3633052 0.4122563 0.2808422 0.3957357 0.1202281 0.3566961 0.02282747 0.3435078 0.02542245 0.4068643 0.128643 0.3766422 0.267932 0.3475166 0.01294112 0.3420259 0.2641915 0.3378477 0.01836898 0.3621054 0.02340195 0.3387585 0.01223114 0.3562703 0.01582169 0.3164819 0.02108436 0.3369725 0.005919501 0.3483412 0.007858927 0.3158065 0.2566521 0.3170529 0.01493243 0.3170486 0.005445796 0.3243553 0.2654432 0.3153773 0.01630105 0.3163308 0.009894232 0.3373647 0.001992036 0.3154039 0.006703557 0.01317258 0.391708 0.01520033 0.3847321 0.01528337 0.3991986 0.005912484 0.3762579 0.02945 0.3751802 0.01356416 0.4001564 0.01156527 0.3714225 0.01736432 0.3794701 0.02287157 0.4173416 0.01768717 0.4114584 0.005296246 0.3890783 0.01075764 0.3614403 0.01988443 0.3708631 0.03289539 0.4282216 0.004929487 0.3608462 0.01608134 0.3635836 0.03373261 0.3559977 0.03309485 0.4312716 0.001868351 0.3752359 0.01665269 0.347572 0.02941796 0.3364287 0.008869303 0.3456574 0.04314813 0.3418792 0.0218196 0.3303758 0.001840713 0.3566833 0.06072382 0.3296247 0.01791012 0.3272316 0.08660804 0.2502542 0.1611976 0.179485 0.08237178 0.2476107 0.1582584 0.1655562 0.166777 0.1713123 0.0819122 0.3264414 0.1489388 0.1654422 0.1544854 0.1613461 0.1683175 0.161649 0.09861227 0.3302769 0.1478583 0.1636328 0.1715562 0.1494702 0.2008841 0.1543712 0.1551148 0.1538742 0.1938591 0.1462717 0.1129433 0.3394375 0.1687973 0.1450132 0.1891159 0.1409013 0.2245867 0.1438065 0.209198 0.1454768 0.2099214 0.1368186 0.2423177 0.1280883 0.1956225 0.1362795 0.222331 0.1358055 0.2369329 0.1258387 0.1806656 0.3024409 0.2798574 0.02652956 0.2120421 0.2812146 0.1514144 0.3361363 0.2187976 0.1308898 0.2310317 0.122113 0.2750234 0.0229214 0.2663832 0.2652339 0.2385524 0.2709792 0.137977 0.3630867 0.2888202 0.0191084 0.3000218 0.2656995 0.1331382 0.363044 0.2270644 0.1191629 0.2675725 0.02323239 0.2866725 0.01048241 0.2635418 0.02053496 0.27442 0.01497793 0.3079302 0.0115959 0.3078792 0.01925638 0.28163 0.006670148 0.307968 0.005946658 0.308502 0.2570186 0.2714356 0.01139754 0.2898555 0.003777716 0.3089263 0.02031471 0.307245 0.001992043 0.4872375 0.6755505 0.4810141 0.6793385 0.4867851 0.6634399 0.4891675 0.6905995 0.4791493 0.6630519 0.6120884 0.663708 0.4860308 0.7028136 0.6160327 0.677644 0.4853405 0.6515682 0.6158147 0.6539513 0.4815338 0.6938385 0.6120896 0.6906889 0.4757939 0.6491432 0.6186533 0.6638016 0.4770373 0.6849654 0.6123098 0.7072432 0.6167578 0.7000242 0.4826043 0.6452182 0.6127214 0.6450785 0.625224 0.6494119 0.6250955 0.6648235 0.6071418 0.7198373 0.6222017 0.6887221 0.4890575 0.6381885 0.6185372 0.6452489 0.6156189 0.7059073 0.48908 0.7099171 0.4825979 0.6314682 0.6153973 0.6351755 0.4940583 0.7197062 0.4884617 0.6213017 0.6136567 0.6203051 0.6244638 0.6342231 0.4908554 0.7177066 0.606945 0.7315118 0.4829368 0.6175742 0.4941074 0.7315118 0.4851348 0.4498793 0.614222 0.4510478 0.6221079 0.6157973 0.476105 0.4499764 0.616361 0.4424398 0.4760411 0.6198665 0.4851989 0.4422573 0.6201953 0.4521984 0.4758409 0.6331251 0.4825984 0.4336934 0.6266794 0.5361763 0.6114315 0.4324568 0.625392 0.4499118 0.4896208 0.4324568 0.6183937 0.4335788 0.5317289 0.7495058 0.5414957 0.8747565 0.5317458 0.8730434 0.543295 0.7472707 0.5297146 0.8804163 0.5244757 0.7497088 0.5540697 0.8766222 0.5323843 0.7437457 0.5487559 0.8845209 0.5248006 0.8747415 0.5242316 0.7433817 0.5540697 0.7459678 0.5410136 0.7400654 0.5192021 0.8827012 0.5161012 0.8741644 0.5172547 0.745978 0.5659781 0.8859833 0.5687379 0.8722004 0.5267147 0.7352001 0.5178385 0.7366133 0.5475202 0.7359539 0.5680038 0.8792228 0.5687379 0.7503896 0.51337 0.8791625 0.5126252 0.7459451 0.5095718 0.7395716 0.5678389 0.7434274 0.5080735 0.8858536 0.5103381 0.7473526 0.5972734 0.7456748 0.5763956 0.8714442 0.5753672 0.7472874 0.5975401 0.8722115 0.5747982 0.8729631 0.5763932 0.7415948 0.6066126 0.8697048 0.5756676 0.8774744 0.5747067 0.7425129 0.5937827 0.7380319 0.6065741 0.7472716 0.6090711 0.875045 0.5967047 0.8781332 0.5756703 0.7352001 0.6033549 0.742523 0.6118495 0.7496456 0.6118495 0.8697048 0.5763886 0.8842577 0.6020082 0.7361414 0.6139728 0.7443052 0.6161564 0.8756718 0.607681 0.8816274 0.5747439 0.8839025 0.6122026 0.7377225 0.6165035 0.7496456 0.6199868 0.7443355 0.6224711 0.745661 0.6156102 0.8832086 0.6224726 0.8736876 0.6200964 0.7380034 0.6199869 0.8750147 0.6804379 0.9252644 0.6804379 0.9462784 0.6542595 0.9252644 0.6542595 0.9462784 0.6542595 0.9109569 0.6804379 0.9708849 0.6804379 0.9109335 0.6542595 0.9708849 0.6542595 0.8904259 0.6804379 0.9860919 0.6804379 0.8897221 0.6542595 0.9860919 0.6542595 0.8855036 0.6804379 0.8851703 0.6485903 0.887946 0.6485903 0.9034638 0.622412 0.887946 0.622412 0.9080283 0.648407 0.9166727 0.622461 0.970485 0.6256639 0.9684853 0.7084175 0.9837672 0.7122847 0.9281691 0.7120886 0.9868172 0.6864293 0.9307258 0.7122856 0.9116653 0.686107 0.9115433 0.686107 0.8974248 0.7122853 0.8974248 0.686107 0.8851702 0.7122853 0.8851702 0.8001917 0.998008 0.7781171 0.998008 0.8001917 0.8851703 0.7781171 0.8851703 0.7589443 0.998008 0.7589443 0.8851703 0.734718 0.998008 0.734718 0.8851703 0.7193348 0.8851703 0.7216625 0.998008 0.7211437 0.998008 0.720557 0.998008 0.7179548 0.998008 0.6287338 0.7468894 0.6377838 0.8737012 0.6332718 0.8751087 0.6378197 0.7443374 0.6302878 0.7418913 0.7325814 0.873773 0.6306961 0.7352001 0.7325794 0.7457464 0.6321337 0.8814821 0.7275223 0.738027 0.7307616 0.8814307 0.7353963 0.7444193 0.7351025 0.7362255 0.5905644 0.9654236 0.5905644 0.9442353 0.6167427 0.9654236 0.6167427 0.9442353 0.5905644 0.9275351 0.6167427 0.9275351 0.5905644 0.9132043 0.6167427 0.9132276 0.5905644 0.8930092 0.6167427 0.8930128 0.5905644 0.8881704 0.6167427 0.887946 0.8533049 0.2959869 0.845578 0.2903672 0.8514512 0.2879479 0.8480771 0.2997719 0.8429598 0.06433529 0.8984996 0.2866267 0.8519468 0.3053986 0.839299 0.2970668 0.8388961 0.290293 0.8514354 0.06352501 0.8987007 0.06434388 0.9008882 0.2936257 0.8993018 0.3009701 0.8424541 0.30374 0.8365774 0.05836965 0.8443962 0.04939008 0.9053395 0.2872544 0.8505495 0.3099409 0.8372588 0.3020656 0.8325387 0.2918427 0.8521819 0.05133158 0.8998669 0.04971296 0.905856 0.06482633 0.9104498 0.2887509 0.9085602 0.2991243 0.8965817 0.3079507 0.8422821 0.3104089 0.8370287 0.3073229 0.8379992 0.03890073 0.8305857 0.06395591 0.8521944 0.0403965 0.9028994 0.3049728 0.8996021 0.312177 0.83136 0.05230642 0.8444092 0.03547904 0.9109614 0.0591903 0.9158031 0.2879046 0.9073419 0.3078214 0.8521085 0.3130768 0.8313685 0.04044236 0.8385138 0.02389968 0.8522246 0.02942892 0.8975059 0.03187721 0.9093223 0.04311753 0.9138417 0.2978471 0.8444635 0.02446095 0.903156 0.03731944 0.9177284 0.04949302 0.9162927 0.06385122 0.9180917 0.2952106 0.9138443 0.3051804 0.8311111 0.02951024 0.8431488 0.01387449 0.8518595 0.01723641 0.9048243 0.02589973 0.9151134 0.03783637 0.91066 0.02840578 0.9203834 0.2889532 0.8343871 0.02237052 0.8345752 0.01515962 0.8998064 0.0199584 0.9209093 0.03330979 0.9204927 0.06042064 0.8509336 0.009701218 0.8382108 0.007560863 0.9032156 0.01345848 0.9105699 0.01588739 0.9160522 0.02373302 0.9221938 0.02574595 0.8443685 0.001992032 0.8521356 0.003135724 0.9063252 0.006177659 0.9190343 0.01460712 0.9138112 0.00961815 0.8145955 0.2985068 0.8218688 0.2997022 0.8134778 0.3101234 0.8192215 0.07181534 0.8214794 0.309925 0.806721 0.3100659 0.8101406 0.06672429 0.8150555 0.3151824 0.8059098 0.3186421 0.805223 0.301743 0.8083941 0.2934724 0.818773 0.06016585 0.6542742 0.3166358 0.6548362 0.3029432 0.6875052 0.02472043 0.8142932 0.04830179 0.8168071 0.3182684 0.6537581 0.3201879 0.6553069 0.3102058 0.6515332 0.2974512 0.7624922 0.02220537 0.8035685 0.04667951 0.6436877 0.3145467 0.6489353 0.3100122 0.6459149 0.2983456 0.6512803 0.06695753 0.6726589 0.03218268 0.6990927 0.01704408 0.7883859 0.03422713 0.8068759 0.03736968 0.6431002 0.3179943 0.6455364 0.06822158 0.6621706 0.03124637 0.6821574 0.01941365 0.7660813 0.01509912 0.7880962 0.02465993 0.6352827 0.3115995 0.6411343 0.3044661 0.6377003 0.06544191 0.658401 0.04507929 0.6804278 0.01431443 0.6984027 0.009646992 0.6359769 0.3063802 0.6390534 0.2961643 0.6442235 0.05127751 0.6517566 0.04318453 0.6592892 0.02564008 0.761297 0.008874309 0.7843498 0.01439196 0.8063244 0.03022995 0.6303641 0.3039474 0.6325163 0.2972335 0.6336505 0.0725112 0.6390352 0.04381838 0.6479438 0.03634638 0.6660184 0.01564746 0.693752 0.005850596 0.7729779 0.01132162 0.7988831 0.02301905 0.631125 0.05944306 0.6530398 0.02235411 0.6783309 0.008784362 0.762862 0.003344307 0.7744707 0.005123162 0.7934375 0.0154203 0.6287338 0.07223145 0.6435282 0.0309783 0.6953489 0.001992043 0.7909435 0.009851468 0.1526227 0.4515283 0.1459093 0.4499766 0.1517709 0.4447728 0.1522428 0.6046358 0.1419562 0.4405223 0.1994355 0.4513221 0.1455915 0.6042109 0.1367192 0.4514196 0.1517826 0.4395881 0.1992762 0.4423382 0.1995311 0.601321 0.1480586 0.6127144 0.1502236 0.4349598 0.2079465 0.4473247 0.2061031 0.6015879 0.1994541 0.607599 0.1533904 0.6159133 0.1414665 0.6142292 0.1389622 0.6035712 0.2056123 0.4545654 0.207016 0.4397672 0.147291 0.6189675 0.2129534 0.4527775 0.2135184 0.4442158 0.20783 0.6086102 0.1989759 0.615 0.1517673 0.6237207 0.1421282 0.6220466 0.213821 0.6021723 0.2178968 0.4479037 0.2186437 0.4540136 0.2135158 0.6118768 0.2025735 0.6190025 0.19627 0.6219781 0.1505688 0.6267549 0.2191584 0.6029506 0.2177658 0.6092403 0.2085319 0.615977 0.1992762 0.6262066 0.206784 0.6225666 0.4803482 0.8638598 0.4886684 0.8718414 0.4807633 0.8773536 0.4866646 0.858704 0.490095 0.8847612 0.4281902 0.8710186 0.4936388 0.861876 0.4812966 0.7968731 0.4930258 0.8745718 0.4807689 0.8870022 0.4286955 0.881669 0.4276681 0.861742 0.4933065 0.7962923 0.4878727 0.795549 0.4981235 0.8841219 0.4825409 0.8956711 0.4180168 0.8739822 0.4986935 0.7997797 0.4982872 0.8651909 0.428248 0.79581 0.4808687 0.7817869 0.49525 0.8952233 0.4283514 0.8961757 0.4900269 0.8949942 0.4205843 0.8904549 0.4180525 0.8623734 0.489012 0.7825123 0.4970703 0.7816547 0.4210724 0.7948604 0.5016769 0.7916626 0.4286514 0.7834982 0.4903938 0.772264 0.4233055 0.7766681 0.479102 0.7693484 0.4860216 0.7683355 0.4943998 0.7657008 0.4155551 0.7778424 0.4284698 0.7687666 0.4816063 0.7604995 0.4906749 0.7596846 0.4996011 0.7698996 0.4145487 0.7932634 0.4206804 0.7636523 0.4144268 0.7655299 0.4282896 0.7563823 0.4842632 0.7538571 0.4180168 0.7525513 0.4779239 0.7544712 0.4872199 0.7493663 0.4285267 0.7457454 0.477636 0.7463105 0.4206403 0.7430396 0.4750339 0.738777 0.4284592 0.7384084 0.4823158 0.7404264 0.4206241 0.7352001 0.6648981 0.3443178 0.6880104 0.3303826 0.6875034 0.338174 0.6667607 0.3379119 0.760293 0.3358415 0.6685892 0.347714 0.6554278 0.343672 0.6700099 0.32974 0.7624692 0.3307533 0.7754216 0.3443749 0.6593578 0.3563727 0.6589085 0.3325332 0.6501505 0.3512358 0.6889408 0.3238762 0.782102 0.3410677 0.7543521 0.3239821 0.6693448 0.3532848 0.6479484 0.3599898 0.7842321 0.3353973 0.7873372 0.345965 0.6633478 0.3613228 0.6526966 0.3647409 0.7807815 0.3529157 0.6374211 0.367419 0.772477 0.325152 0.6398172 0.3783467 0.7929516 0.3394381 0.7997819 0.3599018 0.7973273 0.3651403 0.791459 0.3632455 0.6504757 0.3730817 0.788431 0.3302515 0.8045685 0.3520416 0.805943 0.3596968 0.7918655 0.3689974 0.6614152 0.3679033 0.6443185 0.3837722 0.7944472 0.33134 0.8074512 0.3479095 0.8086828 0.3787388 0.8007926 0.3756654 0.6442832 0.604853 0.6538063 0.6079339 0.8169429 0.3710013 0.6395357 0.6068792 0.8047654 0.3396667 0.8178128 0.3596638 0.8166053 0.3827908 0.8062345 0.6072087 0.6490297 0.6118339 0.6323487 0.3817773 0.8137054 0.3486768 0.8237471 0.3718436 0.8230802 0.3821554 0.817286 0.6049839 0.8119584 0.6082994 0.7996739 0.6097088 0.6378947 0.6131366 0.8065313 0.6181168 0.8002415 0.6185868 0.6513047 0.6198329 0.6451946 0.6190994 0.8215891 0.6059848 0.8165011 0.6145049 0.6415067 0.6231064 0.8249165 0.6042507 0.8091677 0.622413 0.6335986 0.6157732 0.822427 0.6113959 0.8198575 0.618005 0.8132678 0.6238267 0.2313351 0.4416278 0.2329496 0.4379148 0.2402624 0.4349598 0.2280912 0.443564 0.2251892 0.4512245 0.2265861 0.4522828 0.2253298 0.6889868 0.2324539 0.6756713 0.3895238 0.6889927 0.3783215 0.6738963 0.3900219 0.6977837 0.3878958 0.4486415 0.2248276 0.6976677 0.3816521 0.439044 0.3857499 0.4422347 0.8078703 0.7671923 0.8069551 0.892868 0.805861 0.7624178 0.8529657 0.891251 0.9171271 0.7990191 0.8721384 0.8932858 0.8308909 0.8789225 0.8963647 0.8865629 0.8170872 0.867248 0.916103 0.8194761 0.8969122 0.7753938 0.9221938 0.7989793 0.912571 0.8465548 0.8135396 0.8085999 0.913128 0.8745375 0.8826047 0.7662533 0.9094201 0.8790395 0.8176627 0.7920961 0.9105257 0.8780955 0.8659046 0.7624178 0.909939 0.8786502 0.8271405 0.7778557 0.8447162 0.7656011 0.8115902 0.7566947 0.7471126 0.6646892 0.8336648 0.7443663 0.7924175 0.7587296 0.8474711 0.7325607 0.7681911 0.7520065 0.7676437 0.6408375 0.7515111 0.7025219 0.85093 0.670104 0.7512578 0.7377114 0.7421904 0.6641717 0.7819512 0.6316971 0.752808 0.7424556 0.8427786 0.6500216 0.8029652 0.627515 0.8275716 0.6349278 0.2534881 0.8557822 0.248744 0.8557822 0.2512184 0.7429445 0.279201 0.7429445 0.2886778 0.8557822 0.3062797 0.7429445 0.3270279 0.8557822 0.3267764 0.7429445 0.3536431 0.7167661 0.3266927 0.7167661 0.3275742 0.8819605 0.3590848 0.8819605 0.3873387 0.7167661 0.3873387 0.8819605 0.4085649 0.7167661 0.4085649 0.8819605 0.4549268 0.4357886 0.4627619 0.4450058 0.4549554 0.4463647 0.4551685 0.4601492 0.4083522 0.4389954 0.4653693 0.4609216 0.4075127 0.4512501 0.4685687 0.4452969 0.455635 0.4734555 0.4102756 0.4621079 0.4051231 0.4468127 0.4627458 0.4324567 0.4642122 0.4737099 0.406804 0.4740479 0.4025233 0.4632555 0.3983913 0.4510757 0.4010702 0.4400886 0.4604834 0.6980959 0.4075358 0.6988561 0.4701246 0.6987119 0.4541894 0.6985914 0.4012584 0.6956626 0.3977985 0.4735673 0.4639561 0.7054259 0.4550736 0.7053599 0.3988979 0.7028078 0.4075682 0.7077944 0.3956911 0.6973967 0.4562757 0.7110543 0.4000606 0.7094169 0.4647163 0.713078 0.1710457 0.7014719 0.1532964 0.8666663 0.1533751 0.7014719 0.186935 0.8666663 0.205662 0.7014719 0.2147657 0.8666663 0.2412761 0.7014719 0.2412761 0.8666663 0.584722 0.8924572 0.5797168 0.8988854 0.5848951 0.887946 0.129345 0.6039895 0.1249456 0.4390559 0.13105 0.521998 0.1267664 0.4349598 0.001840705 0.7994728 0.06350184 0.7174813 0.1345065 0.6304431 0.1432686 0.7994729 0.14069 0.6304432 0.1467897 0.7193512 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 |

20 0 33 1 25 2 25 2 32 4 26 9 25 2 33 1 32 4 25 2 26 9 22 5 42 7 38 8 33 1 20 0 22 5 18 10 20 0 25 2 22 5 32 4 33 1 38 8 30 83 31 80 23 87 31 80 21 86 23 87 23 173 21 182 19 172 34 78 31 80 30 83 34 78 39 79 31 80 39 79 46 82 31 80 21 86 46 82 17 91 31 80 46 82 21 86 37 157 35 158 48 159 35 158 49 161 48 159 35 12 38 8 49 15 38 8 50 18 49 15 56 14 50 18 38 8 42 7 56 14 38 8 32 171 35 158 26 167 26 167 35 158 22 163 22 163 35 158 28 160 35 12 32 4 38 8 28 160 35 158 37 157 21 182 14 178 19 172 21 86 17 91 14 95 18 10 16 6 20 0 18 183 15 186 16 190 33 1 43 3 42 7 20 0 43 3 33 1 16 6 43 3 20 0 45 170 36 164 47 162 44 81 52 84 39 79 19 172 27 168 23 173 23 173 36 164 30 179 34 78 30 83 44 81 41 85 39 79 52 84 34 78 44 81 39 79 44 81 30 83 36 88 44 177 36 164 45 170 27 168 36 164 23 173 48 159 55 166 47 162 48 159 65 165 55 166 75 175 65 165 78 180 65 165 75 175 55 166 270 209 266 210 269 211 369 238 372 239 371 240 369 238 370 241 372 239 91 275 106 269 93 273 106 269 105 271 93 273 106 269 114 270 105 271 114 270 113 272 105 271 114 270 97 274 113 272 97 274 96 276 113 272 97 274 80 278 96 276 80 278 79 280 96 276 80 283 57 284 79 285 57 284 54 286 79 285 57 284 43 287 54 286 266 210 268 213 269 211 65 165 74 174 78 180 49 161 65 165 48 159 49 161 72 169 65 165 50 18 72 23 49 15 50 18 70 22 72 23 56 14 70 22 50 18 68 11 56 14 42 7 65 165 72 169 74 174 17 290 51 291 14 292 46 293 51 291 17 290 14 178 7 191 15 186 7 191 8 193 15 186 7 300 2 301 8 302 2 301 3 303 8 302 14 178 18 183 22 163 15 186 18 183 14 178 22 163 19 172 14 178 22 163 27 168 19 172 28 160 27 168 22 163 36 164 27 168 28 160 37 157 36 164 28 160 47 162 36 164 37 157 48 159 47 162 37 157 2 301 0 304 3 303 0 304 1 305 3 303 15 288 54 286 43 287 15 288 43 287 16 289 6 309 11 308 4 306 0 304 4 306 1 305 4 306 5 307 1 305 11 308 5 307 4 306 52 84 59 93 41 85 59 93 53 90 41 85 44 81 69 89 52 84 44 81 71 92 69 89 45 96 71 92 44 81 45 170 55 166 71 176 47 162 55 166 45 170 59 93 52 84 69 89 71 176 55 166 73 181 73 181 55 166 75 175 99 188 78 180 98 187 99 188 82 185 78 180 78 180 82 185 75 175 98 187 232 195 99 188 98 187 236 194 232 195 236 194 239 198 232 195 236 194 241 200 239 198 241 200 251 205 239 198 241 200 250 207 251 205 250 226 258 220 251 231 250 226 257 215 258 220 257 215 265 212 258 220 257 215 266 210 265 212 265 212 266 210 270 209 270 209 267 216 265 212 267 216 261 221 265 212 267 216 259 227 261 221 259 125 255 122 261 127 269 211 276 214 270 209 269 211 274 218 276 214 274 218 281 223 276 214 281 223 279 224 276 214 281 223 286 233 279 224 281 313 287 314 286 315 281 313 288 316 287 314 288 316 303 318 287 314 288 316 302 320 303 318 302 266 333 262 303 264 302 266 330 258 333 262 330 258 343 254 333 262 343 254 342 253 333 262 343 254 355 244 342 253 369 238 355 244 370 241 369 238 354 248 355 244 355 244 354 248 342 253 356 154 364 156 347 151 356 247 369 238 364 243 369 238 371 240 364 243 328 148 335 145 347 151 347 151 335 145 356 154 300 140 328 148 299 149 300 140 335 145 328 148 51 291 46 293 76 294 46 293 77 295 76 294 77 295 87 296 76 294 87 296 88 297 76 294 87 296 107 298 88 297 107 298 108 299 88 297 107 326 111 327 108 328 111 327 112 329 108 328 111 327 103 330 112 329 103 330 104 331 112 329 103 330 90 332 104 331 90 332 92 333 104 331 185 345 199 357 205 346 171 356 199 357 185 345 191 338 204 339 217 340 191 338 179 341 204 339 204 339 185 345 205 346 179 341 185 345 204 339 179 341 166 351 185 345 201 412 199 413 168 414 171 416 168 414 199 413 224 422 201 412 196 421 153 419 141 420 168 414 169 417 168 414 141 420 120 481 123 482 125 483 191 338 158 344 179 341 158 344 166 351 179 341 158 344 146 355 166 351 146 355 144 364 166 351 166 351 171 356 185 345 166 351 153 365 171 356 166 351 144 364 153 365 144 428 141 420 153 419 123 482 141 488 144 485 135 489 144 485 146 493 125 483 144 485 135 489 125 483 123 482 144 485 169 417 196 421 201 412 168 414 169 417 201 412 153 419 168 414 171 416 467 539 474 529 481 527 496 521 485 522 488 523 493 524 485 522 496 521 493 524 481 527 485 522 471 525 455 544 465 536 455 544 471 525 441 542 465 536 478 530 471 525 474 529 485 522 481 527 414 577 449 578 428 579 405 582 414 577 428 579 452 584 449 578 429 580 414 577 429 580 449 578 452 535 441 542 471 525 478 530 488 523 471 525 488 523 485 522 471 525 485 522 474 529 471 525 474 529 452 535 471 525 467 539 452 535 474 529 449 578 452 584 467 590 446 403 465 409 439 404 465 409 455 411 439 404 455 411 441 410 439 404 414 577 405 582 388 587 397 593 388 587 405 582 429 580 441 588 452 584 441 588 429 580 417 583 417 583 429 580 414 577 397 593 399 599 377 597 405 582 413 586 397 593 413 586 399 599 397 593 496 521 497 528 493 524 497 528 491 534 493 524 491 534 482 533 493 524 493 524 482 533 481 527 482 533 466 538 481 527 481 527 466 538 467 539 467 590 466 592 449 578 449 578 432 581 428 579 466 592 448 585 449 578 448 585 432 581 449 578 428 579 432 581 413 586 428 579 413 586 405 582 437 426 456 439 444 432 456 439 461 446 444 432 456 439 477 453 461 446 477 453 479 459 461 446 477 453 486 468 479 459 486 468 494 474 479 459 486 468 498 479 494 474 501 532 498 549 500 540 501 532 494 546 498 549 473 543 476 545 492 531 501 532 489 537 494 546 499 526 489 537 501 532 492 531 489 537 499 526 492 531 476 545 489 537 473 408 454 401 476 407 435 391 445 390 454 401 454 401 445 390 476 407 476 407 445 390 459 402 420 378 440 397 445 390 445 390 440 397 459 402 459 476 463 460 476 480 476 480 463 460 489 475 494 474 472 469 479 459 489 475 472 469 494 474 489 475 463 460 472 469 420 378 425 396 440 397 387 433 384 427 334 418 440 470 463 460 459 476 387 433 407 441 384 427 415 440 387 433 334 418 415 440 444 432 438 447 387 433 415 440 407 441 407 441 415 440 438 447 438 447 444 432 461 446 407 441 438 447 425 461 425 461 438 447 440 470 440 470 438 447 463 460 438 447 461 446 463 460 463 460 461 446 472 469 479 459 472 469 461 446 336 352 318 367 353 371 320 347 368 353 359 358 312 342 368 353 320 347 312 342 336 352 368 353 385 368 396 372 408 379 386 366 353 371 384 377 408 379 418 383 435 391 420 378 407 389 425 396 420 378 384 377 407 389 396 372 418 383 408 379 396 372 420 378 418 383 386 366 420 378 396 372 386 366 384 377 420 378 318 415 334 418 353 423 368 353 385 368 359 358 368 353 396 372 385 368 368 353 386 366 396 372 336 352 386 366 368 353 336 352 353 371 386 366 435 391 418 383 445 390 445 390 418 383 420 378 384 427 353 423 334 418 360 246 364 243 371 240 338 648 347 649 360 650 360 246 347 251 364 243 338 648 328 651 347 649 338 648 299 652 328 651 338 648 298 653 299 652 371 663 365 664 360 665 372 239 365 242 371 240 91 275 60 277 58 279 93 273 60 277 91 275 294 57 313 66 292 64 313 325 317 324 292 322 292 322 317 324 302 320 291 53 323 61 294 57 323 61 313 66 294 57 313 265 330 258 317 268 302 266 317 268 330 258 290 58 301 63 291 53 301 63 325 65 291 53 325 65 323 61 291 53 323 61 341 69 313 66 313 265 341 259 330 258 341 259 348 249 330 258 330 258 348 249 343 254 343 254 348 249 355 244 325 65 346 68 323 61 323 61 346 68 341 69 346 68 362 76 341 69 341 259 362 250 348 249 348 249 362 250 370 241 355 244 348 249 370 241 291 53 272 38 290 58 291 53 280 48 272 38 294 57 284 56 280 48 294 57 280 48 291 53 292 64 284 56 294 57 292 322 288 316 284 319 302 320 288 316 292 322 288 316 283 317 284 319 281 313 283 317 288 316 280 48 263 44 272 38 280 48 264 50 263 44 284 56 264 50 280 48 284 56 275 59 264 50 283 232 275 222 284 236 283 232 281 223 275 222 272 38 263 44 244 34 263 44 254 42 244 34 264 50 254 42 263 44 281 223 274 218 275 222 275 59 268 49 264 50 274 218 268 213 275 222 254 42 264 50 260 46 264 50 268 49 260 46 269 211 268 213 274 218 266 210 256 217 268 213 268 49 256 35 260 46 256 35 253 40 260 46 260 46 253 40 254 42 253 40 242 36 254 42 254 42 242 36 244 34 242 36 237 30 244 34 266 210 257 215 256 217 242 36 240 28 237 30 253 40 240 28 242 36 256 35 240 28 253 40 256 35 245 32 240 28 257 215 245 225 256 217 257 45 248 39 245 32 250 226 248 230 257 215 240 28 226 20 237 30 240 28 229 25 226 20 245 32 229 25 240 28 245 32 234 31 229 25 248 39 234 31 245 32 248 203 241 200 234 197 250 207 241 200 248 203 234 197 241 200 236 194 226 20 85 17 68 11 226 20 89 21 85 17 229 25 89 21 226 20 229 25 100 27 89 21 234 31 100 27 229 25 234 197 109 192 100 199 236 194 109 192 234 197 236 194 98 187 109 192 68 11 85 17 56 14 85 17 89 21 56 14 56 14 89 21 70 22 70 22 89 21 72 23 89 21 84 29 72 23 72 23 84 29 74 33 84 29 86 37 74 33 74 174 86 184 78 180 100 27 84 29 89 21 109 192 84 202 100 199 109 41 86 37 84 29 98 187 86 184 109 192 86 184 98 187 78 180 2 666 63 667 0 668 0 668 63 667 4 670 7 669 63 667 2 666 14 671 63 667 7 669 92 673 63 667 14 671 51 676 92 673 14 671 104 678 92 673 51 676 76 680 104 678 51 676 112 682 104 678 76 680 88 684 112 682 76 680 108 685 112 682 88 684 40 672 63 667 64 674 63 667 40 672 4 670 40 672 24 675 4 670 24 675 12 677 4 670 4 670 12 677 6 679 6 679 12 677 10 681 10 681 9 683 6 679 62 334 61 336 63 335 63 335 61 336 64 337 60 277 66 281 58 279 66 281 67 282 58 279 3 686 60 687 8 688 1 689 60 687 3 686 96 701 79 699 113 700 113 700 79 699 105 697 79 699 54 694 105 697 93 692 105 697 54 694 93 692 54 694 15 690 15 690 60 687 93 692 8 688 60 687 15 690 5 691 13 695 29 693 5 691 60 687 1 689 60 687 29 693 66 696 5 691 29 693 60 687 11 698 13 695 5 691 6 309 9 310 11 308 10 311 11 308 9 310 12 312 11 308 10 311 13 702 11 703 12 704 75 175 82 185 73 181 82 185 83 189 73 181 73 102 83 99 71 92 83 99 81 97 71 92 71 92 81 97 69 89 69 89 81 97 59 93 59 93 81 97 94 98 59 93 94 98 53 90 102 101 81 97 83 99 110 196 83 189 99 188 99 188 83 189 82 185 227 109 225 106 94 98 232 195 110 196 99 188 232 195 231 201 110 196 102 101 110 104 192 107 228 108 233 113 94 98 94 98 233 113 227 109 238 117 246 119 247 124 261 221 258 220 265 212 261 221 255 229 258 220 258 220 249 235 251 231 255 229 249 235 258 220 255 122 243 116 249 121 246 119 243 116 255 122 246 119 233 113 243 116 238 117 233 113 246 119 227 109 233 113 238 117 251 205 249 208 239 198 243 116 239 118 249 121 243 116 235 112 239 118 243 116 228 108 235 112 233 113 228 108 243 116 232 195 239 198 231 201 239 198 235 206 231 201 231 115 235 112 230 111 255 122 259 125 246 119 246 119 259 125 247 124 285 234 286 233 287 237 285 234 279 224 286 233 285 234 271 228 279 224 282 135 271 134 285 143 282 135 262 128 271 134 278 129 262 128 282 135 278 129 252 123 262 128 277 126 252 123 278 129 279 224 273 219 276 214 271 228 273 219 279 224 271 228 259 227 273 219 262 128 259 125 271 134 262 128 247 124 259 125 252 123 247 124 262 128 276 214 273 219 270 209 270 209 273 219 267 216 273 219 259 227 267 216 247 124 252 123 238 117 287 314 303 318 285 321 303 318 297 323 285 321 285 143 297 146 282 135 297 146 293 144 282 135 293 144 295 136 282 135 282 135 295 136 278 129 295 136 289 131 278 129 278 129 289 131 277 126 303 264 316 263 297 267 293 144 322 147 295 136 297 146 322 147 293 144 297 146 329 153 322 147 316 263 329 261 297 267 316 263 340 257 329 261 303 264 340 257 316 263 333 262 340 257 303 264 342 253 340 257 333 262 289 131 295 136 300 140 295 136 335 145 300 140 322 147 335 145 295 136 322 147 345 150 335 145 329 153 345 150 322 147 329 261 357 252 345 256 340 257 357 252 329 261 354 248 357 252 340 257 354 248 340 257 342 253 369 238 357 252 354 248 335 145 345 150 356 154 345 256 357 252 356 247 356 247 357 252 369 238 92 333 62 334 63 335 90 332 62 334 92 333 46 82 41 85 53 90 39 79 41 85 46 82 196 421 194 425 207 431 169 417 194 425 196 421 169 417 167 430 194 425 141 420 149 424 169 417 149 424 167 430 169 417 138 429 149 424 141 420 123 482 124 487 141 488 124 487 138 499 141 488 120 481 121 484 123 482 121 484 124 487 123 482 217 340 222 343 191 338 222 343 197 349 191 338 197 349 175 350 191 338 191 338 175 350 158 344 158 344 175 350 146 355 175 350 151 363 146 355 125 483 127 486 120 481 125 483 139 490 127 486 135 489 139 490 125 483 146 355 139 370 135 376 146 355 151 363 139 370 312 342 320 347 217 340 204 339 312 342 217 340 205 346 312 342 204 339 336 352 312 342 205 346 199 357 336 352 205 346 199 357 318 367 336 352 201 412 318 415 199 413 201 412 334 418 318 415 224 422 334 418 201 412 473 543 492 531 478 530 465 536 473 543 478 530 492 531 499 526 488 523 478 530 492 531 488 523 496 521 499 526 501 532 488 523 499 526 496 521 446 403 473 408 465 409 446 403 454 401 473 408 446 403 430 398 454 401 454 401 430 398 435 391 430 398 402 380 435 391 435 391 402 380 408 379 408 379 402 380 385 368 402 380 366 359 385 368 385 368 366 359 359 358 359 358 366 359 320 347 366 359 311 348 320 347 377 597 388 587 397 593 414 577 379 594 401 589 414 577 388 587 379 594 389 393 417 406 401 399 414 577 401 589 417 583 416 392 446 403 439 404 430 398 416 392 402 380 416 392 430 398 446 403 439 404 410 394 416 392 402 380 416 392 391 384 391 384 416 392 410 394 391 384 410 394 378 381 378 381 410 394 389 393 389 393 401 399 367 385 367 600 401 589 379 594 417 406 421 405 441 410 389 393 421 405 417 406 421 405 439 404 441 410 421 405 410 394 439 404 421 405 389 393 410 394 374 598 379 594 388 587 377 597 374 598 388 587 447 560 458 559 442 566 423 591 434 595 411 596 411 596 434 595 427 603 434 595 450 608 427 603 427 603 450 608 447 614 450 556 468 552 447 560 447 560 468 552 458 559 468 552 470 555 458 559 399 599 413 586 411 596 411 596 413 586 423 591 470 555 475 554 458 559 377 597 373 605 374 598 375 606 373 605 377 597 399 599 375 606 377 597 496 521 501 532 497 528 497 528 501 532 500 540 434 561 462 548 450 556 423 591 432 581 448 585 413 586 432 581 423 591 423 591 448 585 434 595 448 585 462 601 434 595 490 541 468 552 483 547 483 547 468 552 462 548 462 548 468 552 450 556 490 541 470 555 468 552 475 554 470 555 490 541 462 548 482 533 483 547 482 533 491 534 483 547 483 547 491 534 490 541 491 534 497 528 490 541 466 538 482 533 462 548 466 538 462 548 448 550 436 570 424 572 412 574 412 718 395 719 393 720 315 726 358 723 310 730 361 721 358 723 315 726 361 721 395 719 358 723 393 720 395 719 361 721 412 574 424 572 395 576 436 570 443 567 424 572 395 719 394 725 358 723 424 729 394 725 395 719 443 472 409 466 424 478 424 478 409 466 394 465 310 477 358 471 309 464 358 471 339 450 309 464 358 471 394 465 339 450 443 472 433 458 409 466 419 438 332 437 392 451 422 444 433 458 453 445 409 466 376 456 394 465 376 456 339 450 394 465 437 426 422 444 453 445 327 443 339 450 376 456 332 437 327 443 392 451 419 438 392 451 422 444 422 444 392 451 398 457 398 457 392 451 376 456 392 451 327 443 376 456 437 426 419 438 422 444 433 458 422 444 409 466 422 444 398 457 409 466 409 466 398 457 376 456 495 551 498 549 487 553 498 549 480 557 487 553 498 549 486 562 480 557 486 468 464 452 480 473 477 453 464 452 486 468 500 540 498 549 495 551 487 553 469 563 484 558 487 553 480 557 469 563 480 557 457 564 469 563 480 473 464 452 457 467 456 439 453 445 464 452 460 565 469 563 443 567 469 563 457 564 443 567 457 467 433 458 443 472 457 467 464 452 433 458 456 439 437 426 453 445 484 558 469 563 460 565 495 551 487 553 484 558 456 439 464 452 477 453 436 570 460 565 443 567 433 458 464 452 453 445 196 421 207 431 332 437 196 421 332 437 419 438 196 421 437 426 224 422 419 438 437 426 196 421 437 426 444 432 334 418 334 418 444 432 415 440 224 422 437 426 334 418 155 434 170 435 149 424 121 484 131 492 124 487 131 492 145 498 124 487 147 502 145 498 131 492 124 487 145 498 138 499 194 425 202 436 207 431 194 425 170 435 202 436 170 435 186 449 202 436 155 434 186 449 170 435 149 424 170 435 167 430 167 430 170 435 194 425 181 454 209 463 186 449 215 455 186 449 209 463 215 455 202 436 186 449 136 497 156 507 147 502 211 738 213 735 190 742 136 497 147 502 131 492 173 746 189 741 165 748 145 442 155 434 138 429 165 448 155 434 145 442 165 448 181 454 155 434 165 448 189 462 181 454 189 462 209 463 181 454 136 497 131 492 121 484 147 502 165 508 145 498 213 735 209 737 189 741 156 507 165 508 147 502 173 515 165 508 156 507 190 742 189 741 173 746 213 735 189 741 190 742 181 454 186 449 155 434 149 424 138 429 155 434 374 598 365 612 344 607 373 605 338 617 360 611 374 598 373 605 360 611 365 612 374 598 360 611 290 58 296 67 301 63 370 241 363 245 372 239 362 250 363 245 370 241 362 250 350 255 363 245 346 68 350 72 362 76 325 65 350 72 346 68 325 65 337 75 350 72 325 65 321 71 337 75 301 63 321 71 325 65 296 67 321 71 301 63 226 20 68 11 97 19 114 24 226 20 97 19 80 16 68 11 57 13 160 70 137 62 129 73 296 67 137 62 160 70 97 19 68 11 80 16 91 43 272 38 106 26 106 26 272 38 244 34 116 52 118 55 272 38 42 7 43 3 68 11 68 11 43 3 57 13 106 26 226 20 114 24 237 30 226 20 106 26 118 55 122 60 272 38 122 60 137 62 272 38 290 58 137 62 296 67 272 38 101 47 116 52 91 43 101 47 272 38 91 43 67 51 101 47 58 54 67 51 91 43 244 34 237 30 106 26 272 38 137 62 290 58 61 711 95 710 64 709 64 709 95 710 66 708 64 709 66 708 40 707 66 708 29 706 40 707 40 707 29 706 24 705 29 706 13 702 24 705 24 705 13 702 12 704 137 749 130 750 129 751 137 749 134 752 130 750 122 753 134 752 137 749 122 753 119 754 134 752 118 755 119 754 122 753 118 755 117 756 119 754 116 715 117 716 118 717 116 715 115 714 117 716 101 713 115 714 116 715 101 713 95 710 115 714 67 712 95 710 101 713 66 708 95 710 67 712 134 137 119 138 277 126 277 126 115 130 90 120 94 98 225 106 107 103 115 130 95 133 90 120 107 103 225 106 111 110 119 138 117 132 277 126 117 132 115 130 277 126 90 120 95 133 61 139 90 120 61 139 62 142 252 123 277 126 90 120 289 131 134 137 277 126 130 141 134 137 289 131 225 106 227 109 103 114 111 110 225 106 103 114 87 100 94 98 107 103 77 94 94 98 87 100 300 140 130 141 289 131 299 149 161 152 130 141 299 149 130 141 300 140 103 114 227 109 238 117 103 114 238 117 90 120 90 120 238 117 252 123 53 90 77 94 46 82 53 90 94 98 77 94 127 486 126 491 121 484 120 481 127 486 121 484 221 618 195 626 212 621 195 626 193 634 212 621 195 626 221 618 206 619 193 387 218 374 212 395 184 382 218 374 193 387 180 362 218 374 184 382 222 343 219 354 197 349 159 504 174 510 148 503 159 388 152 375 184 382 159 504 140 494 152 501 152 501 140 494 139 490 140 494 127 486 139 490 140 494 132 500 127 486 151 363 162 369 139 370 175 350 162 369 151 363 152 375 139 370 162 369 152 375 162 369 180 362 132 500 140 494 148 503 195 626 174 638 193 634 172 637 174 638 195 626 148 503 174 510 172 511 219 354 214 361 197 349 197 349 214 361 180 362 180 362 214 361 218 374 180 362 175 350 197 349 180 362 162 369 175 350 184 382 152 375 180 362 193 634 159 641 184 644 193 634 174 638 159 641 159 504 148 503 140 494 217 340 311 348 222 343 320 347 311 348 217 340 378 381 331 373 366 359 402 380 391 384 366 359 374 598 344 607 326 602 379 594 326 602 367 600 374 598 326 602 379 594 367 385 378 381 389 393 331 373 378 381 367 385 391 384 378 381 366 359 311 348 366 359 306 360 306 360 366 359 331 373 319 386 331 373 367 385 319 386 367 385 326 400 304 613 326 602 344 607 381 724 390 728 406 722 451 568 442 566 458 559 442 566 426 569 447 560 426 622 404 615 447 614 447 614 404 615 427 603 427 603 400 609 411 596 411 596 380 604 399 599 390 728 383 733 403 734 373 605 375 606 380 604 403 628 404 615 426 622 404 615 403 628 383 623 390 728 403 734 406 722 431 571 426 569 442 566 431 571 442 566 451 568 406 573 426 569 431 571 380 604 375 606 399 599 400 609 382 610 411 596 404 615 400 609 427 603 380 604 411 596 382 610 403 575 426 569 406 573 431 571 451 568 460 565 436 570 431 571 460 565 412 574 406 573 436 570 406 573 431 571 436 570 352 727 381 724 361 721 361 721 381 724 393 720 381 724 406 722 393 720 393 720 406 722 412 718 361 721 308 731 352 727 315 726 308 731 361 721 458 559 460 565 451 568 475 554 495 551 484 558 475 554 484 558 458 559 458 559 484 558 460 565 490 541 495 551 475 554 490 541 500 540 495 551 497 528 500 540 490 541 315 726 213 735 211 738 310 730 213 735 315 726 310 730 209 737 213 735 309 464 209 463 310 477 309 464 215 455 209 463 339 450 215 455 309 464 202 436 215 455 339 450 327 443 202 436 339 450 327 443 207 431 202 436 332 437 207 431 327 443 126 491 128 496 121 484 121 484 128 496 136 497 128 496 142 506 136 497 136 497 142 506 156 507 142 506 163 514 156 507 163 514 182 519 156 507 156 507 182 519 173 515 173 746 182 744 190 742 182 744 208 736 190 742 190 742 208 736 211 738 372 239 363 245 365 242 363 757 344 758 365 759 363 245 350 255 344 260 350 72 337 75 344 77 337 662 307 659 344 661 337 75 321 71 307 74 307 74 321 71 296 67 296 67 160 70 307 74 130 660 161 654 129 658 129 658 161 654 160 656 298 155 161 152 299 149 127 486 133 495 126 491 132 500 133 495 127 486 148 503 133 495 132 500 148 503 150 509 133 495 172 511 150 509 148 503 176 516 150 509 172 511 206 619 200 633 195 626 195 626 200 633 172 637 200 633 176 636 172 637 222 343 311 348 219 354 311 348 306 360 219 354 306 360 331 373 214 361 219 354 306 360 214 361 212 621 326 602 221 618 319 627 326 602 212 621 218 374 319 386 212 395 331 373 319 386 218 374 214 361 331 373 218 374 304 613 344 607 206 619 221 618 304 613 206 619 326 602 304 613 221 618 381 724 383 733 390 728 383 623 351 620 404 615 404 615 351 620 400 609 351 620 382 610 400 609 382 610 324 616 380 604 373 605 324 616 338 617 380 604 324 616 373 605 352 727 349 732 381 724 381 724 349 732 383 733 349 629 351 620 383 623 351 620 324 616 382 610 308 731 349 732 352 727 314 740 349 732 308 731 314 630 351 620 349 629 314 630 305 624 351 620 351 620 305 624 324 616 315 726 208 736 308 731 211 738 208 736 315 726 210 625 176 636 200 633 210 625 177 635 176 636 150 509 176 516 177 517 164 512 150 509 177 517 157 518 143 505 164 512 126 491 133 495 128 496 133 495 143 505 128 496 133 495 150 509 143 505 216 639 187 640 220 631 187 640 203 632 220 631 164 643 178 646 157 647 187 640 178 646 164 643 187 640 198 645 178 646 178 747 198 743 182 744 198 743 208 736 182 744 198 743 223 739 208 736 163 514 154 513 182 519 142 506 154 513 163 514 178 520 182 519 154 513 157 518 178 520 154 513 223 739 198 743 216 745 210 625 203 632 177 635 143 505 150 509 164 512 143 505 142 506 128 496 143 505 154 513 142 506 157 518 154 513 143 505 177 635 187 640 164 643 177 635 203 632 187 640 187 640 216 639 198 645 161 654 338 648 200 655 298 653 338 648 161 654 161 654 200 655 160 656 160 656 200 655 206 657 307 659 160 656 206 657 344 661 307 659 206 657 308 731 208 736 223 739 308 731 223 739 314 740 223 642 216 639 314 630 314 630 216 639 220 631 314 630 220 631 305 624 305 624 220 631 324 616 324 616 220 631 203 632 203 632 210 625 324 616 324 616 210 625 338 617 210 625 200 633 338 617 102 101 94 98 81 97 110 104 102 101 83 99 94 98 102 101 183 105 110 196 231 201 192 204 230 111 192 107 231 115 102 101 192 107 230 111 102 760 230 761 188 762 235 763 188 762 230 761 102 764 188 765 235 766 102 767 235 768 183 769 228 108 183 105 235 112 94 98 183 105 228 108

158 |
159 |
160 | 161 | 162 | finger_tip_MShape 163 | 1 164 | 165 | 166 |
167 |
168 | 169 | 170 | 171 | 0 0 0 172 | 0 0 1 0 173 | 0 1 0 0 174 | 1 0 0 0 175 | 0.1 0.1 0.1 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | finger_tip_M 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 |
198 | --------------------------------------------------------------------------------