├── 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 |
--------------------------------------------------------------------------------