├── msg └── ps.msg ├── include ├── followingpath.txt ├── path_follow │ └── visual.h └── followingpath(复件).txt ├── readme.md ├── launch ├── visual_follow.launch └── rviz.rviz ├── package.xml ├── CMakeLists.txt └── src └── pathfollowP3dx.cpp /msg/ps.msg: -------------------------------------------------------------------------------- 1 | geometry_msgs/Point[] points -------------------------------------------------------------------------------- /include/followingpath.txt: -------------------------------------------------------------------------------- 1 | 0,0 2 | 0.5,0 3 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | 运行里面的launch文件,然后运行自己的gazebo仿真,注意对应好订阅发布的话题名即可。 -------------------------------------------------------------------------------- /launch/visual_follow.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | remap from="scan" to="scan"/> 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 | -------------------------------------------------------------------------------- /package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | path_follow 4 | 0.0.0 5 | The path_follow package 6 | 7 | 8 | 9 | 10 | bqc 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 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | catkin 52 | roscpp 53 | rospy 54 | std_msgs 55 | roscpp 56 | rospy 57 | std_msgs 58 | roscpp 59 | rospy 60 | std_msgs 61 | message_generation 62 | message_generation 63 | nav_msgs 64 | nav_msgs 65 | message_runtime 66 | message_generation 67 | 68 | sensor_msgs 69 | sensor_msgs 70 | tf 71 | tf 72 | 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /include/path_follow/visual.h: -------------------------------------------------------------------------------- 1 | /** 2 | * @file visual.h 3 | * @author bqc 4 | * @brief 点 点集 文本 线段 rviz可视化 5 | * @date 2021-11.20 6 | * @copyright Copyright (c) 2021 7 | * 8 | */ 9 | 10 | #ifndef VISUAL_H_ 11 | #define VISUAL_H_ 12 | 13 | #include "ros/ros.h" 14 | #include "visualization_msgs/Marker.h" 15 | #include "path_follow/ps.h" 16 | 17 | using namespace std; 18 | 19 | visualization_msgs::Marker Visual_line_list(string frame_, int32_t id_, path_follow::ps p_, float r, float g, float b) 20 | { 21 | visualization_msgs::Marker line_list; 22 | line_list.header.frame_id = frame_; 23 | line_list.header.stamp = ros::Time(0); 24 | line_list.ns = "markers"; 25 | line_list.id = id_; 26 | line_list.type = line_list.LINE_LIST; 27 | line_list.action = line_list.ADD; 28 | line_list.pose.orientation.w = 1.0; 29 | line_list.scale.x = 0.25; 30 | line_list.scale.y = 0.01; 31 | //line_list.scale.z = -0.15; 32 | line_list.color.r = r; 33 | line_list.color.g = g; 34 | line_list.color.b = b; 35 | line_list.color.a = 0.5; 36 | line_list.lifetime = ros::Duration(); 37 | for(int i = 0; i < p_.points.size(); i++) 38 | { 39 | line_list.points.push_back(p_.points[i]); 40 | } 41 | return line_list; 42 | } 43 | 44 | visualization_msgs::Marker Visual_point(string frame_, int32_t id_, float r, float g, float b, geometry_msgs::Point p_) 45 | { 46 | visualization_msgs::Marker point_vis; 47 | point_vis.header.frame_id = frame_; 48 | point_vis.header.stamp = ros::Time(0); 49 | point_vis.ns = "markers"; 50 | point_vis.id = id_; 51 | point_vis.type = point_vis.POINTS; 52 | point_vis.action = point_vis.ADD; 53 | point_vis.pose.orientation.w = 1.0; 54 | point_vis.scale.x = 0.8; 55 | point_vis.scale.y = 0.8; 56 | point_vis.color.g = g; 57 | point_vis.color.r = r; 58 | point_vis.color.b = b; 59 | point_vis.color.a = 1.0; 60 | point_vis.lifetime = ros::Duration(); 61 | point_vis.points.push_back(p_); 62 | return point_vis; 63 | } 64 | visualization_msgs::Marker Visual_point(string frame_, int32_t id_, float r, float g, float b, path_follow::ps visps_, float s_) 65 | { 66 | visualization_msgs::Marker point_vis; 67 | point_vis.header.frame_id = frame_; 68 | point_vis.header.stamp = ros::Time(0); 69 | point_vis.ns = "markers"; 70 | point_vis.id = id_; 71 | point_vis.type = point_vis.POINTS; 72 | point_vis.action = point_vis.ADD; 73 | point_vis.pose.orientation.w = 1.0; 74 | point_vis.scale.x = s_; 75 | point_vis.scale.y = s_; 76 | 77 | point_vis.color.g = g; 78 | point_vis.color.r = r; 79 | point_vis.color.b = b; 80 | point_vis.color.a = 1.0; 81 | point_vis.lifetime = ros::Duration(); 82 | for(int i =0; i < visps_.points.size(); i++) 83 | { 84 | point_vis.points.push_back(visps_.points[i]); 85 | } 86 | return point_vis; 87 | } 88 | 89 | visualization_msgs::Marker Visual_text(string frame_, int32_t id_, float r, float g, float b, geometry_msgs::Point p_,string text_string) 90 | { 91 | visualization_msgs::Marker text_vis; 92 | text_vis.header.frame_id = frame_; 93 | text_vis.header.stamp = ros::Time(0); 94 | text_vis.ns = "markers"; 95 | text_vis.id = id_; 96 | text_vis.type = text_vis.TEXT_VIEW_FACING; 97 | text_vis.action = text_vis.ADD; 98 | text_vis.pose.orientation.w = 1.0; 99 | text_vis.pose.position.x = p_.x; 100 | text_vis.pose.position.y = p_.y; 101 | text_vis.scale.x = 1.5; 102 | text_vis.scale.y = 1.5; 103 | text_vis.scale.z = 1.5; 104 | text_vis.color.r = r; 105 | text_vis.color.g = g; 106 | text_vis.color.b = b; 107 | text_vis.color.a = 1.0; 108 | text_vis.lifetime = ros::Duration(); 109 | text_vis.text = text_string; 110 | return text_vis; 111 | } 112 | #endif -------------------------------------------------------------------------------- /launch/rviz.rviz: -------------------------------------------------------------------------------- 1 | Panels: 2 | - Class: rviz/Displays 3 | Help Height: 78 4 | Name: Displays 5 | Property Tree Widget: 6 | Expanded: 7 | - /Global Options1 8 | - /Status1 9 | Splitter Ratio: 0.5 10 | Tree Height: 755 11 | - Class: rviz/Selection 12 | Name: Selection 13 | - Class: rviz/Tool Properties 14 | Expanded: 15 | - /2D Pose Estimate1 16 | - /2D Nav Goal1 17 | - /Publish Point1 18 | Name: Tool Properties 19 | Splitter Ratio: 0.5886790156364441 20 | - Class: rviz/Views 21 | Expanded: 22 | - /Current View1 23 | Name: Views 24 | Splitter Ratio: 0.5 25 | - Class: rviz/Time 26 | Experimental: false 27 | Name: Time 28 | SyncMode: 0 29 | SyncSource: "" 30 | Preferences: 31 | PromptSaveOnExit: true 32 | Toolbars: 33 | toolButtonStyle: 2 34 | Visualization Manager: 35 | Class: "" 36 | Displays: 37 | - Alpha: 0.5 38 | Cell Size: 1 39 | Class: rviz/Grid 40 | Color: 160; 160; 164 41 | Enabled: true 42 | Line Style: 43 | Line Width: 0.029999999329447746 44 | Value: Lines 45 | Name: Grid 46 | Normal Cell Count: 0 47 | Offset: 48 | X: 0 49 | Y: 0 50 | Z: 0 51 | Plane: XY 52 | Plane Cell Count: 10 53 | Reference Frame: 54 | Value: true 55 | - Class: rviz/Marker 56 | Enabled: true 57 | Marker Topic: /Assigned_vis 58 | Name: Marker 59 | Namespaces: 60 | markers: true 61 | Queue Size: 100 62 | Value: true 63 | - Alpha: 1 64 | Class: rviz/RobotModel 65 | Collision Enabled: false 66 | Enabled: true 67 | Links: 68 | All Links Enabled: true 69 | Expand Joint Details: false 70 | Expand Link Details: false 71 | Expand Tree: false 72 | Link Tree Style: Links in Alphabetic Order 73 | base_link: 74 | Alpha: 1 75 | Show Axes: false 76 | Show Trail: false 77 | battery0: 78 | Alpha: 1 79 | Show Axes: false 80 | Show Trail: false 81 | Value: true 82 | center_hubcap: 83 | Alpha: 1 84 | Show Axes: false 85 | Show Trail: false 86 | Value: true 87 | center_wheel: 88 | Alpha: 1 89 | Show Axes: false 90 | Show Trail: false 91 | Value: true 92 | chassis: 93 | Alpha: 1 94 | Show Axes: false 95 | Show Trail: false 96 | Value: true 97 | hokuyo_utm30lx_base_link: 98 | Alpha: 1 99 | Show Axes: false 100 | Show Trail: false 101 | Value: true 102 | hokuyo_utm30lx_link: 103 | Alpha: 1 104 | Show Axes: false 105 | Show Trail: false 106 | left_hub: 107 | Alpha: 1 108 | Show Axes: false 109 | Show Trail: false 110 | Value: true 111 | left_wheel: 112 | Alpha: 1 113 | Show Axes: false 114 | Show Trail: false 115 | Value: true 116 | right_hub: 117 | Alpha: 1 118 | Show Axes: false 119 | Show Trail: false 120 | Value: true 121 | right_wheel: 122 | Alpha: 1 123 | Show Axes: false 124 | Show Trail: false 125 | Value: true 126 | sonar: 127 | Alpha: 1 128 | Show Axes: false 129 | Show Trail: false 130 | Value: true 131 | swivel: 132 | Alpha: 1 133 | Show Axes: false 134 | Show Trail: false 135 | Value: true 136 | top: 137 | Alpha: 1 138 | Show Axes: false 139 | Show Trail: false 140 | Value: true 141 | Name: RobotModel 142 | Robot Description: robot_description 143 | TF Prefix: "" 144 | Update Interval: 0 145 | Value: true 146 | Visual Enabled: true 147 | Enabled: true 148 | Global Options: 149 | Background Color: 48; 48; 48 150 | Default Light: true 151 | Fixed Frame: map 152 | Frame Rate: 30 153 | Name: root 154 | Tools: 155 | - Class: rviz/Interact 156 | Hide Inactive Objects: true 157 | - Class: rviz/MoveCamera 158 | - Class: rviz/Select 159 | - Class: rviz/FocusCamera 160 | - Class: rviz/Measure 161 | - Class: rviz/SetInitialPose 162 | Theta std deviation: 0.2617993950843811 163 | Topic: /initialpose 164 | X std deviation: 0.5 165 | Y std deviation: 0.5 166 | - Class: rviz/SetGoal 167 | Topic: /move_base_simple/goal 168 | - Class: rviz/PublishPoint 169 | Single click: true 170 | Topic: /clicked_point 171 | Value: true 172 | Views: 173 | Current: 174 | Class: rviz/Orbit 175 | Distance: 15.735193252563477 176 | Enable Stereo Rendering: 177 | Stereo Eye Separation: 0.05999999865889549 178 | Stereo Focal Distance: 1 179 | Swap Stereo Eyes: false 180 | Value: false 181 | Focal Point: 182 | X: 1.1535999774932861 183 | Y: -0.7176034450531006 184 | Z: 0.5765437483787537 185 | Focal Shape Fixed Size: true 186 | Focal Shape Size: 0.05000000074505806 187 | Invert Z Axis: false 188 | Name: Current View 189 | Near Clip Distance: 0.009999999776482582 190 | Pitch: 1.5697963237762451 191 | Target Frame: 192 | Value: Orbit (rviz) 193 | Yaw: 4.723577499389648 194 | Saved: ~ 195 | Window Geometry: 196 | Displays: 197 | collapsed: true 198 | Height: 1052 199 | Hide Left Dock: true 200 | Hide Right Dock: true 201 | QMainWindow State: 000000ff00000000fd0000000400000000000001560000037efc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073000000003d0000037e000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f0000037efc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000003d0000037e000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000003c00000003efc0100000002fb0000000800540069006d00650100000000000003c0000002eb00fffffffb0000000800540069006d00650100000000000004500000000000000000000003c00000037e00000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 202 | Selection: 203 | collapsed: false 204 | Time: 205 | collapsed: false 206 | Tool Properties: 207 | collapsed: false 208 | Views: 209 | collapsed: true 210 | Width: 960 211 | X: 0 212 | Y: 0 213 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.0.2) 2 | project(path_follow) 3 | 4 | ## Compile as C++11, supported in ROS Kinetic and newer 5 | # add_compile_options(-std=c++11) 6 | 7 | ## Find catkin macros and libraries 8 | ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) 9 | ## is used, also find other catkin packages 10 | find_package(catkin REQUIRED COMPONENTS 11 | roscpp 12 | rospy 13 | std_msgs 14 | tf 15 | pcl_ros 16 | message_generation 17 | sensor_msgs 18 | nav_msgs 19 | ) 20 | 21 | ## System dependencies are found with CMake's conventions 22 | # find_package(Boost REQUIRED COMPONENTS system) 23 | 24 | # Eigen3 25 | find_package(Eigen3 REQUIRED) 26 | if(Eigen3_FOUND) 27 | message(STATUS ${EIGEN3_INCLUDE_DIRS}) 28 | endif() 29 | 30 | ## Uncomment this if the package has a setup.py. This macro ensures 31 | ## modules and global scripts declared therein get installed 32 | ## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html 33 | # catkin_python_setup() 34 | 35 | ################################################ 36 | ## Declare ROS messages, services and actions ## 37 | ################################################ 38 | 39 | ## To declare and build messages, services or actions from within this 40 | ## package, follow these steps: 41 | ## * Let MSG_DEP_SET be the set of packages whose message types you use in 42 | ## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). 43 | ## * In the file package.xml: 44 | ## * add a build_depend tag for "message_generation" 45 | ## * add a build_depend and a exec_depend tag for each package in MSG_DEP_SET 46 | ## * If MSG_DEP_SET isn't empty the following dependency has been pulled in 47 | ## but can be declared for certainty nonetheless: 48 | ## * add a exec_depend tag for "message_runtime" 49 | ## * In this file (CMakeLists.txt): 50 | ## * add "message_generation" and every package in MSG_DEP_SET to 51 | ## find_package(catkin REQUIRED COMPONENTS ...) 52 | ## * add "message_runtime" and every package in MSG_DEP_SET to 53 | ## catkin_package(CATKIN_DEPENDS ...) 54 | ## * uncomment the add_*_files sections below as needed 55 | ## and list every .msg/.srv/.action file to be processed 56 | ## * uncomment the generate_messages entry below 57 | ## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) 58 | 59 | ## Generate messages in the 'msg' folder 60 | # add_message_files( 61 | # FILES 62 | # Message1.msg 63 | # Message2.msg 64 | # ) 65 | add_message_files(FILES 66 | ps.msg 67 | ) 68 | generate_messages(DEPENDENCIES 69 | std_msgs 70 | nav_msgs 71 | ) 72 | ## Generate services in the 'srv' folder 73 | # add_service_files( 74 | # FILES 75 | # Service1.srv 76 | # Service2.srv 77 | # ) 78 | 79 | ## Generate actions in the 'action' folder 80 | # add_action_files( 81 | # FILES 82 | # Action1.action 83 | # Action2.action 84 | # ) 85 | 86 | ## Generate added messages and services with any dependencies listed here 87 | # generate_messages( 88 | # DEPENDENCIES 89 | # std_msgs 90 | # ) 91 | 92 | ################################################ 93 | ## Declare ROS dynamic reconfigure parameters ## 94 | ################################################ 95 | 96 | ## To declare and build dynamic reconfigure parameters within this 97 | ## package, follow these steps: 98 | ## * In the file package.xml: 99 | ## * add a build_depend and a exec_depend tag for "dynamic_reconfigure" 100 | ## * In this file (CMakeLists.txt): 101 | ## * add "dynamic_reconfigure" to 102 | ## find_package(catkin REQUIRED COMPONENTS ...) 103 | ## * uncomment the "generate_dynamic_reconfigure_options" section below 104 | ## and list every .cfg file to be processed 105 | 106 | ## Generate dynamic reconfigure parameters in the 'cfg' folder 107 | # generate_dynamic_reconfigure_options( 108 | # cfg/DynReconf1.cfg 109 | # cfg/DynReconf2.cfg 110 | # ) 111 | 112 | ################################### 113 | ## catkin specific configuration ## 114 | ################################### 115 | ## The catkin_package macro generates cmake config files for your package 116 | ## Declare things to be passed to dependent projects 117 | ## INCLUDE_DIRS: uncomment this if your package contains header files 118 | ## LIBRARIES: libraries you create in this project that dependent projects also need 119 | ## CATKIN_DEPENDS: catkin_packages dependent projects also need 120 | ## DEPENDS: system dependencies of this project that dependent projects also need 121 | catkin_package( 122 | INCLUDE_DIRS include 123 | CATKIN_DEPENDS roscpp rospy sensor_msgs std_msgs tf message_runtime 124 | DEPENDS system_lib 125 | ) 126 | 127 | ########### 128 | ## Build ## 129 | ########### 130 | 131 | ## Specify additional locations of header files 132 | ## Your package locations should be listed before other locations 133 | include_directories( 134 | # include 135 | ${catkin_INCLUDE_DIRS} 136 | ${EIGEN3_INCLUDE_DIRS} 137 | ) 138 | 139 | ## Declare a C++ library 140 | # add_library(${PROJECT_NAME} 141 | # src/${PROJECT_NAME}/path_follow.cpp 142 | # ) 143 | add_executable(pathfollowP3dx src/pathfollowP3dx.cpp) 144 | target_link_libraries(pathfollowP3dx 145 | ${catkin_LIBRARIES}) 146 | ## Add cmake target dependencies of the library 147 | ## as an example, code may need to be generated before libraries 148 | ## either from message generation or dynamic reconfigure 149 | # add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 150 | 151 | ## Declare a C++ executable 152 | ## With catkin_make all packages are built within a single CMake context 153 | ## The recommended prefix ensures that target names across packages don't collide 154 | # add_executable(${PROJECT_NAME}_node src/path_follow_node.cpp) 155 | 156 | ## Rename C++ executable without prefix 157 | ## The above recommended prefix causes long target names, the following renames the 158 | ## target back to the shorter version for ease of user use 159 | ## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node" 160 | # set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "") 161 | 162 | ## Add cmake target dependencies of the executable 163 | ## same as for the library above 164 | # add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 165 | 166 | ## Specify libraries to link a library or executable target against 167 | # target_link_libraries(${PROJECT_NAME}_node 168 | # ${catkin_LIBRARIES} 169 | # ) 170 | 171 | ############# 172 | ## Install ## 173 | ############# 174 | 175 | # all install targets should use catkin DESTINATION variables 176 | # See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html 177 | 178 | ## Mark executable scripts (Python etc.) for installation 179 | ## in contrast to setup.py, you can choose the destination 180 | # catkin_install_python(PROGRAMS 181 | # scripts/my_python_script 182 | # DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 183 | # ) 184 | 185 | ## Mark executables for installation 186 | ## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_executables.html 187 | # install(TARGETS ${PROJECT_NAME}_node 188 | # RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 189 | # ) 190 | 191 | ## Mark libraries for installation 192 | ## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html 193 | # install(TARGETS ${PROJECT_NAME} 194 | # ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 195 | # LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 196 | # RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION} 197 | # ) 198 | 199 | ## Mark cpp header files for installation 200 | # install(DIRECTORY include/${PROJECT_NAME}/ 201 | # DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} 202 | # FILES_MATCHING PATTERN "*.h" 203 | # PATTERN ".svn" EXCLUDE 204 | # ) 205 | 206 | ## Mark other files for installation (e.g. launch and bag files, etc.) 207 | # install(FILES 208 | # # myfile1 209 | # # myfile2 210 | # DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 211 | # ) 212 | 213 | ############# 214 | ## Testing ## 215 | ############# 216 | 217 | ## Add gtest based cpp test target and link libraries 218 | # catkin_add_gtest(${PROJECT_NAME}-test test/test_path_follow.cpp) 219 | # if(TARGET ${PROJECT_NAME}-test) 220 | # target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) 221 | # endif() 222 | 223 | ## Add folders to be run by python nosetests 224 | # catkin_add_nosetests(test) 225 | -------------------------------------------------------------------------------- /src/pathfollowP3dx.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | 16 | #include 17 | #include 18 | #include 19 | #include 20 | #include 21 | 22 | //自定义消息 23 | #include "path_follow/ps.h" 24 | //可视化 25 | #include "/home/bqc/catkin_mp_ws/src/path_follow/include/path_follow/visual.h" //TODO 需要修改路径 26 | visualization_msgs::Marker assigned_goal_vis; 27 | path_follow::ps pps; 28 | 29 | ros::Subscriber poseSub_; 30 | ros::Publisher cmd_velPub_; 31 | geometry_msgs::Twist vel_des_; 32 | Eigen::Vector3d pose_des_; 33 | Eigen::Vector3d pose_cur_; 34 | std::string wp_flie_path_; 35 | std::vector > des_pose_; 36 | // constraints 37 | double theta_err2_, max_angular_vel_, max_linear_vel_, dis_toNextTarget_; 38 | // control gains 39 | double kp_, ki_, kd_; 40 | // flags 41 | bool isToMove_, initTracking_; 42 | // kdTree used for target finding 43 | pcl::KdTreeFLANN::Ptr kdtreeGlobalPath_; 44 | pcl::PointCloud::Ptr path_pcl_; 45 | pcl::PointXY tmp_node_; 46 | std::vector nearestIndex_; 47 | std::vector nearestDis_; 48 | int tarIndex_; 49 | float tarDis_; 50 | 51 | inline double Distance(double x1, double y1, double x2, double y2) 52 | { 53 | double dx = x2 - x1; 54 | double dy = y2 - y1; 55 | double dist = hypot(dx, dy); 56 | return dist; 57 | } 58 | 59 | inline bool isGoalReached(const Eigen::Vector3d& robot_pose) 60 | { 61 | double distance = 62 | Distance(robot_pose[0], robot_pose[1], des_pose_[des_pose_.size()-1][0], des_pose_[des_pose_.size()-1][1]); 63 | 64 | if (distance < 0.3) 65 | return true; 66 | else 67 | return false; 68 | } 69 | 70 | inline double NormalizeAngle(double angle) 71 | { 72 | while (angle < -M_PI) 73 | { 74 | if (angle < -(2.0 * M_PI)) 75 | { 76 | angle += (int)(angle / -(2.0 * M_PI)) * (2.0 * M_PI); 77 | } 78 | else 79 | { 80 | angle += (2.0 * M_PI); 81 | } 82 | } 83 | 84 | while (angle > M_PI) 85 | { 86 | if (angle > (2.0 * M_PI)) 87 | { 88 | angle -= (int)(angle / (2.0 * M_PI)) * (2.0 * M_PI); 89 | } 90 | else 91 | { 92 | angle -= (2.0 * M_PI); 93 | } 94 | } 95 | 96 | assert(angle >= -M_PI && angle <= M_PI); 97 | 98 | return angle; 99 | } 100 | 101 | inline void getTarget(Eigen::Vector3d& targetPose) 102 | { 103 | if(des_pose_.empty()){ 104 | 105 | ROS_ERROR("no path, so no target to track!!!"); 106 | exit(0); 107 | } 108 | 109 | // get the nearest waypoint 110 | tmp_node_.x = (float)pose_cur_[0]; 111 | tmp_node_.y = (float)pose_cur_[1]; 112 | kdtreeGlobalPath_->nearestKSearch(tmp_node_, 1, nearestIndex_, nearestDis_); 113 | int globalPath_size = des_pose_.size(); 114 | 115 | // extend the target forward by dis_toNextTarget_ 116 | tarIndex_ = nearestIndex_[0]; 117 | tarDis_ = nearestDis_[0]; 118 | for(size_t idx = nearestIndex_[0] + 1; idx < globalPath_size; ++idx){ 119 | if(tarDis_ < dis_toNextTarget_) 120 | { 121 | tarIndex_ = idx; 122 | tarDis_ = sqrt( pow((des_pose_[idx][0] - tmp_node_.x), 2) + 123 | pow((des_pose_[idx][1] - tmp_node_.y), 2) ); 124 | } else { 125 | break; 126 | } 127 | } 128 | 129 | targetPose[0] = des_pose_[tarIndex_][0]; 130 | targetPose[1] = des_pose_[tarIndex_][1]; 131 | targetPose[2] = 0.0; 132 | } 133 | 134 | inline void controller(const Eigen::Vector3d& targetPose, geometry_msgs::Twist& Twist) 135 | { 136 | // linear velocity 137 | double dis_ = Distance(pose_des_[0], pose_des_[1], pose_cur_[0], pose_cur_[1]); 138 | Twist.linear.x = kp_ * dis_; 139 | 140 | // angular velocity 141 | double theta = atan2(pose_des_[1] - pose_cur_[1], pose_des_[0] - pose_cur_[0]); 142 | double theta_err1 = NormalizeAngle(theta - pose_cur_[2]); 143 | if(initTracking_) 144 | { 145 | ROS_INFO("Iniliatizing"); 146 | Twist.linear.x = 0.0; 147 | Twist.angular.z = 0.5 * theta_err1; 148 | if (Twist.angular.z > max_angular_vel_) 149 | Twist.angular.z = max_angular_vel_; 150 | else if (Twist.angular.z < -max_angular_vel_) 151 | Twist.angular.z = -max_angular_vel_; 152 | 153 | if(fabs(theta_err1) < 0.174) 154 | initTracking_ = false; 155 | return; 156 | } 157 | // ROS_WARN("Initialization completed!"); 158 | Twist.angular.z = 0.5 * kp_ * theta_err1 + kd_ * NormalizeAngle(theta_err1 - theta_err2_); 159 | 160 | if (Twist.angular.z > max_angular_vel_) 161 | Twist.angular.z = max_angular_vel_; 162 | else if (Twist.angular.z < -max_angular_vel_) 163 | Twist.angular.z = -max_angular_vel_; 164 | 165 | if(Twist.linear.x > max_linear_vel_) 166 | Twist.linear.x = max_linear_vel_; 167 | else if(Twist.linear.x < -max_linear_vel_) 168 | Twist.linear.x = -max_linear_vel_; 169 | } 170 | 171 | void poseCallback(const nav_msgs::Odometry& current_Pose) 172 | { 173 | pose_cur_[0] = current_Pose.pose.pose.position.x; 174 | pose_cur_[1] = current_Pose.pose.pose.position.y; 175 | pose_cur_[2] = tf::getYaw(current_Pose.pose.pose.orientation); 176 | // std::cout << "current yaw angle: " << pose_cur_[2] << std::endl; 177 | if(isGoalReached(pose_cur_)) { 178 | isToMove_ = false; 179 | cmd_velPub_.shutdown(); 180 | ROS_INFO("Path tracking is finished!"); 181 | } 182 | } 183 | 184 | bool txt2Vector(std::vector< std::vector >& res, const std::string& filename , path_follow::ps & visps) 185 | { 186 | std::fstream input_file; 187 | input_file.open(filename, std::ios::in); 188 | assert(input_file.is_open()); 189 | std::string str; 190 | while (getline(input_file, str)) 191 | { 192 | std::vector temp; 193 | // std::istringstream is(str);// 将读出的一行转化为数据流进行操作 194 | // string->char * 195 | char *s_input = (char *)str.c_str(); 196 | const char *split = ","; 197 | // 以‘,’为分隔符拆分字符串 198 | char *p = strtok(s_input, split); 199 | double a; 200 | while (p != NULL) 201 | { 202 | // char * -> int 203 | a = atof(p); 204 | // cout << a << "|"; 205 | temp.push_back(a); 206 | p = strtok(NULL, split); 207 | } //end while 208 | 209 | res.push_back(temp); 210 | } 211 | input_file.close(); 212 | if (res.size() == 0) { 213 | std::cout << res.size() << std::endl; 214 | return false; 215 | } 216 | for(int i = 0; i < res.size(); i++) 217 | { 218 | 219 | 220 | geometry_msgs::Point pp; 221 | pp.x = res[i][0]; 222 | pp.y = res[i][1]; 223 | visps.points.push_back(pp); 224 | // assigned_goal_vis = Visual_point(mapData.header.frame_id, 1, 1.0, 0.0, 0.0, visps, 0.4); 225 | // Assigned_visual_pub.publish(assigned_goal_vis); 226 | } 227 | ROS_WARN("waypoints number is : %d", res.size()); 228 | // int i = 0; 229 | // while (i < res.size()) { 230 | // std::cout << res[i][0] << "..." << res[i][1] << std::endl; 231 | // i++; 232 | // } 233 | return true; 234 | } 235 | 236 | bool setParam() 237 | { 238 | bool ret = true; 239 | //路径点储存位置 240 | wp_flie_path_ = "/home/bqc/catkin_mp_ws/src/path_follow/include/followingpath.txt"; //TODO 需要修改路径 241 | if (!ros::param::get( "/wp_path", wp_flie_path_)) { 242 | ROS_WARN("No wp_path found. Looking for %s. Default is txt.", 243 | "/wp_path"); 244 | } 245 | max_angular_vel_ = 0.3; 246 | if (!ros::param::get("/max_angular_vel", max_angular_vel_)) { 247 | ROS_WARN("No max_angular_vel constraint found. Looking for %s. Default value is 0.5.", "/max_angular_vel"); 248 | } 249 | max_linear_vel_ = 0.55; 250 | if (!ros::param::get("/max_linear_vel", max_linear_vel_)) { 251 | ROS_WARN("No max_linear_vel constraint found. Looking for %s. Default value is 0.3.", "/max_linear_vel"); 252 | } 253 | kp_ = 1.0; 254 | if (!ros::param::get( "/kp", kp_)) { 255 | ROS_WARN("No propotion gain found. Looking for %s. Default value is 1.0.", "/kp"); 256 | } 257 | 258 | ki_ = 1.0; 259 | if (!ros::param::get("/ki", ki_)) { 260 | ROS_WARN("No integral gain found. Looking for %s. Default value is 1.0.", "/ki"); 261 | } 262 | 263 | kd_ = 0.8; 264 | if (!ros::param::get("/kd", kd_)) { 265 | ROS_WARN("No differential gain found. Looking for %s. Default value is 1.0.", "/kd"); 266 | } 267 | 268 | dis_toNextTarget_ = 0.5; 269 | if (!ros::param::get("/dis_toNextTarget", dis_toNextTarget_)) { 270 | ROS_WARN("No dis_toNextTarget found. Looking for %s. Default value is 0.3.", "/dis_toNextTarget"); 271 | } 272 | 273 | return ret; 274 | } 275 | 276 | int main(int argc, char** argv) 277 | { 278 | ros::init(argc, argv, "p3dx_vel"); 279 | ros::NodeHandle nh; 280 | ros::Publisher Assigned_visual_pub = nh.advertise("/Assigned_vis", 10); 281 | if (!setParam()) 282 | { 283 | ROS_ERROR("Could not configure the required parammeters!"); 284 | } 285 | // subcribers 286 | poseSub_ = nh.subscribe("/RosAria/pose", 10, poseCallback); 287 | 288 | // publishers 289 | cmd_velPub_ = nh.advertise("/RosAria/cmd_vel", 10); 290 | 291 | if (!txt2Vector(des_pose_, wp_flie_path_, pps)) { 292 | ROS_ERROR("Could not get the desired pose data!"); 293 | } 294 | 295 | 296 | // creat kdTree for target searching 297 | kdtreeGlobalPath_.reset(new pcl::KdTreeFLANN()); 298 | path_pcl_.reset(new pcl::PointCloud); 299 | nearestIndex_.resize(2); 300 | nearestDis_.resize(2); 301 | int i = 0; 302 | path_pcl_->clear(); 303 | while (i < des_pose_.size()) { 304 | tmp_node_.x = (float)des_pose_[i][0]; 305 | tmp_node_.y = (float)des_pose_[i][1]; 306 | path_pcl_->push_back(tmp_node_); 307 | i++; 308 | } 309 | kdtreeGlobalPath_->setInputCloud(path_pcl_); 310 | 311 | theta_err2_ = 0.0; 312 | initTracking_ = true; 313 | ros::Rate loop_rate_(50); 314 | while (ros::ok()) { assigned_goal_vis = Visual_point("map", 1, 1.0, 0.0, 0.0, pps, 0.08); 315 | Assigned_visual_pub.publish(assigned_goal_vis); 316 | // PID controller 317 | // get local target position 318 | getTarget(pose_des_); 319 | 320 | // calculate desired velocity 321 | geometry_msgs::Twist cmd_vel; 322 | controller(pose_des_, cmd_vel); 323 | 324 | // publish velocity 325 | cmd_velPub_.publish(cmd_vel); 326 | 327 | ros::spinOnce(); 328 | loop_rate_.sleep(); 329 | } 330 | 331 | return 0; 332 | } 333 | 334 | 335 | -------------------------------------------------------------------------------- /include/followingpath(复件).txt: -------------------------------------------------------------------------------- 1 | 0.004688 , -0.000000 2 | 0.004688 , -0.000000 3 | 0.006250 , 0.003125 4 | 0.005625 , 0.003125 5 | 0.004688 , 0.003125 6 | 0.005313 , 0.001875 7 | 0.006250 , -0.000000 8 | 0.006250 , 0.001562 9 | 0.007500 , 0.001562 10 | 0.009374 , 0.001562 11 | 0.007812 , 0.001562 12 | 0.007812 , 0.000937 13 | 0.007812 , -0.000000 14 | 0.009375 , -0.000000 15 | 0.009374 , 0.001250 16 | 0.009374 , 0.003125 17 | 0.007812 , 0.003125 18 | 0.008437 , 0.002499 19 | 0.009374 , 0.001562 20 | 0.009374 , -0.000001 21 | 0.009374 , 0.000624 22 | 0.009374 , 0.001562 23 | 0.010937 , 0.003124 24 | 0.010937 , 0.003124 25 | 0.010937 , 0.003124 26 | 0.010937 , 0.002499 27 | 0.010937 , 0.001561 28 | 0.010937 , 0.001562 29 | 0.011562 , 0.001562 30 | 0.012499 , 0.001561 31 | 0.010937 , 0.001561 32 | 0.010937 , 0.002499 33 | 0.010937 , 0.003124 34 | 0.009374 , 0.001561 35 | 0.009999 , 0.000936 36 | 0.010937 , -0.000001 37 | 0.012499 , 0.004686 38 | 0.012499 , 0.004686 39 | 0.010937 , 0.003124 40 | 0.011562 , 0.003124 41 | 0.012499 , 0.003124 42 | 0.010937 , 0.001561 43 | 0.010938 , 0.002812 44 | 0.010938 , 0.004688 45 | 0.010938 , 0.004688 46 | 0.010938 , 0.003438 47 | 0.010938 , 0.001563 48 | 0.012500 , 0.004688 49 | 0.012500 , 0.005313 50 | 0.012500 , 0.006250 51 | 0.012500 , 0.006250 52 | 0.012500 , 0.001563 53 | 0.012500 , 0.001563 54 | 0.012500 , 0.003125 55 | 0.012500 , 0.001563 56 | 0.012500 , 0.001563 57 | 0.010938 , 0.006250 58 | 0.011563 , 0.004375 59 | 0.012500 , 0.001563 60 | 0.011875 , 0.002813 61 | 0.010938 , 0.004688 62 | 0.010938 , 0.002813 63 | 0.010938 , 0.000000 64 | 0.012500 , 0.003125 65 | 0.012500 , 0.003125 66 | 0.012500 , 0.004375 67 | 0.012500 , 0.006250 68 | 0.012500 , 0.000000 69 | 0.011875 , 0.001250 70 | 0.010938 , 0.003125 71 | 0.012500 , 0.004688 72 | 0.012500 , 0.002813 73 | 0.012500 , 0.000000 74 | 0.012500 , 0.001250 75 | 0.012500 , 0.003750 76 | 0.012500 , 0.004688 77 | 0.012500 , 0.001563 78 | 0.012500 , 0.001563 79 | 0.014063 , 0.003125 80 | 0.013438 , 0.003125 81 | 0.012500 , 0.003125 82 | 0.012500 , 0.001563 83 | 0.012500 , 0.002188 84 | 0.012500 , 0.003125 85 | 0.014063 , 0.001563 86 | 0.014063 , 0.001563 87 | 0.014063 , 0.001563 88 | 0.014063 , 0.003125 89 | 0.013438 , 0.003750 90 | 0.012500 , 0.004688 91 | 0.012500 , 0.004688 92 | 0.011875 , 0.004063 93 | 0.010938 , 0.003125 94 | 0.012500 , 0.004688 95 | 0.012500 , 0.003438 96 | 0.012500 , 0.001563 97 | 0.013125 , 0.003438 98 | 0.014063 , 0.006250 99 | 0.012500 , 0.003125 100 | 0.013125 , 0.005000 101 | 0.014063 , 0.007813 102 | 0.014063 , 0.003125 103 | 0.013438 , 0.004375 104 | 0.012500 , 0.006250 105 | 0.012500 , 0.005000 106 | 0.012500 , 0.003125 107 | 0.014063 , 0.004688 108 | 0.014063 , 0.006563 109 | 0.014063 , 0.009375 110 | 0.014063 , 0.003125 111 | 0.013438 , 0.001875 112 | 0.012500 , 0.000000 113 | 0.013125 , 0.000625 114 | 0.014063 , 0.002188 115 | 0.014063 , 0.003125 116 | 0.013438 , 0.003750 117 | 0.013125 , 0.004688 118 | 0.014063 , 0.004688 119 | 0.014063 , 0.003125 120 | 0.014063 , 0.003125 121 | 0.012500 , 0.004688 122 | 0.013125 , 0.004062 123 | 0.014062 , 0.003124 124 | 0.014063 , 0.003125 125 | 0.012500 , 0.003125 126 | 0.012500 , 0.003125 127 | 0.014063 , 0.003124 128 | 0.014063 , 0.003124 129 | 0.014063 , 0.007812 130 | 0.013438 , 0.006562 131 | 0.012500 , 0.004062 132 | 0.012500 , 0.003124 133 | 0.012500 , 0.003124 134 | 0.013125 , 0.003749 135 | 0.014063 , 0.004687 136 | 0.012500 , 0.001562 137 | 0.012500 , 0.001562 138 | 0.014063 , 0.006249 139 | 0.014063 , 0.006249 140 | 0.014063 , 0.006249 141 | 0.014063 , 0.004687 142 | 0.014063 , 0.004687 143 | 0.014063 , 0.004687 144 | 0.014063 , 0.003124 145 | 0.012500 , 0.003124 146 | 0.012500 , 0.003124 147 | 0.014063 , 0.003124 148 | 0.014063 , 0.003124 149 | 0.012500 , 0.007811 150 | 0.012500 , 0.007811 151 | 0.014063 , 0.004686 152 | 0.013438 , 0.004061 153 | 0.012500 , 0.003124 154 | 0.012500 , 0.003124 155 | 0.014063 , 0.004687 156 | 0.012500 , 0.004687 157 | 0.012500 , 0.004062 158 | 0.012500 , 0.003124 159 | 0.013125 , 0.003749 160 | 0.014063 , 0.004686 161 | 0.012500 , 0.004686 162 | 0.013125 , 0.003436 163 | 0.014063 , 0.001561 164 | 0.014063 , 0.004686 165 | 0.012500 , 0.004686 166 | 0.012500 , 0.004061 167 | 0.012500 , 0.003124 168 | 0.012500 , 0.003124 169 | 0.013125 , 0.003749 170 | 0.013438 , 0.004062 171 | 0.012500 , 0.003124 172 | 0.012500 , 0.003124 173 | 0.014063 , 0.003124 174 | 0.014063 , 0.004374 175 | 0.014063 , 0.006249 176 | 0.014063 , 0.004687 177 | 0.013438 , 0.003437 178 | 0.012500 , 0.001562 179 | 0.012500 , 0.009374 180 | 0.012500 , 0.009374 181 | 0.014063 , 0.004687 182 | 0.014063 , 0.004687 183 | 0.013438 , 0.004062 184 | 0.012500 , 0.003124 185 | 0.012500 , 0.004687 186 | 0.012500 , 0.005312 187 | 0.012500 , 0.006249 188 | 0.013125 , 0.005624 189 | 0.014063 , 0.004687 190 | 0.014063 , 0.004687 191 | 0.010937 , 0.003124 192 | 0.014062 , 0.003124 193 | 0.014062 , 0.003124 194 | 0.012500 , 0.004687 195 | 0.012500 , 0.004687 196 | 0.012500 , 0.005312 197 | 0.012500 , 0.006249 198 | 0.013125 , 0.005624 199 | 0.014063 , 0.004687 200 | 0.012500 , 0.001562 201 | 0.011875 , 0.002187 202 | 0.010937 , 0.003124 203 | 0.012500 , 0.001562 204 | 0.012500 , 0.003437 205 | 0.012500 , 0.006249 206 | 0.014062 , 0.004687 207 | 0.013437 , 0.005312 208 | 0.012500 , 0.006249 209 | 0.012500 , 0.004687 210 | 0.012500 , 0.004687 211 | 0.012500 , 0.003437 212 | 0.012500 , 0.001562 213 | 0.014063 , 0.006249 214 | 0.014063 , 0.004374 215 | 0.014063 , 0.001562 216 | 0.012500 , 0.004687 217 | 0.012500 , 0.004687 218 | 0.012500 , 0.004687 219 | 0.013125 , 0.004687 220 | 0.013438 , 0.004062 221 | 0.012500 , 0.003124 222 | 0.012500 , 0.003124 223 | 0.012500 , 0.003124 224 | 0.013125 , 0.003749 225 | 0.014063 , 0.004687 226 | 0.014063 , 0.003124 227 | 0.014063 , 0.003749 228 | 0.014063 , 0.004687 229 | 0.012500 , 0.006249 230 | 0.012500 , 0.006249 231 | 0.013125 , 0.005624 232 | 0.014063 , 0.004687 233 | 0.014063 , 0.004687 234 | 0.014063 , 0.003124 235 | 0.013438 , 0.003124 236 | 0.012500 , 0.003124 237 | 0.012500 , 0.009374 238 | 0.012500 , 0.009374 239 | 0.014063 , -0.000001 240 | 0.013438 , 0.002499 241 | 0.012500 , 0.006249 242 | 0.012500 , 0.006249 243 | 0.012500 , 0.006249 244 | 0.012500 , 0.003124 245 | 0.012500 , 0.004374 246 | 0.012500 , 0.006249 247 | 0.014063 , 0.006249 248 | 0.014063 , 0.006249 249 | 0.012500 , 0.001562 250 | 0.012500 , 0.002187 251 | 0.012500 , 0.003125 252 | 0.012500 , 0.003125 253 | 0.012500 , 0.004687 254 | 0.012500 , 0.005312 255 | 0.012500 , 0.006249 256 | 0.012500 , 0.006249 257 | 0.014063 , 0.003124 258 | 0.014063 , 0.003124 259 | 0.012500 , 0.004687 260 | 0.012500 , 0.003437 261 | 0.012500 , 0.002187 262 | 0.012500 , 0.003124 263 | 0.014063 , 0.006249 264 | 0.014063 , 0.006249 265 | 0.014063 , 0.006250 266 | 0.012500 , 0.003124 267 | 0.012500 , 0.003750 268 | 0.012500 , 0.004687 269 | 0.012500 , 0.005312 270 | 0.012500 , 0.006250 271 | 0.012500 , 0.006250 272 | 0.012500 , 0.006249 273 | 0.012500 , 0.006249 274 | 0.013125 , 0.004999 275 | 0.014063 , 0.003125 276 | 0.012500 , 0.004687 277 | 0.012500 , 0.004062 278 | 0.012500 , 0.003125 279 | 0.012500 , 0.006249 280 | 0.012500 , 0.005624 281 | 0.012500 , 0.004687 282 | 0.013125 , 0.004062 283 | 0.014063 , 0.003125 284 | 0.012500 , 0.003125 285 | 0.014063 , 0.004687 286 | 0.013438 , 0.004687 287 | 0.012501 , 0.004687 288 | 0.014063 , 0.004687 289 | 0.014063 , 0.004687 290 | 0.014063 , 0.004062 291 | 0.014063 , 0.003124 292 | 0.012501 , 0.003124 293 | 0.012500 , 0.004374 294 | 0.012500 , 0.006249 295 | 0.012500 , 0.006249 296 | 0.013125 , 0.006874 297 | 0.014063 , 0.007187 298 | 0.014063 , 0.006249 299 | 0.012501 , 0.003124 300 | 0.012501 , 0.003749 301 | 0.012501 , 0.004687 302 | 0.012501 , 0.004687 303 | 0.017189 , 0.002945 304 | 0.016564 , 0.003570 305 | 0.015626 , 0.004507 306 | 0.017189 , 0.004507 307 | 0.017189 , 0.004507 308 | 0.015626 , 0.001382 309 | 0.015626 , 0.001382 310 | 0.015626 , 0.001382 311 | 0.017188 , -0.000180 312 | 0.017188 , 0.002945 313 | 0.017188 , 0.003570 314 | 0.017188 , 0.004507 315 | 0.017188 , 0.004507 316 | 0.016563 , 0.004507 317 | 0.015626 , 0.004507 318 | 0.017188 , -0.000180 319 | 0.017188 , -0.000180 320 | 0.015626 , 0.002945 321 | 0.016251 , 0.004195 322 | 0.017188 , 0.006070 323 | 0.017188 , 0.002945 324 | 0.017188 , 0.003570 325 | 0.017187 , 0.004507 326 | 0.015625 , 0.001382 327 | 0.015625 , 0.001382 328 | 0.015625 , 0.001382 329 | 0.018750 , -0.001743 330 | 0.018125 , -0.000493 331 | 0.017187 , 0.001382 332 | 0.015625 , 0.001382 333 | 0.015625 , -0.000181 334 | 0.015625 , -0.000181 335 | 0.017187 , 0.001382 336 | 0.017187 , 0.001382 337 | 0.016562 , 0.001382 338 | 0.015625 , 0.001382 339 | 0.017187 , 0.002944 340 | 0.018125 , 0.002944 341 | 0.018750 , 0.002944 342 | 0.017187 , 0.006069 343 | 0.016562 , 0.005444 344 | 0.015625 , 0.004507 345 | 0.015625 , 0.001382 346 | 0.015625 , 0.001382 347 | 0.018750 , 0.001382 348 | 0.016875 , 0.002632 349 | 0.014062 , 0.004507 350 | 0.014687 , 0.003882 351 | 0.015625 , 0.002945 352 | 0.015624 , 0.001382 353 | 0.015624 , 0.002007 354 | 0.016249 , 0.002945 355 | 0.017187 , 0.002945 356 | 0.017187 , 0.002945 357 | 0.017187 , 0.004195 358 | 0.017187 , 0.006070 359 | 0.017187 , 0.001382 360 | 0.017187 , 0.001382 361 | 0.015624 , 0.002945 362 | 0.015625 , 0.002945 363 | 0.015625 , 0.002945 364 | 0.017187 , 0.001382 365 | 0.016562 , 0.002632 366 | 0.015624 , 0.004507 367 | 0.015624 , 0.001382 368 | 0.015624 , 0.002007 369 | 0.015624 , 0.002945 370 | 0.015624 , 0.002945 371 | 0.017187 , 0.006070 372 | 0.017187 , 0.003570 373 | 0.017187 , -0.000180 374 | 0.015624 , -0.000180 375 | 0.015624 , 0.000445 376 | 0.015624 , 0.001382 377 | 0.015624 , 0.001382 378 | 0.016249 , 0.000757 379 | 0.017187 , -0.000180 380 | 0.016562 , 0.000445 381 | 0.015624 , 0.001382 382 | 0.015624 , 0.002945 383 | 0.018749 , 0.002945 384 | 0.017499 , 0.002945 385 | 0.015624 , 0.002945 386 | 0.017187 , 0.002945 387 | 0.017187 , 0.002320 388 | 0.017187 , 0.001382 389 | 0.017187 , 0.002945 390 | 0.017187 , 0.003570 391 | 0.017187 , 0.004507 392 | 0.017186 , 0.006070 393 | 0.016561 , 0.003570 394 | 0.015624 , -0.000180 395 | 0.014999 , 0.000445 396 | 0.014686 , 0.001382 397 | 0.015624 , 0.001382 398 | 0.015624 , 0.001382 399 | 0.015624 , 0.001382 400 | 0.015624 , 0.002945 401 | 0.016249 , 0.002945 402 | 0.017186 , 0.002945 403 | 0.015624 , -0.000180 404 | 0.016249 , 0.001070 405 | 0.017186 , 0.002945 406 | 0.017186 , 0.004507 407 | 0.016561 , 0.003882 408 | 0.015624 , 0.002945 409 | 0.017186 , 0.004507 410 | 0.017186 , 0.003882 411 | 0.017186 , 0.002945 412 | 0.015624 , 0.006070 413 | 0.015624 , 0.002945 414 | 0.015624 , -0.001743 415 | 0.016249 , 0.000132 416 | 0.017186 , 0.002945 417 | 0.017186 , 0.002945 418 | 0.016561 , 0.003570 419 | 0.015624 , 0.004507 420 | 0.015624 , 0.004507 421 | 0.015624 , 0.003257 422 | 0.015624 , 0.001382 423 | 0.017186 , 0.004507 424 | 0.016561 , 0.003882 425 | 0.015624 , 0.002944 426 | 0.015624 , 0.004507 427 | 0.015624 , 0.003257 428 | 0.015624 , 0.001382 429 | 0.017186 , 0.002944 430 | 0.016561 , 0.004194 431 | 0.015624 , 0.006069 432 | 0.015624 , 0.004194 433 | 0.015624 , 0.001382 434 | 0.015624 , 0.002944 435 | 0.015624 , 0.003569 436 | 0.015624 , 0.003257 437 | 0.015624 , 0.001382 438 | 0.015624 , 0.002007 439 | 0.016249 , 0.002944 440 | 0.017186 , 0.002944 441 | 0.017186 , 0.002944 442 | 0.017186 , 0.002944 443 | 0.017186 , 0.007631 444 | 0.017186 , 0.007631 445 | 0.017186 , 0.002944 446 | 0.017186 , 0.001694 447 | 0.017186 , -0.000181 448 | 0.015936 , 0.001069 449 | 0.014061 , 0.002944 450 | 0.015624 , 0.001382 451 | 0.015624 , 0.002632 452 | 0.015624 , 0.004507 453 | 0.015624 , 0.001382 454 | 0.016249 , 0.002632 455 | 0.017186 , 0.004507 456 | 0.017187 , 0.001381 457 | 0.017186 , 0.001381 458 | 0.017186 , 0.001381 459 | 0.015624 , -0.000181 460 | 0.015624 , 0.001382 461 | 0.015624 , 0.001382 462 | 0.015624 , 0.001382 463 | 0.015624 , 0.002007 464 | 0.015624 , 0.002944 465 | 0.017187 , 0.001382 466 | 0.016562 , 0.001382 467 | 0.015624 , 0.001382 468 | 0.015626 , 0.002947 469 | 0.014064 , 0.002947 470 | 0.014064 , 0.003572 471 | 0.014064 , 0.004510 472 | 0.014689 , 0.003885 473 | 0.015626 , 0.002947 474 | 0.015626 , 0.004510 475 | 0.016251 , 0.003885 476 | 0.017189 , 0.002947 477 | 0.015626 , -0.000178 478 | 0.015626 , 0.001697 479 | 0.015626 , 0.004510 480 | 0.015626 , 0.004510 481 | 0.016251 , 0.003260 482 | 0.017189 , 0.001385 483 | 0.017189 , 0.001385 484 | 0.017189 , 0.001385 485 | 0.017189 , 0.002947 486 | 0.016564 , 0.003572 487 | 0.015626 , 0.004510 488 | 0.014064 , 0.001385 489 | 0.014064 , 0.001385 490 | 0.017189 , 0.004510 491 | 0.016564 , 0.003260 492 | 0.015626 , 0.002010 493 | 0.015626 , 0.002947 494 | 0.015626 , 0.006072 495 | 0.015626 , 0.006072 496 | 0.015626 , 0.001385 497 | 0.015626 , 0.001385 498 | 0.015626 , 0.006072 499 | 0.015626 , 0.006072 500 | 0.015626 , 0.001385 501 | 0.015626 , 0.002010 502 | 0.015626 , 0.002947 503 | 0.015626 , 0.002947 504 | 0.015626 , 0.002947 505 | 0.015626 , 0.006072 506 | 0.015626 , 0.005447 507 | 0.015626 , 0.004510 508 | 0.014064 , 0.004510 509 | 0.014689 , 0.003885 510 | 0.015626 , 0.002947 511 | 0.014064 , 0.001385 512 | 0.014064 , 0.001385 513 | 0.015626 , 0.004510 514 | 0.017189 , 0.004510 515 | 0.017189 , 0.004510 516 | 0.015626 , 0.006072 517 | 0.015626 , 0.004197 518 | 0.015626 , 0.001385 519 | 0.016251 , 0.002635 520 | 0.016564 , 0.004509 521 | 0.015626 , 0.004509 522 | 0.015626 , 0.002947 523 | 0.015626 , 0.002947 524 | 0.015626 , 0.002947 525 | 0.015626 , 0.002947 526 | 0.014063 , 0.007634 527 | 0.014063 , 0.007634 528 | 0.015626 , 0.004510 529 | 0.015001 , 0.005135 530 | 0.014063 , 0.006072 531 | 0.015313 , 0.005447 532 | 0.017188 , 0.004509 533 | 0.016563 , 0.005135 534 | 0.015626 , 0.006072 535 | 0.015626 , 0.009197 536 | 0.015626 , 0.009197 537 | 0.015626 , 0.009197 538 | 0.016876 , 0.007322 539 | 0.018751 , 0.004510 540 | 0.017188 , 0.007635 541 | 0.017188 , 0.007635 542 | 0.018751 , 0.002947 543 | 0.018126 , 0.001697 544 | 0.017188 , -0.000178 545 | 0.017188 , -0.000178 546 | 0.017188 , -0.000178 547 | 0.017813 , 0.001072 548 | 0.018751 , 0.002947 549 | 0.018751 , 0.006072 550 | 0.018751 , 0.006072 551 | 0.023438 , 0.002947 552 | 0.020938 , 0.002947 553 | 0.017188 , 0.002947 554 | 0.017188 , 0.001385 555 | 0.017188 , 0.003885 556 | 0.017188 , 0.007635 557 | 0.015626 , 0.002947 558 | 0.015626 , 0.002947 559 | 0.015626 , 0.002947 560 | 0.016251 , 0.003572 561 | 0.016563 , 0.004510 562 | 0.015626 , 0.004510 563 | 0.015626 , 0.006072 564 | 0.015626 , 0.005447 565 | 0.015626 , 0.004510 566 | 0.015626 , 0.004510 567 | 0.015626 , 0.004510 568 | 0.019922 , 0.001957 569 | 0.030324 , -0.004042 570 | 0.039891 , -0.008594 571 | 0.039891 , -0.008594 572 | 0.035520 , -0.012130 573 | 0.038216 , -0.016770 574 | 0.038216 , -0.016770 575 | 0.040304 , -0.028454 576 | 0.041885 , -0.035297 577 | 0.042778 , -0.042264 578 | 0.037256 , -0.042537 579 | 0.036899 , -0.047522 580 | 0.036046 , -0.052447 581 | 0.026691 , -0.060806 582 | 0.026532 , -0.061280 583 | 0.020064 , -0.076506 584 | 0.020064 , -0.076506 585 | 0.012880 , -0.084523 586 | 0.012880 , -0.084523 587 | 0.014140 , -0.084723 588 | 0.016030 , -0.085025 589 | 0.016030 , -0.085025 590 | 0.016030 , -0.085025 591 | 0.016030 , -0.085025 592 | 0.014777 , -0.088559 593 | 0.014777 , -0.088559 594 | 0.001746 , -0.083409 595 | -0.004151 , -0.082899 596 | -0.010788 , -0.079898 597 | -0.016532 , -0.078202 598 | -0.024586 , -0.069936 599 | -0.029889 , -0.067153 600 | -0.041678 , -0.063079 601 | -0.052924 , -0.059577 602 | -0.066199 , -0.046377 603 | -0.080504 , -0.040966 604 | -0.095705 , -0.017692 605 | -0.104260 , 0.004447 606 | -0.117180 , 0.036588 607 | -0.126438 , 0.069908 608 | -0.132573 , 0.106771 609 | -0.136093 , 0.145909 610 | -0.129263 , 0.178459 611 | -0.125034 , 0.217733 612 | -0.116956 , 0.256409 613 | -0.105115 , 0.294104 614 | -0.089468 , 0.330848 615 | -0.068333 , 0.358461 616 | -0.043469 , 0.380731 617 | -0.019450 , 0.412705 618 | 0.006345 , 0.448545 619 | 0.032900 , 0.486971 620 | 0.058225 , 0.517745 621 | 0.087764 , 0.553211 622 | 0.107302 , 0.588103 623 | 0.124367 , 0.624273 624 | 0.134818 , 0.672029 625 | 0.147282 , 0.709564 626 | 0.157781 , 0.744488 627 | 0.166931 , 0.778026 628 | 0.176638 , 0.816830 629 | 0.186691 , 0.856223 630 | 0.197085 , 0.895863 631 | 0.207170 , 0.934148 632 | 0.217402 , 0.972173 633 | 0.225869 , 1.011266 634 | 0.234512 , 1.050321 635 | 0.243451 , 1.089310 636 | 0.252096 , 1.128972 637 | 0.261197 , 1.168815 638 | 0.274172 , 1.207116 639 | 0.289229 , 1.245010 640 | 0.302253 , 1.282403 641 | 0.316168 , 1.320166 642 | 0.331481 , 1.357069 643 | 0.350289 , 1.394870 644 | 0.371008 , 1.433011 645 | 0.388314 , 1.469072 646 | 0.408056 , 1.506178 647 | 0.426533 , 1.541655 648 | 0.450908 , 1.579034 649 | 0.470321 , 1.614007 650 | 0.485852 , 1.645907 651 | 0.505471 , 1.675747 652 | 0.524764 , 1.703197 653 | 0.544720 , 1.737864 654 | 0.564885 , 1.772409 655 | 0.585179 , 1.806878 656 | 0.605308 , 1.840978 657 | 0.633086 , 1.878477 658 | 0.652872 , 1.912701 659 | 0.666465 , 1.943395 660 | 0.686203 , 1.978132 661 | 0.707163 , 2.014158 662 | 0.728437 , 2.050507 663 | 0.747513 , 2.083986 664 | 0.766723 , 2.117263 665 | 0.788856 , 2.153158 666 | 0.812365 , 2.189505 667 | 0.831175 , 2.224514 668 | 0.849712 , 2.259525 669 | 0.868375 , 2.294605 670 | 0.886649 , 2.329746 671 | 0.905994 , 2.365995 672 | 0.925205 , 2.402938 673 | 0.944924 , 2.437740 674 | 0.974617 , 2.481168 675 | 0.994607 , 2.515815 676 | 1.014466 , 2.550537 677 | 1.034165 , 2.585350 678 | 1.054347 , 2.621557 679 | 1.074687 , 2.658506 680 | 1.094364 , 2.689782 681 | 1.114928 , 2.720580 682 | 1.127618 , 2.745893 683 | 1.139208 , 2.770262 684 | 1.152880 , 2.795465 685 | 1.168271 , 2.830148 686 | 1.179011 , 2.850019 687 | 1.185650 , 2.865522 688 | 1.196274 , 2.884691 689 | 1.213780 , 2.905456 690 | 1.227248 , 2.929032 691 | 1.241076 , 2.955014 692 | 1.259802 , 2.983115 693 | 1.277895 , 3.011197 694 | 1.299377 , 3.041331 695 | 1.327240 , 3.068976 696 | 1.360170 , 3.092473 697 | 1.396542 , 3.112657 698 | 1.430433 , 3.133705 699 | 1.465746 , 3.152478 700 | 1.501866 , 3.168687 701 | 1.538843 , 3.182714 702 | 1.568243 , 3.188957 703 | 1.593934 , 3.190838 704 | 1.632737 , 3.200345 705 | 1.670989 , 3.212667 706 | 1.710432 , 3.219306 707 | 1.751134 , 3.225794 708 | 1.792088 , 3.231598 709 | 1.832593 , 3.237345 710 | 1.874066 , 3.243833 711 | 1.914044 , 3.245134 712 | 1.954933 , 3.240591 713 | 1.993590 , 3.240635 714 | 2.033683 , 3.238939 715 | 2.074013 , 3.236361 716 | 2.116302 , 3.234991 717 | 2.159738 , 3.233395 718 | 2.199707 , 3.231804 719 | 2.239665 , 3.229969 720 | 2.279610 , 3.227885 721 | 2.319542 , 3.225553 722 | 2.363960 , 3.221592 723 | 2.403863 , 3.218799 724 | 2.445840 , 3.210207 725 | 2.485717 , 3.207075 726 | 2.515765 , 3.209346 727 | 2.553783 , 3.205516 728 | 2.593456 , 3.198365 729 | 2.634212 , 3.189114 730 | 2.667652 , 3.183619 731 | 2.697601 , 3.185147 732 | 2.722816 , 3.179405 733 | 2.752309 , 3.175874 734 | 2.776671 , 3.174696 735 | 2.792280 , 3.169312 736 | 2.809119 , 3.159927 737 | 2.830652 , 3.151244 738 | 2.856784 , 3.138102 739 | 2.894377 , 3.120967 740 | 2.921018 , 3.100207 741 | 2.948796 , 3.074970 742 | 2.974774 , 3.047883 743 | 2.998907 , 3.019140 744 | 3.022378 , 2.987063 745 | 3.031261 , 2.954307 746 | 3.032134 , 2.920964 747 | 3.051423 , 2.885923 748 | 3.073844 , 2.849295 749 | 3.097279 , 2.811612 750 | 3.113288 , 2.774958 751 | 3.128234 , 2.737856 752 | 3.148672 , 2.702838 753 | 3.162379 , 2.665261 754 | 3.178563 , 2.629399 755 | 3.195620 , 2.594110 756 | 3.207222 , 2.555877 757 | 3.212731 , 2.515631 758 | 3.224403 , 2.477371 759 | 3.237275 , 2.438811 760 | 3.248722 , 2.400483 761 | 3.259916 , 2.362082 762 | 3.270859 , 2.323608 763 | 3.281561 , 2.285066 764 | 3.292077 , 2.243622 765 | 3.302391 , 2.204975 766 | 3.312203 , 2.166060 767 | 3.322041 , 2.127288 768 | 3.330647 , 2.086450 769 | 3.338569 , 2.044561 770 | 3.352544 , 2.009204 771 | 3.361502 , 1.970220 772 | 3.370192 , 1.932529 773 | 3.379086 , 1.893632 774 | 3.387922 , 1.854133 775 | 3.395864 , 1.813323 776 | 3.403138 , 1.771576 777 | 3.409928 , 1.733216 778 | 3.415981 , 1.695264 779 | 3.421494 , 1.655955 780 | 3.426250 , 1.616700 781 | 3.430321 , 1.576908 782 | 3.433697 , 1.537455 783 | 3.436407 , 1.497996 784 | 3.436906 , 1.461971 785 | 3.436167 , 1.426495 786 | 3.436977 , 1.388043 787 | 3.446185 , 1.346681 788 | 3.445937 , 1.307275 789 | 3.440611 , 1.263805 790 | 3.440647 , 1.228554 791 | 3.442764 , 1.192872 792 | 3.445471 , 1.161146 793 | 3.446028 , 1.128691 794 | 3.446011 , 1.088989 795 | 3.443946 , 1.052502 796 | 3.443651 , 1.015900 797 | 3.444296 , 0.979315 798 | 3.439880 , 0.948009 799 | 3.446208 , 0.909147 800 | 3.452584 , 0.870161 801 | 3.460442 , 0.841878 802 | 3.466288 , 0.802786 803 | 3.471840 , 0.763651 804 | 3.477233 , 0.724064 805 | 3.482499 , 0.684412 806 | 3.485836 , 0.643825 807 | 3.487660 , 0.602692 808 | 3.492256 , 0.564174 809 | 3.496873 , 0.530891 810 | 3.501248 , 0.493486 811 | 3.503746 , 0.452586 812 | 3.507810 , 0.415398 813 | 3.511633 , 0.379195 814 | 3.515156 , 0.341721 815 | 3.518618 , 0.302233 816 | 3.521268 , 0.263070 817 | 3.523399 , 0.228656 818 | 3.524158 , 0.190010 819 | 3.525758 , 0.148134 820 | 3.524897 , 0.109699 821 | 3.522699 , 0.075045 822 | 3.520690 , 0.041462 823 | 3.518155 , 0.008448 824 | 3.515562 , -0.019077 825 | 3.512551 , -0.045950 826 | 3.510049 , -0.071779 827 | 3.507251 , -0.098111 828 | 3.503447 , -0.118855 829 | 3.485277 , -0.146487 830 | 3.480825 , -0.166782 831 | 3.474613 , -0.193591 832 | 3.468335 , -0.218834 833 | 3.469763 , -0.246761 834 | 3.475762 , -0.277938 835 | 3.476809 , -0.313498 836 | 3.475458 , -0.342696 837 | 3.475769 , -0.371968 838 | 3.475847 , -0.387324 839 | 3.479983 , -0.417659 840 | 3.488917 , -0.445311 841 | 3.500876 , -0.471263 842 | 3.507785 , -0.493635 843 | 3.511570 , -0.511072 844 | 3.516907 , -0.531636 845 | 3.530399 , -0.557612 846 | 3.549315 , -0.587423 847 | 3.571013 , -0.616124 848 | 3.596698 , -0.645470 849 | 3.628422 , -0.673475 850 | 3.657965 , -0.699445 851 | 3.689163 , -0.723400 852 | 3.714523 , -0.742333 853 | 3.743902 , -0.761683 854 | 3.759507 , -0.781068 855 | 3.785167 , -0.803944 856 | 3.806673 , -0.830351 857 | 3.825149 , -0.860135 858 | 3.840961 , -0.887119 859 | 3.855736 , -0.916750 860 | 3.867699 , -0.947871 861 | 3.874400 , -0.977900 862 | 3.886983 , -1.006602 863 | 3.887502 , -1.035129 864 | 3.885138 , -1.039771 865 | 3.885138 , -1.039771 866 | 3.883504 , -1.046033 867 | 3.881375 , -1.052145 868 | 3.878776 , -1.058073 869 | 3.875721 , -1.063778 870 | 3.871200 , -1.092746 871 | 3.867017 , -1.131131 872 | 3.856958 , -1.146034 873 | 3.845810 , -1.163092 874 | 3.840190 , -1.170466 875 | 3.833939 , -1.177711 876 | 3.825661 , -1.188176 877 | 3.820332 , -1.189693 878 | 3.812711 , -1.198249 879 | 3.804210 , -1.209664 880 | 3.795066 , -1.222430 881 | 3.786875 , -1.230061 882 | 3.779687 , -1.236475 883 | 3.772188 , -1.243734 884 | 3.764399 , -1.251263 885 | 3.757014 , -1.258876 886 | 3.751591 , -1.265003 887 | 3.746883 , -1.269314 888 | 3.742726 , -1.273076 889 | 3.738612 , -1.276756 890 | 3.734192 , -1.280674 891 | 3.728821 , -1.285320 892 | 3.718647 , -1.294283 893 | 3.710731 , -1.304434 894 | 3.702339 , -1.313763 895 | 3.694651 , -1.323566 896 | 3.684877 , -1.338417 897 | 3.677328 , -1.352707 898 | 3.668343 , -1.372649 899 | 3.657895 , -1.396243 900 | 3.646617 , -1.424995 901 | 3.635889 , -1.455083 902 | 3.624190 , -1.486335 903 | 3.613504 , -1.524878 904 | 3.605719 , -1.561858 905 | 3.600130 , -1.598164 906 | 3.594754 , -1.637797 907 | 3.592663 , -1.672885 908 | 3.592785 , -1.712874 909 | 3.596286 , -1.752708 910 | 3.603241 , -1.791677 911 | 3.613617 , -1.829831 912 | 3.627437 , -1.867307 913 | 3.638892 , -1.897394 914 | 3.658937 , -1.931998 915 | 3.681321 , -1.966429 916 | 3.705943 , -1.997944 917 | 3.730043 , -2.028680 918 | 3.758124 , -2.057159 919 | 3.783699 , -2.083606 920 | 3.814340 , -2.109313 921 | 3.832214 , -2.135922 922 | 3.865063 , -2.158740 923 | 3.903788 , -2.177549 924 | 3.907220 , -2.179604 925 | 3.895954 , -2.181460 926 | 3.895954 , -2.181460 927 | 3.900084 , -2.181091 928 | 3.900084 , -2.181091 929 | 3.900084 , -2.181091 930 | 3.900084 , -2.181091 931 | 3.900084 , -2.181091 932 | 3.900084 , -2.181091 933 | 3.924539 , -2.189300 934 | 3.961219 , -2.201612 935 | 3.962929 , -2.201395 936 | 3.965492 , -2.201066 937 | 3.965492 , -2.201066 938 | 3.955384 , -2.201705 939 | 3.959843 , -2.199443 940 | 3.964290 , -2.197157 941 | 3.991919 , -2.189473 942 | 3.996768 , -2.187090 943 | 3.995982 , -2.184814 944 | 3.998189 , -2.178420 945 | 4.008856 , -2.170193 946 | 4.010046 , -2.172879 947 | 4.010046 , -2.172879 948 | 4.009903 , -2.169433 949 | 4.007712 , -2.165608 950 | 4.011039 , -2.158805 951 | 4.013735 , -2.151727 952 | 4.015877 , -2.144111 953 | 4.017332 , -2.136333 954 | 4.018889 , -2.128620 955 | 4.018966 , -2.120619 956 | 4.021310 , -2.113867 957 | 4.024426 , -2.107813 958 | 4.022470 , -2.100030 959 | 4.017403 , -2.092990 960 | 4.014517 , -2.086149 961 | 4.014496 , -2.080986 962 | 4.015322 , -2.076492 963 | 4.008863 , -2.070486 964 | 4.003182 , -2.065808 965 | 3.997188 , -2.060523 966 | 3.986253 , -2.051839 967 | 3.974255 , -2.044491 968 | 3.985040 , -2.050014 969 | 3.994277 , -2.053840 970 | 3.994594 , -2.050126 971 | 3.994594 , -2.050126 972 | 3.994594 , -2.050126 973 | 3.994594 , -2.050126 974 | 3.994594 , -2.050126 975 | 3.994594 , -2.050126 976 | 3.981643 , -2.050329 977 | 3.981643 , -2.050329 978 | --------------------------------------------------------------------------------