Compare commits
7 Commits
master
...
local_cont
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
db4f4f1fc2 | ||
|
|
e301e7cf67 | ||
|
|
e02964f617 | ||
|
|
97dd2859e1 | ||
|
|
fe65324a48 | ||
|
|
2dc7d7013d | ||
|
|
d63c1435b6 |
2
.gitignore
vendored
2
.gitignore
vendored
@ -11,3 +11,5 @@ log/
|
||||
logs/
|
||||
data/
|
||||
files/
|
||||
*.png
|
||||
|
||||
|
||||
40
Readme.md
Normal file
40
Readme.md
Normal file
@ -0,0 +1,40 @@
|
||||
# auto drive misson center webots simulation:
|
||||
lhy本地控制测试分支,无本地控制测试需求请勿使用
|
||||
## 1, `ubuntu20.04`, `ubuntu22.04`
|
||||
## 2, 安装 `webots`
|
||||
`https://github.com/cyberbotics/webots/tags`, 版本: `ubuntu20.04: R2023a, ubuntu22.04:R2025a`
|
||||
## 3, 创建ros2 工作空间
|
||||
如 `~/sweet_ws `, 编译 `sweet_webots_robot, robots_rviz_panel, webots_simulation, auto_drive_proj_utils,auto_drive_proj_msg, auto_drive_misson_center`
|
||||
```shell
|
||||
cd ~/sweet_ws
|
||||
colcon build --packages-select sweet_webots_robot --cmake-clean-cache
|
||||
source install/setup.bash
|
||||
colcon build --packages-select robots_rviz_panel --cmake-clean-cache
|
||||
source install/setup.bash
|
||||
colcon build --packages-select webots_simulation --cmake-clean-cache
|
||||
source install/setup.bash
|
||||
colcon build --packages-select auto_drive_proj_utils --cmake-clean-cache
|
||||
source install/setup.bash
|
||||
colcon build --packages-select auto_drive_proj_msg --cmake-clean-cache
|
||||
source install/setup.bash
|
||||
colcon build --packages-select auto_drive_misson_center --cmake-clean-cache
|
||||
source install/setup.bash
|
||||
```
|
||||
## 4, 运行 webots:
|
||||
终端执行命令: `webots`
|
||||
## 5, 运行 webots 与 rviz可视化界面
|
||||
`ros2 launch webots_simulation robot_launch.py` ,等待rviz2界面打开后,加载配置文件:` File->Open Config->` 选择 `SweetAiRviz.rviz` ,方便起见,打开后,File->Save Config 下次不用再重复加载。该 rviz界面 左右两侧拉开留出视图空间。(test:1701895544295370752.json)
|
||||
测试版本中path_visualizer pkg目前与launch一起启动,其路径代码可在src/webots_simulation/src/PathVisualizer.cpp 中修改file_name实现
|
||||
## 6, 模拟 `/start_pose` 服务
|
||||
另启一个终端,模拟 `/start_pose` 服务,常开,执行脚本(注意路径):`python3 /home/ada/sweet_ws/install/auto_drive_misson_center/share/auto_drive_misson_center/scripts/mock_start_pose_and_publish_rtk.py `
|
||||
## 7, 运行 mission_center 任务节点
|
||||
运行 `ros2 launch auto_drive_misson_center mission_center_launch.py` 启动 任务节点。
|
||||
## 8, 请求 /invoke/missionOn 服务
|
||||
另启一个终端,执行发送任务命令,这里的任务,必须和 `5` 中的匹配,将1701895544295370752.json内容填充到指令中:
|
||||
```shell
|
||||
ros2 service call /invoke/missionOn auto_drive_proj_msg/srv/ReqString "{request: '[{\"name\":\"value\",\"value\":\"https://test.sweetai.cn:4433/load/locationCmdPath/1701895544295370752.json\"}]', value: ''}"
|
||||
```
|
||||
> 观察任务轨迹以及rviz2右侧panel面板参数
|
||||
|
||||
rviz2 panel:
|
||||

|
||||
835
error_calculate.py
Normal file
835
error_calculate.py
Normal file
@ -0,0 +1,835 @@
|
||||
import re
|
||||
import csv
|
||||
from pathlib import Path
|
||||
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 参数
|
||||
# ============================================================
|
||||
|
||||
LOG_PATTERN = "path_visualizer.log"
|
||||
|
||||
# 每 5 个完整数据取 1 个
|
||||
SAMPLE_STEP = 1
|
||||
|
||||
CSV_FILE = "tracking_error.csv"
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 1. 查找日志文件
|
||||
# ============================================================
|
||||
|
||||
files = sorted(
|
||||
Path(".").glob(LOG_PATTERN)
|
||||
)
|
||||
|
||||
if not files:
|
||||
|
||||
raise FileNotFoundError(
|
||||
f"当前目录没有找到:{LOG_PATTERN}"
|
||||
)
|
||||
|
||||
print("找到日志文件:")
|
||||
|
||||
for file in files:
|
||||
|
||||
print(" ", file)
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 2. 正则表达式
|
||||
# ============================================================
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# current pose
|
||||
#
|
||||
# [debug] [path_follow]
|
||||
# [current_pose_x:11.57,
|
||||
# current_pose_y:-2.13,
|
||||
# current_pose_yaw:-3.10]
|
||||
# ------------------------------------------------------------
|
||||
|
||||
current_pose_pattern = re.compile(
|
||||
r"current_pose_x:([-+0-9.eE]+),\s*"
|
||||
r"current_pose_y:([-+0-9.eE]+),\s*"
|
||||
r"current_pose_yaw:([-+0-9.eE]+)"
|
||||
)
|
||||
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# current path
|
||||
#
|
||||
# [debug] [path_follow]
|
||||
# [current_path_x:11.59,
|
||||
# current_path_y:-2.12,
|
||||
# current_path_yaw:-3.10]
|
||||
# ------------------------------------------------------------
|
||||
|
||||
current_path_pattern = re.compile(
|
||||
r"current_path_x:([-+0-9.eE]+),\s*"
|
||||
r"current_path_y:([-+0-9.eE]+),\s*"
|
||||
r"current_path_yaw:([-+0-9.eE]+)"
|
||||
)
|
||||
|
||||
yaw_command_pattern = re.compile(
|
||||
r"current_cmd_angular_z:([-+0-9.eE]+)"
|
||||
)
|
||||
|
||||
# ============================================================
|
||||
# 3. 函数:角度归一化
|
||||
# ============================================================
|
||||
|
||||
def normalize_angle(angle):
|
||||
|
||||
return (
|
||||
angle + np.pi
|
||||
) % (
|
||||
2.0 * np.pi
|
||||
) - np.pi
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 4. 函数:根据 current pose + path 重新计算
|
||||
# ============================================================
|
||||
|
||||
def calculate_errors(
|
||||
current_x,
|
||||
current_y,
|
||||
current_yaw,
|
||||
path_x,
|
||||
path_y,
|
||||
path_yaw
|
||||
):
|
||||
|
||||
# --------------------------------------------------------
|
||||
# 世界坐标系下的位置差
|
||||
# --------------------------------------------------------
|
||||
|
||||
dx = path_x - current_x
|
||||
|
||||
dy = path_y - current_y
|
||||
|
||||
|
||||
# --------------------------------------------------------
|
||||
# 转换到车辆坐标系
|
||||
#
|
||||
# vehicle frame:
|
||||
#
|
||||
# x
|
||||
# ↑
|
||||
# |
|
||||
# |
|
||||
# ● -----> y
|
||||
#
|
||||
# 根据当前 yaw 进行旋转
|
||||
# --------------------------------------------------------
|
||||
|
||||
lon_dis = (
|
||||
np.cos(current_yaw) * dx
|
||||
+
|
||||
np.sin(current_yaw) * dy
|
||||
)
|
||||
|
||||
|
||||
dis = (
|
||||
-np.sin(current_yaw) * dx
|
||||
+
|
||||
np.cos(current_yaw) * dy
|
||||
)
|
||||
|
||||
|
||||
# --------------------------------------------------------
|
||||
# 车辆到路径点的欧氏距离
|
||||
# --------------------------------------------------------
|
||||
|
||||
distance = np.sqrt(
|
||||
dx * dx +
|
||||
dy * dy
|
||||
)
|
||||
|
||||
|
||||
# --------------------------------------------------------
|
||||
# 航向误差
|
||||
# --------------------------------------------------------
|
||||
|
||||
alpha = normalize_angle(
|
||||
path_yaw - current_yaw
|
||||
)
|
||||
|
||||
|
||||
# --------------------------------------------------------
|
||||
# deg
|
||||
# --------------------------------------------------------
|
||||
|
||||
alpha_deg = np.degrees(alpha)
|
||||
|
||||
|
||||
return (
|
||||
distance,
|
||||
lon_dis,
|
||||
dis,
|
||||
alpha,
|
||||
alpha_deg
|
||||
)
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 5. 读取日志
|
||||
# ============================================================
|
||||
|
||||
all_data = []
|
||||
yaw_command_data = []
|
||||
|
||||
total_raw_count = 0
|
||||
|
||||
|
||||
for file in files:
|
||||
|
||||
print()
|
||||
print("=" * 70)
|
||||
print(f"读取:{file}")
|
||||
print("=" * 70)
|
||||
|
||||
|
||||
# --------------------------------------------------------
|
||||
# 每个文件单独计数
|
||||
# --------------------------------------------------------
|
||||
|
||||
file_data_count = 0
|
||||
|
||||
|
||||
# --------------------------------------------------------
|
||||
# 临时保存 current pose
|
||||
# --------------------------------------------------------
|
||||
|
||||
pending_pose = None
|
||||
pending_yaw = None
|
||||
|
||||
|
||||
with file.open(
|
||||
"r",
|
||||
encoding="utf-8",
|
||||
errors="ignore"
|
||||
) as f:
|
||||
|
||||
|
||||
for line in f:
|
||||
|
||||
|
||||
# =================================================
|
||||
# current pose
|
||||
# =================================================
|
||||
|
||||
m_pose = current_pose_pattern.search(
|
||||
line
|
||||
)
|
||||
|
||||
m_yaw = yaw_command_pattern.search(line)
|
||||
if m_yaw:
|
||||
pending_yaw = float(m_yaw.group(1))
|
||||
if file_data_count % SAMPLE_STEP == 0:
|
||||
yaw_command_data.append(pending_yaw)
|
||||
if m_pose:
|
||||
|
||||
pending_pose = {
|
||||
|
||||
"x": float(
|
||||
m_pose.group(1)
|
||||
),
|
||||
|
||||
"y": float(
|
||||
m_pose.group(2)
|
||||
),
|
||||
|
||||
"yaw": float(
|
||||
m_pose.group(3)
|
||||
),
|
||||
}
|
||||
|
||||
continue
|
||||
|
||||
|
||||
# =================================================
|
||||
# current path
|
||||
# =================================================
|
||||
|
||||
m_path = current_path_pattern.search(
|
||||
line
|
||||
)
|
||||
|
||||
|
||||
if (
|
||||
m_path is not None
|
||||
and
|
||||
pending_pose is not None
|
||||
):
|
||||
|
||||
|
||||
path_x = float(
|
||||
m_path.group(1)
|
||||
)
|
||||
|
||||
path_y = float(
|
||||
m_path.group(2)
|
||||
)
|
||||
|
||||
path_yaw = float(
|
||||
m_path.group(3)
|
||||
)
|
||||
|
||||
|
||||
# =================================================
|
||||
# 重新计算
|
||||
# =================================================
|
||||
|
||||
(
|
||||
point_distance,
|
||||
lon_dis,
|
||||
dis,
|
||||
alpha,
|
||||
alpha_deg
|
||||
) = calculate_errors(
|
||||
|
||||
pending_pose["x"],
|
||||
pending_pose["y"],
|
||||
pending_pose["yaw"],
|
||||
|
||||
path_x,
|
||||
path_y,
|
||||
path_yaw
|
||||
)
|
||||
|
||||
|
||||
# =================================================
|
||||
# 每 SAMPLE_STEP 个数据取一个
|
||||
# =================================================
|
||||
|
||||
if file_data_count % SAMPLE_STEP == 0:
|
||||
|
||||
all_data.append({
|
||||
|
||||
"file": file.name,
|
||||
|
||||
"current_x":
|
||||
pending_pose["x"],
|
||||
|
||||
"current_y":
|
||||
pending_pose["y"],
|
||||
|
||||
"current_yaw":
|
||||
pending_pose["yaw"],
|
||||
|
||||
"path_x":
|
||||
path_x,
|
||||
|
||||
"path_y":
|
||||
path_y,
|
||||
|
||||
"path_yaw":
|
||||
path_yaw,
|
||||
|
||||
"point_distance":
|
||||
point_distance,
|
||||
|
||||
"lon_dis":
|
||||
lon_dis,
|
||||
|
||||
"dis":
|
||||
dis,
|
||||
|
||||
"alpha":
|
||||
alpha,
|
||||
|
||||
"alpha_deg":
|
||||
alpha_deg,
|
||||
})
|
||||
|
||||
|
||||
file_data_count += 1
|
||||
|
||||
total_raw_count += 1
|
||||
|
||||
|
||||
# ------------------------------------------------
|
||||
# 清空
|
||||
# ------------------------------------------------
|
||||
|
||||
pending_pose = None
|
||||
|
||||
|
||||
|
||||
print(
|
||||
f"原始完整数据:{file_data_count}"
|
||||
)
|
||||
|
||||
print(
|
||||
f"抽样后数据:"
|
||||
f"{(file_data_count + SAMPLE_STEP - 1) // SAMPLE_STEP}"
|
||||
)
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 6. 检查
|
||||
# ============================================================
|
||||
|
||||
if not all_data:
|
||||
|
||||
raise RuntimeError(
|
||||
"没有解析到 current_pose + current_path 数据。"
|
||||
)
|
||||
|
||||
|
||||
print()
|
||||
print("=" * 70)
|
||||
print("解析完成")
|
||||
print("=" * 70)
|
||||
|
||||
print(
|
||||
f"原始数据:{total_raw_count}"
|
||||
)
|
||||
|
||||
print(
|
||||
f"最终数据:{len(all_data)}"
|
||||
)
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 7. 提取数据
|
||||
# ============================================================
|
||||
|
||||
current_x = np.array([
|
||||
d["current_x"]
|
||||
for d in all_data
|
||||
])
|
||||
|
||||
current_y = np.array([
|
||||
d["current_y"]
|
||||
for d in all_data
|
||||
])
|
||||
|
||||
current_yaw = np.array([
|
||||
d["current_yaw"]
|
||||
for d in all_data
|
||||
])
|
||||
|
||||
|
||||
path_x = np.array([
|
||||
d["path_x"]
|
||||
for d in all_data
|
||||
])
|
||||
|
||||
path_y = np.array([
|
||||
d["path_y"]
|
||||
for d in all_data
|
||||
])
|
||||
|
||||
path_yaw = np.array([
|
||||
d["path_yaw"]
|
||||
for d in all_data
|
||||
])
|
||||
|
||||
|
||||
point_distance = np.array([
|
||||
d["point_distance"]
|
||||
for d in all_data
|
||||
])
|
||||
|
||||
lon_dis = np.array([
|
||||
d["lon_dis"]
|
||||
for d in all_data
|
||||
])
|
||||
|
||||
dis = np.array([
|
||||
d["dis"]
|
||||
for d in all_data
|
||||
])
|
||||
|
||||
alpha = np.array([
|
||||
d["alpha"]
|
||||
for d in all_data
|
||||
])
|
||||
|
||||
alpha_deg = np.array([
|
||||
d["alpha_deg"]
|
||||
for d in all_data
|
||||
])
|
||||
|
||||
yaw_command = yaw_command_data# 确保长度一致
|
||||
|
||||
print(
|
||||
f"yaw size: {len(yaw_command)}"
|
||||
)
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 8. 计算车辆累计行驶距离
|
||||
# ============================================================
|
||||
|
||||
if len(path_x) > 1:
|
||||
|
||||
dx = np.diff(
|
||||
path_x
|
||||
)
|
||||
|
||||
dy = np.diff(
|
||||
path_y
|
||||
)
|
||||
|
||||
step_distance = np.sqrt(
|
||||
dx ** 2 +
|
||||
dy ** 2
|
||||
)
|
||||
|
||||
else:
|
||||
|
||||
step_distance = np.array([])
|
||||
for i in range(len(step_distance)
|
||||
):
|
||||
|
||||
if step_distance[i] > 0.5:
|
||||
step_distance[i] = 0.0
|
||||
print(
|
||||
f"Warning: step_distance[{i}] = {step_distance[i]:.3f} m, which is too large. Setting it to 0.0.")
|
||||
|
||||
|
||||
distance_m = np.zeros(
|
||||
len(path_x)
|
||||
)
|
||||
|
||||
|
||||
if len(path_x) > 1:
|
||||
|
||||
distance_m[1:] = np.cumsum(
|
||||
step_distance
|
||||
)
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 9. 保存 CSV
|
||||
# ============================================================
|
||||
|
||||
print()
|
||||
print("=" * 70)
|
||||
print("保存 CSV")
|
||||
print("=" * 70)
|
||||
|
||||
|
||||
with open(
|
||||
CSV_FILE,
|
||||
"w",
|
||||
newline="",
|
||||
encoding="utf-8-sig"
|
||||
) as f:
|
||||
|
||||
writer = csv.writer(f)
|
||||
|
||||
|
||||
writer.writerow([
|
||||
|
||||
"distance_m",
|
||||
|
||||
"current_x_m",
|
||||
"current_y_m",
|
||||
|
||||
"lateral_error_m",
|
||||
|
||||
"heading_error_rad",
|
||||
|
||||
"heading_error_deg",
|
||||
|
||||
"yaw_command",
|
||||
|
||||
])
|
||||
|
||||
|
||||
for i in range(
|
||||
len(all_data)
|
||||
):
|
||||
if i>= len(yaw_command):
|
||||
break
|
||||
writer.writerow([
|
||||
|
||||
f"{distance_m[i]:.8f}",
|
||||
|
||||
f"{current_x[i]:.8f}",
|
||||
f"{current_y[i]:.8f}",
|
||||
|
||||
|
||||
f"{dis[i]:.8f}",
|
||||
|
||||
f"{alpha[i]:.8f}",
|
||||
|
||||
f"{alpha_deg[i]:.8f}",
|
||||
|
||||
f"{yaw_command[i]:.8f}"
|
||||
|
||||
])
|
||||
|
||||
|
||||
print(
|
||||
f"CSV 已保存:"
|
||||
f"{Path(CSV_FILE).resolve()}"
|
||||
)
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 11. 横向误差
|
||||
# ============================================================
|
||||
|
||||
plt.figure(
|
||||
figsize=(12, 5)
|
||||
)
|
||||
|
||||
plt.plot(
|
||||
distance_m,
|
||||
dis,
|
||||
linewidth=1.2
|
||||
)
|
||||
|
||||
plt.axhline(
|
||||
0.0,
|
||||
linestyle="--",
|
||||
linewidth=0.8
|
||||
)
|
||||
|
||||
plt.xlabel(
|
||||
"Distance (m)"
|
||||
)
|
||||
|
||||
plt.ylabel(
|
||||
"Lateral Error (m)"
|
||||
)
|
||||
|
||||
plt.title(
|
||||
"Recalculated Lateral Error"
|
||||
)
|
||||
|
||||
plt.grid(True)
|
||||
|
||||
plt.tight_layout()
|
||||
|
||||
plt.show()
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 13. 航向误差 rad
|
||||
# ============================================================
|
||||
|
||||
plt.figure(
|
||||
figsize=(12, 5)
|
||||
)
|
||||
|
||||
plt.plot(
|
||||
distance_m,
|
||||
alpha,
|
||||
linewidth=1.2
|
||||
)
|
||||
|
||||
plt.axhline(
|
||||
0.0,
|
||||
linestyle="--",
|
||||
linewidth=0.8
|
||||
)
|
||||
|
||||
plt.xlabel(
|
||||
"Distance (m)"
|
||||
)
|
||||
|
||||
plt.ylabel(
|
||||
"Heading Error (rad)"
|
||||
)
|
||||
|
||||
plt.title(
|
||||
"Recalculated Heading Error"
|
||||
)
|
||||
|
||||
plt.grid(True)
|
||||
|
||||
plt.tight_layout()
|
||||
|
||||
plt.show()
|
||||
# ============================================================
|
||||
# 14. yaw command rad
|
||||
# ============================================================
|
||||
|
||||
plt.figure(
|
||||
figsize=(12, 5)
|
||||
)
|
||||
|
||||
plt.plot(
|
||||
distance_m,
|
||||
yaw_command,
|
||||
linewidth=1.2
|
||||
)
|
||||
|
||||
plt.axhline(
|
||||
0.0,
|
||||
linestyle="--",
|
||||
linewidth=0.8
|
||||
)
|
||||
|
||||
plt.xlabel(
|
||||
"Distance (m)"
|
||||
)
|
||||
|
||||
plt.ylabel(
|
||||
"Yaw Command (rad)"
|
||||
)
|
||||
|
||||
plt.title(
|
||||
"Recalculated Yaw Command"
|
||||
)
|
||||
|
||||
plt.grid(True)
|
||||
|
||||
plt.tight_layout()
|
||||
|
||||
plt.show()
|
||||
|
||||
# ============================================================
|
||||
# 15. 车辆轨迹 + 路径点
|
||||
# ============================================================
|
||||
|
||||
plt.figure(
|
||||
figsize=(8, 8)
|
||||
)
|
||||
|
||||
plt.plot(
|
||||
current_x,
|
||||
current_y,
|
||||
linewidth=1.2,
|
||||
label="Current Pose"
|
||||
)
|
||||
|
||||
plt.plot(
|
||||
path_x,
|
||||
path_y,
|
||||
linestyle="--",
|
||||
linewidth=1.0,
|
||||
label="Current Path Point"
|
||||
)
|
||||
|
||||
|
||||
plt.scatter(
|
||||
current_x[0],
|
||||
current_y[0],
|
||||
s=50,
|
||||
label="Start"
|
||||
)
|
||||
|
||||
plt.scatter(
|
||||
current_x[-1],
|
||||
current_y[-1],
|
||||
s=50,
|
||||
label="End"
|
||||
)
|
||||
|
||||
|
||||
plt.xlabel(
|
||||
"X (m)"
|
||||
)
|
||||
|
||||
plt.ylabel(
|
||||
"Y (m)"
|
||||
)
|
||||
|
||||
plt.title(
|
||||
"Current Pose and Path"
|
||||
)
|
||||
|
||||
plt.axis(
|
||||
"equal"
|
||||
)
|
||||
|
||||
plt.grid(True)
|
||||
|
||||
plt.legend()
|
||||
|
||||
plt.tight_layout()
|
||||
|
||||
|
||||
plt.show()
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 16. 误差统计
|
||||
# ============================================================
|
||||
|
||||
print()
|
||||
print("=" * 70)
|
||||
print("误差统计")
|
||||
print("=" * 70)
|
||||
|
||||
|
||||
print(
|
||||
f"最大横向误差:"
|
||||
f"{np.max(np.abs(dis)):.6f} m"
|
||||
)
|
||||
|
||||
print(
|
||||
f"平均绝对横向误差:"
|
||||
f"{np.mean(np.abs(dis)):.6f} m"
|
||||
)
|
||||
|
||||
print(
|
||||
f"横向误差 RMSE:"
|
||||
f"{np.sqrt(np.mean(dis ** 2)):.6f} m"
|
||||
)
|
||||
|
||||
|
||||
print()
|
||||
|
||||
print(
|
||||
f"最大纵向误差:"
|
||||
f"{np.max(np.abs(lon_dis)):.6f} m"
|
||||
)
|
||||
|
||||
print(
|
||||
f"平均绝对纵向误差:"
|
||||
f"{np.mean(np.abs(lon_dis)):.6f} m"
|
||||
)
|
||||
|
||||
print(
|
||||
f"纵向误差 RMSE:"
|
||||
f"{np.sqrt(np.mean(lon_dis ** 2)):.6f} m"
|
||||
)
|
||||
|
||||
|
||||
print()
|
||||
|
||||
print(
|
||||
f"最大航向误差:"
|
||||
f"{np.max(np.abs(alpha_deg)):.6f} deg"
|
||||
)
|
||||
|
||||
print(
|
||||
f"平均绝对航向误差:"
|
||||
f"{np.mean(np.abs(alpha_deg)):.6f} deg"
|
||||
)
|
||||
|
||||
print(
|
||||
f"航向误差 RMSE:"
|
||||
f"{np.sqrt(np.mean(alpha_deg ** 2)):.6f} deg"
|
||||
)
|
||||
|
||||
|
||||
print()
|
||||
|
||||
print(
|
||||
f"最大车辆-路径点距离:"
|
||||
f"{np.max(point_distance):.6f} m"
|
||||
)
|
||||
|
||||
print(
|
||||
f"平均车辆-路径点距离:"
|
||||
f"{np.mean(point_distance):.6f} m"
|
||||
)
|
||||
|
||||
print(
|
||||
f"总行驶距离:"
|
||||
f"{distance_m[-1]:.3f} m"
|
||||
)
|
||||
|
||||
183
error_comparsion.py
Normal file
183
error_comparsion.py
Normal file
@ -0,0 +1,183 @@
|
||||
import csv
|
||||
import os
|
||||
import re
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
import glob
|
||||
|
||||
# files = [
|
||||
# "stanley_*_*_*_*.csv",
|
||||
# ]
|
||||
files = [
|
||||
"lqr_*_*_*_*_*.csv",
|
||||
]
|
||||
|
||||
data = {}
|
||||
for pattern in files:
|
||||
|
||||
matched_files = glob.glob(pattern)
|
||||
|
||||
if not matched_files:
|
||||
raise FileNotFoundError(
|
||||
f"找不到文件: {pattern}"
|
||||
)
|
||||
matched_files.sort(
|
||||
key=lambda x: (
|
||||
float(x.split("_")[1]), # 速度
|
||||
float(x.split("_")[2]), # 参数1
|
||||
float(x.split("_")[3]), # 参数2
|
||||
float(x.split("_")[4]), # 参数2
|
||||
float(x.split("_")[5].replace(".csv", "")) # 半径
|
||||
)
|
||||
)
|
||||
|
||||
print(f"匹配到 {len(matched_files)} 个文件:")
|
||||
for file in matched_files:
|
||||
if not os.path.exists(file):
|
||||
raise FileNotFoundError(f"找不到文件: {file}")
|
||||
|
||||
distance = []
|
||||
lateral_error = []
|
||||
heading_error = []
|
||||
yaw_command = []
|
||||
|
||||
with open(file, "r", encoding="utf-8-sig", newline="") as f:
|
||||
reader = csv.DictReader(f)
|
||||
|
||||
required = {"distance_m", "lateral_error_m", "heading_error_rad","yaw_command"}
|
||||
if not required.issubset(reader.fieldnames or []):
|
||||
raise ValueError(
|
||||
f"{file} 缺少必要列,需要: {required},实际列: {reader.fieldnames}"
|
||||
)
|
||||
|
||||
for row in reader:
|
||||
try:
|
||||
distance.append(float(row["distance_m"]))
|
||||
lateral_error.append(abs(float(row["lateral_error_m"])))
|
||||
heading_error.append(abs(float(row["heading_error_rad"])))
|
||||
yaw_command.append(float(row["yaw_command"]))
|
||||
except (ValueError, TypeError):
|
||||
continue
|
||||
|
||||
name = os.path.splitext(os.path.basename(file))[0]
|
||||
data[name] = {
|
||||
"distance": distance,
|
||||
"lateral_error": lateral_error,
|
||||
"heading_error": heading_error,
|
||||
"yaw_command": yaw_command,
|
||||
}
|
||||
|
||||
# 颜色由 matplotlib 自动分配,不手动指定
|
||||
names = list(data.keys())
|
||||
|
||||
# =========================
|
||||
# 图1:Lateral Error
|
||||
# =========================
|
||||
plt.figure(figsize=(12, 6))
|
||||
|
||||
for name in names:
|
||||
plt.plot(
|
||||
data[name]["distance"][::15],
|
||||
data[name]["lateral_error"][::15],
|
||||
label=name,
|
||||
linewidth=1.5,
|
||||
)
|
||||
|
||||
plt.xlabel("Distance (m)")
|
||||
plt.ylabel("Lateral Error (m)")
|
||||
plt.title("Lateral Error Comparison")
|
||||
plt.grid(True, alpha=0.3)
|
||||
plt.legend()
|
||||
plt.tight_layout()
|
||||
|
||||
lateral_output = "X_Lateral_error_comparison.png"
|
||||
plt.savefig(lateral_output, dpi=200)
|
||||
plt.show()
|
||||
|
||||
# =========================
|
||||
# 图2:Heading Error
|
||||
# =========================
|
||||
plt.figure(figsize=(12, 6))
|
||||
|
||||
for name in names:
|
||||
plt.plot(
|
||||
data[name]["distance"],
|
||||
data[name]["heading_error"],
|
||||
label=name,
|
||||
linewidth=1.5,
|
||||
)
|
||||
|
||||
plt.axhline(0, linewidth=2.0)
|
||||
plt.xlabel("Distance (m)")
|
||||
plt.ylabel("Heading Error (rad)")
|
||||
plt.title("Heading Error Comparison")
|
||||
plt.grid(True, alpha=0.3)
|
||||
plt.legend()
|
||||
plt.tight_layout()
|
||||
|
||||
heading_output = "X_Heading_error_comparison.png"
|
||||
plt.savefig(heading_output, dpi=200)
|
||||
plt.show()
|
||||
|
||||
|
||||
# =========================
|
||||
# 图3:Yaw Command
|
||||
# =========================
|
||||
plt.figure(figsize=(12, 6))
|
||||
|
||||
for name in names:
|
||||
plt.plot(
|
||||
data[name]["distance"],
|
||||
data[name]["yaw_command"],
|
||||
label=name,
|
||||
linewidth=1.5,
|
||||
)
|
||||
|
||||
plt.axhline(0, linewidth=2.0)
|
||||
plt.xlabel("Distance (m)")
|
||||
plt.ylabel("Yaw Command (rad)")
|
||||
plt.title("Yaw Command Comparison")
|
||||
plt.grid(True, alpha=0.3)
|
||||
plt.legend()
|
||||
plt.tight_layout()
|
||||
|
||||
yaw_output = "X_Yaw_command_comparison.png"
|
||||
plt.savefig(yaw_output, dpi=200)
|
||||
plt.show()
|
||||
print("读取完成:")
|
||||
for name in names:
|
||||
print(f"{name}: {len(data[name]['distance'])} points")
|
||||
|
||||
print("\n已保存:")
|
||||
print(lateral_output)
|
||||
print(heading_output)
|
||||
print(yaw_output)
|
||||
|
||||
|
||||
print("\n" + "=" * 90)
|
||||
print(
|
||||
f"{'Controller':<20}"
|
||||
f"{'Lat Max(m)':>12}"
|
||||
f"{'Lat Mean(m)':>13}"
|
||||
f"{'Lat RMSE(m)':>14}"
|
||||
f"{'Lat P95(m)':>13}"
|
||||
f"{'Head Max(deg)':>15}"
|
||||
f"{'Head RMSE(deg)':>16}"
|
||||
)
|
||||
print("=" * 100)
|
||||
|
||||
for name in names:
|
||||
lat = np.array(data[name]["lateral_error"])
|
||||
head = np.array(data[name]["heading_error"])
|
||||
|
||||
print(
|
||||
f"{name:<20}"
|
||||
f"{np.max(lat):>12.4f}"
|
||||
f"{np.mean(lat):>13.4f}"
|
||||
f"{np.sqrt(np.mean(lat**2)):>14.4f}"
|
||||
f"{np.percentile(lat, 95):>13.4f}"
|
||||
f"{np.degrees(np.max(head)):>15.4f}"
|
||||
f"{np.degrees(np.sqrt(np.mean(head**2))):>16.4f}"
|
||||
)
|
||||
|
||||
print("=" * 100)
|
||||
2349
lqr_Qe_effort_1.2_0.32_x_15_20_data/lqr_0.32_1.2_100_10_20.csv
Normal file
2349
lqr_Qe_effort_1.2_0.32_x_15_20_data/lqr_0.32_1.2_100_10_20.csv
Normal file
File diff suppressed because it is too large
Load Diff
2289
lqr_Qe_effort_1.2_0.32_x_15_20_data/lqr_0.32_1.2_150_10_20.csv
Normal file
2289
lqr_Qe_effort_1.2_0.32_x_15_20_data/lqr_0.32_1.2_150_10_20.csv
Normal file
File diff suppressed because it is too large
Load Diff
2337
lqr_Qe_effort_1.2_0.32_x_15_20_data/lqr_0.32_1.2_50_10_20.csv
Normal file
2337
lqr_Qe_effort_1.2_0.32_x_15_20_data/lqr_0.32_1.2_50_10_20.csv
Normal file
File diff suppressed because it is too large
Load Diff
2337
lqr_Qe_effort_1.2_0.32_x_15_20_data/lqr_0.32_1.2_80_10_20.csv
Normal file
2337
lqr_Qe_effort_1.2_0.32_x_15_20_data/lqr_0.32_1.2_80_10_20.csv
Normal file
File diff suppressed because it is too large
Load Diff
2349
lqr_Qh_effort_0.32_1.2_100_x_20_data/lqr_0.32_1.2_100_10_20.csv
Normal file
2349
lqr_Qh_effort_0.32_1.2_100_x_20_data/lqr_0.32_1.2_100_10_20.csv
Normal file
File diff suppressed because it is too large
Load Diff
2363
lqr_Qh_effort_0.32_1.2_100_x_20_data/lqr_0.32_1.2_100_15_20.csv
Normal file
2363
lqr_Qh_effort_0.32_1.2_100_x_20_data/lqr_0.32_1.2_100_15_20.csv
Normal file
File diff suppressed because it is too large
Load Diff
2344
lqr_Qh_effort_0.32_1.2_100_x_20_data/lqr_0.32_1.2_100_20_20.csv
Normal file
2344
lqr_Qh_effort_0.32_1.2_100_x_20_data/lqr_0.32_1.2_100_20_20.csv
Normal file
File diff suppressed because it is too large
Load Diff
2411
lqr_Qh_effort_0.32_1.2_100_x_20_data/lqr_0.32_1.2_100_5_20.csv
Normal file
2411
lqr_Qh_effort_0.32_1.2_100_x_20_data/lqr_0.32_1.2_100_5_20.csv
Normal file
File diff suppressed because it is too large
Load Diff
2557
lqr_Ru_effort_0.32_1.2_100_5_x_data/lqr_0.32_1.2_100_5_10.csv
Normal file
2557
lqr_Ru_effort_0.32_1.2_100_5_x_data/lqr_0.32_1.2_100_5_10.csv
Normal file
File diff suppressed because it is too large
Load Diff
2411
lqr_Ru_effort_0.32_1.2_100_5_x_data/lqr_0.32_1.2_100_5_20.csv
Normal file
2411
lqr_Ru_effort_0.32_1.2_100_5_x_data/lqr_0.32_1.2_100_5_20.csv
Normal file
File diff suppressed because it is too large
Load Diff
2452
lqr_Ru_effort_0.32_1.2_100_5_x_data/lqr_0.32_1.2_100_5_25.csv
Normal file
2452
lqr_Ru_effort_0.32_1.2_100_5_x_data/lqr_0.32_1.2_100_5_25.csv
Normal file
File diff suppressed because it is too large
Load Diff
2381
lqr_Ru_effort_0.32_1.2_100_5_x_data/lqr_0.32_1.2_100_5_5.csv
Normal file
2381
lqr_Ru_effort_0.32_1.2_100_5_x_data/lqr_0.32_1.2_100_5_5.csv
Normal file
File diff suppressed because it is too large
Load Diff
1177
lqr_radius_effort_0.64_x_100_5_25_data/lqr_0.64_1.0_100_5_25.csv
Normal file
1177
lqr_radius_effort_0.64_x_100_5_25_data/lqr_0.64_1.0_100_5_25.csv
Normal file
File diff suppressed because it is too large
Load Diff
1238
lqr_radius_effort_0.64_x_100_5_25_data/lqr_0.64_1.2_100_5_25.csv
Normal file
1238
lqr_radius_effort_0.64_x_100_5_25_data/lqr_0.64_1.2_100_5_25.csv
Normal file
File diff suppressed because it is too large
Load Diff
1296
lqr_radius_effort_0.64_x_100_5_25_data/lqr_0.64_1.5_100_5_25.csv
Normal file
1296
lqr_radius_effort_0.64_x_100_5_25_data/lqr_0.64_1.5_100_5_25.csv
Normal file
File diff suppressed because it is too large
Load Diff
1475
lqr_radius_effort_0.64_x_100_5_25_data/lqr_0.64_2.0_100_5_25.csv
Normal file
1475
lqr_radius_effort_0.64_x_100_5_25_data/lqr_0.64_2.0_100_5_25.csv
Normal file
File diff suppressed because it is too large
Load Diff
2608
lqr_vel_effort_x_1.5_100_5_25_data/lqr_0.32_1.5_100_5_25.csv
Normal file
2608
lqr_vel_effort_x_1.5_100_5_25_data/lqr_0.32_1.5_100_5_25.csv
Normal file
File diff suppressed because it is too large
Load Diff
2531
lqr_vel_effort_x_1.5_100_5_25_data/lqr_0.32_1.5_100_5_25_noforw.csv
Normal file
2531
lqr_vel_effort_x_1.5_100_5_25_data/lqr_0.32_1.5_100_5_25_noforw.csv
Normal file
File diff suppressed because it is too large
Load Diff
1526
lqr_vel_effort_x_1.5_100_5_25_data/lqr_0.64_1.5_100_5_25.csv
Normal file
1526
lqr_vel_effort_x_1.5_100_5_25_data/lqr_0.64_1.5_100_5_25.csv
Normal file
File diff suppressed because it is too large
Load Diff
1296
lqr_vel_effort_x_1.5_100_5_25_data/lqr_0.64_1.5_100_5_25_noforw.csv
Normal file
1296
lqr_vel_effort_x_1.5_100_5_25_data/lqr_0.64_1.5_100_5_25_noforw.csv
Normal file
File diff suppressed because it is too large
Load Diff
1011
lqr_vel_effort_x_1.5_100_5_25_data/lqr_0.96_1.5_100_5_25.csv
Normal file
1011
lqr_vel_effort_x_1.5_100_5_25_data/lqr_0.96_1.5_100_5_25.csv
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,923 @@
|
||||
distance_m,current_x_m,current_y_m,lateral_error_m,heading_error_rad,heading_error_deg,yaw_command
|
||||
0.00000000,0.00000000,0.00000000,0.00000000,0.00000777,0.00044540,0.00001562
|
||||
0.00000000,0.00000000,0.00000000,0.00000000,0.00000777,0.00044540,0.00001562
|
||||
0.00000000,0.00040876,0.00189316,-0.00189316,0.00001089,0.00062371,-0.00372659
|
||||
0.00000000,0.00040876,0.00189316,-0.00189316,0.00001089,0.00062371,-0.00372659
|
||||
0.00000000,0.00040876,0.00189316,-0.00189316,0.00001089,0.00062371,-0.00372659
|
||||
0.00000000,0.00434336,0.00273577,-0.00273582,0.00001199,0.00068720,-0.00539272
|
||||
0.00000000,0.00434336,0.00273577,-0.00273582,0.00001199,0.00068720,-0.00539272
|
||||
0.00000000,0.01825690,0.00331407,-0.00331429,0.00001238,0.00070915,-0.00653699
|
||||
0.00000000,0.01825690,0.00331407,-0.00331429,0.00001238,0.00070915,-0.00653699
|
||||
0.00000000,0.01825690,0.00331407,-0.00331429,0.00001238,0.00070915,-0.00653699
|
||||
0.00000000,0.04220500,0.00389884,-0.00389936,0.00001250,0.00071617,-0.00769459
|
||||
0.00000000,0.04220500,0.00389884,-0.00389936,0.00001250,0.00071617,-0.00769459
|
||||
0.00000000,0.07620478,0.00460014,-0.00460109,0.00001252,0.00071734,-0.00908313
|
||||
0.00000000,0.07620478,0.00460014,-0.00460109,0.00001252,0.00071734,-0.00908313
|
||||
0.00000000,0.07620478,0.00460014,-0.00460109,0.00001252,0.00071734,-0.00908313
|
||||
0.19371847,0.12026528,0.00546277,-0.00546180,0.00001252,0.00071743,-0.01079102
|
||||
0.19371847,0.12026528,0.00546277,-0.00546180,0.00001252,0.00071743,-0.01079102
|
||||
0.19371847,0.12026528,0.00546277,-0.00546180,0.00001252,0.00071743,-0.01079102
|
||||
0.19371847,0.17439076,0.00650497,-0.00650467,0.00001255,0.00071882,-0.01285453
|
||||
0.19371847,0.17439076,0.00650497,-0.00650467,0.00001255,0.00071882,-0.01285453
|
||||
0.19371847,0.23858285,0.00773414,-0.00773465,0.00001261,0.00072263,-0.01528815
|
||||
0.19371847,0.23858285,0.00773414,-0.00773465,0.00001261,0.00072263,-0.01528815
|
||||
0.19371847,0.23858285,0.00773414,-0.00773465,0.00001261,0.00072263,-0.01528815
|
||||
0.38743695,0.31231190,0.00900941,-0.00899935,0.00013250,0.00759168,-0.01757225
|
||||
0.38743695,0.31231190,0.00900941,-0.00899935,0.00013250,0.00759168,-0.01757225
|
||||
0.38743695,0.38826441,0.00986294,-0.00986336,0.00064879,0.03717283,-0.01822504
|
||||
0.38743695,0.38826441,0.00986294,-0.00986336,0.00064879,0.03717283,-0.01822504
|
||||
0.38743695,0.38826441,0.00986294,-0.00986336,0.00064879,0.03717283,-0.01822504
|
||||
0.38743695,0.46418652,0.01061130,-0.01070499,0.00122214,0.07002355,-0.01855497
|
||||
0.38743695,0.46418652,0.01061130,-0.01070499,0.00122214,0.07002355,-0.01855497
|
||||
0.58115542,0.54009715,0.01126934,-0.01119380,0.00183552,0.10516770,-0.01862555
|
||||
0.58115542,0.54009715,0.01126934,-0.01119380,0.00183552,0.10516770,-0.01862555
|
||||
0.58115542,0.54009715,0.01126934,-0.01119380,0.00183552,0.10516770,-0.01862555
|
||||
0.58115542,0.61599213,0.01186707,-0.01195259,0.00246072,0.14098913,-0.01855305
|
||||
0.58115542,0.61599213,0.01186707,-0.01195259,0.00246072,0.14098913,-0.01855305
|
||||
0.58115542,0.61599213,0.01186707,-0.01195259,0.00246072,0.14098913,-0.01855305
|
||||
0.77487390,0.69186015,0.01241582,-0.01215927,0.00308717,0.17688157,-0.01838100
|
||||
0.77487390,0.69186015,0.01241582,-0.01215927,0.00308717,0.17688157,-0.01838100
|
||||
0.77487390,0.76772778,0.01292068,-0.01289384,0.00371263,0.21271818,-0.01812410
|
||||
0.77487390,0.76772778,0.01292068,-0.01289384,0.00371263,0.21271818,-0.01812410
|
||||
0.77487390,0.76772778,0.01292068,-0.01289384,0.00371263,0.21271818,-0.01812410
|
||||
0.77487390,0.84356382,0.01339605,-0.01369372,0.00433858,0.24858223,-0.01780785
|
||||
0.77487390,0.84356382,0.01339605,-0.01369372,0.00433858,0.24858223,-0.01780785
|
||||
0.77487390,0.84356382,0.01339605,-0.01369372,0.00433858,0.24858223,-0.01780785
|
||||
0.96859237,0.91940390,0.01383464,-0.01359048,0.00495494,0.28389732,-0.01743792
|
||||
0.96859237,0.91940390,0.01383464,-0.01359048,0.00495494,0.28389732,-0.01743792
|
||||
0.96859237,0.99524364,0.01423726,-0.01438499,0.00556171,0.31866261,-0.01701615
|
||||
0.96859237,0.99524364,0.01423726,-0.01438499,0.00556171,0.31866261,-0.01701615
|
||||
0.96859237,0.99524364,0.01423726,-0.01438499,0.00556171,0.31866261,-0.01701615
|
||||
1.16231085,1.07108650,0.01460523,-0.01404284,0.00615841,0.35285088,-0.01654590
|
||||
1.16231085,1.07108650,0.01460523,-0.01404284,0.00615841,0.35285088,-0.01654590
|
||||
1.16231085,1.14692912,0.01494714,-0.01484283,0.00673834,0.38607863,-0.01605783
|
||||
1.16231085,1.14692912,0.01494714,-0.01484283,0.00673834,0.38607863,-0.01605783
|
||||
1.16231085,1.14692912,0.01494714,-0.01484283,0.00673834,0.38607863,-0.01605783
|
||||
1.16231085,1.22277348,0.01526737,-0.01570793,0.00729865,0.41818177,-0.01556627
|
||||
1.16231085,1.22277348,0.01526737,-0.01570793,0.00729865,0.41818177,-0.01556627
|
||||
1.16231085,1.22277348,0.01526737,-0.01570793,0.00729865,0.41818177,-0.01556627
|
||||
1.35602932,1.29862078,0.01556002,-0.01510874,0.00784598,0.44954160,-0.01504606
|
||||
1.35602932,1.29862078,0.01556002,-0.01510874,0.00784598,0.44954160,-0.01504606
|
||||
1.35602932,1.37446715,0.01583085,-0.01598435,0.00837606,0.47991305,-0.01451741
|
||||
1.35602932,1.37446715,0.01583085,-0.01598435,0.00837606,0.47991305,-0.01451741
|
||||
1.35602932,1.37446715,0.01583085,-0.01598435,0.00837606,0.47991305,-0.01451741
|
||||
1.35602932,1.45031631,0.01607619,-0.01691367,0.00889318,0.50954177,-0.01396432
|
||||
1.35602932,1.45031631,0.01607619,-0.01691367,0.00889318,0.50954177,-0.01396432
|
||||
1.54974779,1.52616499,0.01630701,-0.01608445,0.00938873,0.53793487,-0.01342571
|
||||
1.54974779,1.52616499,0.01630701,-0.01608445,0.00938873,0.53793487,-0.01342571
|
||||
1.54974779,1.52616499,0.01630701,-0.01608445,0.00938873,0.53793487,-0.01342571
|
||||
1.54974779,1.60201474,0.01652214,-0.01703651,0.00986511,0.56522900,-0.01289467
|
||||
1.54974779,1.60201474,0.01652214,-0.01703651,0.00986511,0.56522900,-0.01289467
|
||||
1.54974779,1.60201474,0.01652214,-0.01703651,0.00986511,0.56522900,-0.01289467
|
||||
1.74346627,1.67786556,0.01672303,-0.01604452,0.01032229,0.59142379,-0.01237388
|
||||
1.74346627,1.67786556,0.01672303,-0.01604452,0.01032229,0.59142379,-0.01237388
|
||||
1.74346627,1.75369789,0.01694750,-0.01705601,0.01074851,0.61584401,-0.01196208
|
||||
1.74346627,1.75369789,0.01694750,-0.01705601,0.01074851,0.61584401,-0.01196208
|
||||
1.74346627,1.75369789,0.01694750,-0.01705601,0.01074851,0.61584401,-0.01196208
|
||||
1.74346627,1.82950125,0.01715149,-0.01810945,0.01115284,0.63901078,-0.01155369
|
||||
1.74346627,1.82950125,0.01715149,-0.01810945,0.01115284,0.63901078,-0.01155369
|
||||
1.93718474,1.90529999,0.01733959,-0.01697006,0.01153680,0.66101007,-0.01115469
|
||||
1.93718474,1.90529999,0.01733959,-0.01697006,0.01153680,0.66101007,-0.01115469
|
||||
1.93718474,1.90529999,0.01733959,-0.01697006,0.01153680,0.66101007,-0.01115469
|
||||
1.93718474,1.98112841,0.01750664,-0.01802898,0.01192760,0.68340103,-0.01070035
|
||||
1.93718474,1.98112841,0.01750664,-0.01802898,0.01192760,0.68340103,-0.01070035
|
||||
1.93718474,1.98112841,0.01750664,-0.01802898,0.01192760,0.68340103,-0.01070035
|
||||
2.13090322,2.05696762,0.01765309,-0.01674073,0.01231418,0.70555032,-0.01021362
|
||||
2.13090322,2.05696762,0.01765309,-0.01674073,0.01231418,0.70555032,-0.01021362
|
||||
2.13090322,2.13280679,0.01778827,-0.01781040,0.01268499,0.72679659,-0.00973633
|
||||
2.13090322,2.13280679,0.01778827,-0.01781040,0.01268499,0.72679659,-0.00973633
|
||||
2.13090322,2.13280679,0.01778827,-0.01781040,0.01268499,0.72679659,-0.00973633
|
||||
2.13090322,2.20864673,0.01790892,-0.01892085,0.01304384,0.74735684,-0.00925433
|
||||
2.13090322,2.20864673,0.01790892,-0.01892085,0.01304384,0.74735684,-0.00925433
|
||||
2.32462169,2.28448763,0.01802488,-0.01748552,0.01338303,0.76679129,-0.00880240
|
||||
2.32462169,2.28448763,0.01802488,-0.01748552,0.01338303,0.76679129,-0.00880240
|
||||
2.32462169,2.28448763,0.01802488,-0.01748552,0.01338303,0.76679129,-0.00880240
|
||||
2.32462169,2.36033167,0.01813966,-0.01862654,0.01370065,0.78498932,-0.00839159
|
||||
2.32462169,2.36033167,0.01813966,-0.01862654,0.01370065,0.78498932,-0.00839159
|
||||
2.32462169,2.36033167,0.01813966,-0.01862654,0.01370065,0.78498932,-0.00839159
|
||||
2.51834017,2.43617681,0.01824425,-0.01709100,0.01400618,0.80249477,-0.00798478
|
||||
2.51834017,2.43617681,0.01824425,-0.01709100,0.01400618,0.80249477,-0.00798478
|
||||
2.51834017,2.51202082,0.01834167,-0.01824875,0.01429770,0.81919784,-0.00759203
|
||||
2.51834017,2.51202082,0.01834167,-0.01824875,0.01429770,0.81919784,-0.00759203
|
||||
2.51834017,2.51202082,0.01834167,-0.01824875,0.01429770,0.81919784,-0.00759203
|
||||
2.51834017,2.58786574,0.01843518,-0.01944570,0.01457327,0.83498710,-0.00722357
|
||||
2.51834017,2.58786574,0.01843518,-0.01944570,0.01457327,0.83498710,-0.00722357
|
||||
2.51834017,2.58786574,0.01843518,-0.01944570,0.01457327,0.83498710,-0.00722357
|
||||
2.71205864,2.66371151,0.01852167,-0.01780159,0.01483670,0.85008011,-0.00686552
|
||||
2.71205864,2.66371151,0.01852167,-0.01780159,0.01483670,0.85008011,-0.00686552
|
||||
2.71205864,2.73956017,0.01860427,-0.01901627,0.01508603,0.86436588,-0.00652817
|
||||
2.71205864,2.73956017,0.01860427,-0.01901627,0.01508603,0.86436588,-0.00652817
|
||||
2.71205864,2.73956017,0.01860427,-0.01901627,0.01508603,0.86436588,-0.00652817
|
||||
2.90577711,2.81540955,0.01867855,-0.01729062,0.01532603,0.87811687,-0.00619299
|
||||
2.90577711,2.81540955,0.01867855,-0.01729062,0.01532603,0.87811687,-0.00619299
|
||||
2.90577711,2.89125953,0.01875190,-0.01852307,0.01555095,0.89100362,-0.00588638
|
||||
2.90577711,2.89125953,0.01875190,-0.01852307,0.01555095,0.89100362,-0.00588638
|
||||
2.90577711,2.89125953,0.01875190,-0.01852307,0.01555095,0.89100362,-0.00588638
|
||||
2.90577711,2.96711906,0.01880658,-0.01977026,0.01576196,0.90309380,-0.00557073
|
||||
2.90577711,2.96711906,0.01880658,-0.01977026,0.01576196,0.90309380,-0.00557073
|
||||
2.90577711,2.96711906,0.01880658,-0.01977026,0.01576196,0.90309380,-0.00557073
|
||||
3.09949559,3.04299058,0.01883154,-0.01792648,0.01596035,0.91446062,-0.00522150
|
||||
3.09949559,3.04299058,0.01883154,-0.01792648,0.01596035,0.91446062,-0.00522150
|
||||
3.09949559,3.11886119,0.01885593,-0.01916529,0.01614727,0.92517015,-0.00489428
|
||||
3.09949559,3.11886119,0.01885593,-0.01916529,0.01614727,0.92517015,-0.00489428
|
||||
3.09949559,3.11886119,0.01885593,-0.01916529,0.01614727,0.92517015,-0.00489428
|
||||
3.09949559,3.19479213,0.01887923,-0.02043175,0.01632761,0.93550337,-0.00457812
|
||||
3.09949559,3.19479213,0.01887923,-0.02043175,0.01632761,0.93550337,-0.00457812
|
||||
3.29321406,3.27072781,0.01890172,-0.01852740,0.01649211,0.94492839,-0.00429207
|
||||
3.29321406,3.27072781,0.01890172,-0.01852740,0.01649211,0.94492839,-0.00429207
|
||||
3.29321406,3.27072781,0.01890172,-0.01852740,0.01649211,0.94492839,-0.00429207
|
||||
3.29321406,3.34665941,0.01892186,-0.01980803,0.01664799,0.95385961,-0.00401880
|
||||
3.29321406,3.34665941,0.01892186,-0.01980803,0.01664799,0.95385961,-0.00401880
|
||||
3.48693254,3.42258773,0.01894242,-0.01785826,0.01679335,0.96218796,-0.00376738
|
||||
3.48693254,3.42258773,0.01894242,-0.01785826,0.01679335,0.96218796,-0.00376738
|
||||
3.48693254,3.42258773,0.01894242,-0.01785826,0.01679335,0.96218796,-0.00376738
|
||||
3.48693254,3.49851417,0.01896281,-0.01915518,0.01692915,0.96996872,-0.00353494
|
||||
3.48693254,3.49851417,0.01896281,-0.01915518,0.01692915,0.96996872,-0.00353494
|
||||
3.48693254,3.57443672,0.01898397,-0.02047258,0.01705537,0.97720082,-0.00332326
|
||||
3.48693254,3.57443672,0.01898397,-0.02047258,0.01705537,0.97720082,-0.00332326
|
||||
3.48693254,3.57443672,0.01898397,-0.02047258,0.01705537,0.97720082,-0.00332326
|
||||
3.68065101,3.65035651,0.01900644,-0.01848242,0.01717205,0.98388598,-0.00313325
|
||||
3.68065101,3.65035651,0.01900644,-0.01848242,0.01717205,0.98388598,-0.00313325
|
||||
3.68065101,3.65035651,0.01900644,-0.01848242,0.01717205,0.98388598,-0.00313325
|
||||
3.68065101,3.72627357,0.01902668,-0.01981127,0.01728298,0.99024168,-0.00295048
|
||||
3.68065101,3.72627357,0.01902668,-0.01981127,0.01728298,0.99024168,-0.00295048
|
||||
3.87436949,3.80219003,0.01904509,-0.01778612,0.01738818,0.99626911,-0.00277548
|
||||
3.87436949,3.80219003,0.01904509,-0.01778612,0.01738818,0.99626911,-0.00277548
|
||||
3.87436949,3.80219003,0.01904509,-0.01778612,0.01738818,0.99626911,-0.00277548
|
||||
3.87436949,3.87810221,0.01906040,-0.01912168,0.01748907,1.00205012,-0.00260310
|
||||
3.87436949,3.87810221,0.01906040,-0.01912168,0.01748907,1.00205012,-0.00260310
|
||||
3.87436949,3.95401324,0.01907630,-0.02047256,0.01758280,1.00742035,-0.00244629
|
||||
3.87436949,3.95401324,0.01907630,-0.02047256,0.01758280,1.00742035,-0.00244629
|
||||
3.87436949,3.95401324,0.01907630,-0.02047256,0.01758280,1.00742035,-0.00244629
|
||||
4.06808796,4.02991996,0.01909325,-0.01841476,0.01766936,1.01238003,-0.00230585
|
||||
4.06808796,4.02991996,0.01909325,-0.01841476,0.01766936,1.01238003,-0.00230585
|
||||
4.06808796,4.02991996,0.01909325,-0.01841476,0.01766936,1.01238003,-0.00230585
|
||||
4.06808796,4.10582557,0.01910860,-0.01977433,0.01775162,1.01709307,-0.00217100
|
||||
4.06808796,4.10582557,0.01910860,-0.01977433,0.01775162,1.01709307,-0.00217100
|
||||
4.26180643,4.18172636,0.01912429,-0.01769246,0.01782814,1.02147742,-0.00204823
|
||||
4.26180643,4.18172636,0.01912429,-0.01769246,0.01782814,1.02147742,-0.00204823
|
||||
4.26180643,4.18172636,0.01912429,-0.01769246,0.01782814,1.02147742,-0.00204823
|
||||
4.26180643,4.25762442,0.01913745,-0.01905834,0.01790180,1.02569741,-0.00192633
|
||||
4.26180643,4.25762442,0.01913745,-0.01905834,0.01790180,1.02569741,-0.00192633
|
||||
4.26180643,4.33350762,0.01915903,-0.02044340,0.01797361,1.02981174,-0.00182478
|
||||
4.26180643,4.33350762,0.01915903,-0.02044340,0.01797361,1.02981174,-0.00182478
|
||||
4.26180643,4.33350762,0.01915903,-0.02044340,0.01797361,1.02981174,-0.00182478
|
||||
4.45552491,4.40936809,0.01917280,-0.01833590,0.01803807,1.03350549,-0.00172244
|
||||
4.45552491,4.40936809,0.01917280,-0.01833590,0.01803807,1.03350549,-0.00172244
|
||||
4.45552491,4.48520560,0.01919694,-0.01972988,0.01810465,1.03731993,-0.00163649
|
||||
4.45552491,4.48520560,0.01919694,-0.01972988,0.01810465,1.03731993,-0.00163649
|
||||
4.45552491,4.48520560,0.01919694,-0.01972988,0.01810465,1.03731993,-0.00163649
|
||||
4.64924338,4.56104299,0.01922203,-0.01761525,0.01816771,1.04093300,-0.00155938
|
||||
4.64924338,4.56104299,0.01922203,-0.01761525,0.01816771,1.04093300,-0.00155938
|
||||
4.64924338,4.56104299,0.01922203,-0.01761525,0.01816771,1.04093300,-0.00155938
|
||||
4.64924338,4.63688464,0.01924353,-0.01901376,0.01822929,1.04446164,-0.00147823
|
||||
4.64924338,4.63688464,0.01924353,-0.01901376,0.01822929,1.04446164,-0.00147823
|
||||
4.64924338,4.71272597,0.01926239,-0.02041883,0.01828893,1.04787834,-0.00139576
|
||||
4.64924338,4.71272597,0.01926239,-0.02041883,0.01828893,1.04787834,-0.00139576
|
||||
4.64924338,4.71272597,0.01926239,-0.02041883,0.01828893,1.04787834,-0.00139576
|
||||
4.84296186,4.78856874,0.01928104,-0.01827868,0.01834469,1.05107327,-0.00132057
|
||||
4.84296186,4.78856874,0.01928104,-0.01827868,0.01834469,1.05107327,-0.00132057
|
||||
4.84296186,4.86441283,0.01929984,-0.01968983,0.01839657,1.05404589,-0.00125357
|
||||
4.84296186,4.86441283,0.01929984,-0.01968983,0.01839657,1.05404589,-0.00125357
|
||||
4.84296186,4.86441283,0.01929984,-0.01968983,0.01839657,1.05404589,-0.00125357
|
||||
5.03668033,4.94025816,0.01931582,-0.01753249,0.01844744,1.05696046,-0.00118291
|
||||
5.03668033,4.94025816,0.01931582,-0.01753249,0.01844744,1.05696046,-0.00118291
|
||||
5.03668033,4.94025816,0.01931582,-0.01753249,0.01844744,1.05696046,-0.00118291
|
||||
5.03668033,5.01610469,0.01933128,-0.01894603,0.01849538,1.05970716,-0.00111721
|
||||
5.03668033,5.01610469,0.01933128,-0.01894603,0.01849538,1.05970716,-0.00111721
|
||||
5.03668033,5.09195450,0.01934534,-0.02036541,0.01854135,1.06234094,-0.00105270
|
||||
5.03668033,5.09195450,0.01934534,-0.02036541,0.01854135,1.06234094,-0.00105270
|
||||
5.03668033,5.09195450,0.01934534,-0.02036541,0.01854135,1.06234094,-0.00105270
|
||||
5.23039881,5.16780389,0.01935760,-0.01818949,0.01858581,1.06488871,-0.00098754
|
||||
5.23039881,5.16780389,0.01935760,-0.01818949,0.01858581,1.06488871,-0.00098754
|
||||
5.23039881,5.24365384,0.01937147,-0.01961352,0.01862591,1.06718622,-0.00093444
|
||||
5.23039881,5.24365384,0.01937147,-0.01961352,0.01862591,1.06718622,-0.00093444
|
||||
5.23039881,5.24365384,0.01937147,-0.01961352,0.01862591,1.06718622,-0.00093444
|
||||
5.23039881,5.31950489,0.01938343,-0.02104166,0.01866498,1.06942449,-0.00087964
|
||||
5.23039881,5.31950489,0.01938343,-0.02104166,0.01866498,1.06942449,-0.00087964
|
||||
5.23039881,5.31950489,0.01938343,-0.02104166,0.01866498,1.06942449,-0.00087964
|
||||
5.42411728,5.39535700,0.01939580,-0.01885308,0.01870109,1.07149372,-0.00083148
|
||||
5.42411728,5.39535700,0.01939580,-0.01885308,0.01870109,1.07149372,-0.00083148
|
||||
5.42411728,5.47118107,0.01939291,-0.02026952,0.01873153,1.07323787,-0.00076460
|
||||
5.42411728,5.47118107,0.01939291,-0.02026952,0.01873153,1.07323787,-0.00076460
|
||||
5.42411728,5.47118107,0.01939291,-0.02026952,0.01873153,1.07323787,-0.00076460
|
||||
5.61783575,5.54700433,0.01938994,-0.01805637,0.01875829,1.07477093,-0.00070487
|
||||
5.61783575,5.54700433,0.01938994,-0.01805637,0.01875829,1.07477093,-0.00070487
|
||||
5.61783575,5.62283933,0.01940591,-0.01949494,0.01879195,1.07669960,-0.00066886
|
||||
5.61783575,5.62283933,0.01940591,-0.01949494,0.01879195,1.07669960,-0.00066886
|
||||
5.61783575,5.62283933,0.01940591,-0.01949494,0.01879195,1.07669960,-0.00066886
|
||||
5.61783575,5.69867981,0.01943346,-0.02095034,0.01882612,1.07865741,-0.00065476
|
||||
5.61783575,5.69867981,0.01943346,-0.02095034,0.01882612,1.07865741,-0.00065476
|
||||
5.61783575,5.69867981,0.01943346,-0.02095034,0.01882612,1.07865741,-0.00065476
|
||||
5.81155423,5.77452090,0.01945763,-0.01875415,0.01885985,1.08059003,-0.00063475
|
||||
5.81155423,5.77452090,0.01945763,-0.01875415,0.01885985,1.08059003,-0.00063475
|
||||
5.81155423,5.85036295,0.01947923,-0.02020731,0.01889314,1.08249694,-0.00061066
|
||||
5.81155423,5.85036295,0.01947923,-0.02020731,0.01889314,1.08249694,-0.00061066
|
||||
5.81155423,5.85036295,0.01947923,-0.02020731,0.01889314,1.08249694,-0.00061066
|
||||
6.00527270,5.92620765,0.01950023,-0.01799889,0.01892452,1.08429488,-0.00058910
|
||||
6.00527270,5.92620765,0.01950023,-0.01799889,0.01892452,1.08429488,-0.00058910
|
||||
6.00527270,6.00205400,0.01951988,-0.01945369,0.01895492,1.08603711,-0.00056691
|
||||
6.00527270,6.00205400,0.01951988,-0.01945369,0.01895492,1.08603711,-0.00056691
|
||||
6.00527270,6.00205400,0.01951988,-0.01945369,0.01895492,1.08603711,-0.00056691
|
||||
6.15242064,6.07789979,0.01953938,-0.00378317,0.11715815,6.71266750,0.21081878
|
||||
6.15242064,6.07789979,0.01953938,-0.00378317,0.11715815,6.71266750,0.21081878
|
||||
6.15242064,6.15374602,0.01955788,-0.00524144,0.11718558,6.71423930,0.22555722
|
||||
6.15242064,6.15374602,0.01955788,-0.00524144,0.11718558,6.71423930,0.22555722
|
||||
6.15242064,6.15374602,0.01955788,-0.00524144,0.11718558,6.71423930,0.22555722
|
||||
6.29956858,6.22957598,0.02554430,0.00410515,0.21010384,12.03806302,0.40173028
|
||||
6.29956858,6.22957598,0.02554430,0.00410515,0.21010384,12.03806302,0.40173028
|
||||
6.29956858,6.22957598,0.02554430,0.00410515,0.21010384,12.03806302,0.40173028
|
||||
6.29956858,6.30534666,0.03462174,-0.00595955,0.20251901,11.60348436,0.39813351
|
||||
6.29956858,6.30534666,0.03462174,-0.00595955,0.20251901,11.60348436,0.39813351
|
||||
6.44666221,6.38092819,0.04955064,0.02130833,0.28845435,16.52721663,0.58715913
|
||||
6.44666221,6.38092819,0.04955064,0.02130833,0.28845435,16.52721663,0.58715913
|
||||
6.44666221,6.38092819,0.04955064,0.02130833,0.28845435,16.52721663,0.58715913
|
||||
6.44666221,6.45627323,0.06678897,0.00475900,0.27502890,15.75799536,0.57083174
|
||||
6.44666221,6.45627323,0.06678897,0.00475900,0.27502890,15.75799536,0.57083174
|
||||
6.44666221,6.45627323,0.06678897,0.00475900,0.27502890,15.75799536,0.57083174
|
||||
6.59375585,6.53108726,0.09051319,0.02134827,0.35493692,20.33638755,0.71857871
|
||||
6.59375585,6.53108726,0.09051319,0.02134827,0.35493692,20.33638755,0.71857871
|
||||
6.59375585,6.60537192,0.11671190,-0.00153383,0.33572371,19.23555144,0.68834233
|
||||
6.59375585,6.60537192,0.11671190,-0.00153383,0.33572371,19.23555144,0.68834233
|
||||
6.59375585,6.60537192,0.11671190,-0.00153383,0.33572371,19.23555144,0.68834233
|
||||
6.74074914,6.67882644,0.14762230,0.03257897,0.41174906,23.59148330,0.85979669
|
||||
6.74074914,6.67882644,0.14762230,0.03257897,0.41174906,23.59148330,0.85979669
|
||||
6.74074914,6.75144486,0.18133652,0.00567331,0.38857602,22.26376582,0.82215126
|
||||
6.74074914,6.75144486,0.18133652,0.00567331,0.38857602,22.26376582,0.82215126
|
||||
6.74074914,6.75144486,0.18133652,0.00567331,0.38857602,22.26376582,0.82215126
|
||||
6.88774243,6.82278332,0.22020456,0.02917574,0.46044104,26.38132813,0.95872121
|
||||
6.88774243,6.82278332,0.22020456,0.02917574,0.46044104,26.38132813,0.95872121
|
||||
6.88774243,6.89280400,0.26251074,-0.00229405,0.43275896,24.79526173,0.91048549
|
||||
6.88774243,6.89280400,0.26251074,-0.00229405,0.43275896,24.79526173,0.91048549
|
||||
6.88774243,6.89280400,0.26251074,-0.00229405,0.43275896,24.79526173,0.91048549
|
||||
7.03460448,6.96082311,0.31076024,0.03474182,0.49967264,28.62913339,1.06537757
|
||||
7.03460448,6.96082311,0.31076024,0.03474182,0.49967264,28.62913339,1.06537757
|
||||
7.03460448,6.96082311,0.31076024,0.03474182,0.49967264,28.62913339,1.06537757
|
||||
7.03460448,7.02746425,0.36044342,0.00068489,0.46902253,26.87301150,1.01146831
|
||||
7.03460448,7.02746425,0.36044342,0.00068489,0.46902253,26.87301150,1.01146831
|
||||
7.18146653,7.09150538,0.41669593,0.02635800,0.53243292,30.50615927,1.13331840
|
||||
7.18146653,7.09150538,0.41669593,0.02635800,0.53243292,30.50615927,1.13331840
|
||||
7.18146653,7.09150538,0.41669593,0.02635800,0.53243292,30.50615927,1.13331840
|
||||
7.32818643,7.15362238,0.47473106,0.07102294,0.59623188,34.16157006,1.28316761
|
||||
7.32818643,7.15362238,0.47473106,0.07102294,0.59623188,34.16157006,1.28316761
|
||||
7.32818643,7.21312342,0.53795343,0.02898530,0.55910641,32.03443742,1.22024150
|
||||
7.32818643,7.21312342,0.53795343,0.02898530,0.55910641,32.03443742,1.22024150
|
||||
7.32818643,7.21312342,0.53795343,0.02898530,0.55910641,32.03443742,1.22024150
|
||||
7.47490633,7.26916361,0.60711745,0.05863380,0.61672209,35.33557313,1.32711430
|
||||
7.47490633,7.26916361,0.60711745,0.05863380,0.61672209,35.33557313,1.32711430
|
||||
7.47490633,7.26916361,0.60711745,0.05863380,0.61672209,35.33557313,1.32711430
|
||||
7.47490633,7.32269025,0.67790234,0.01438901,0.57676856,33.04640450,1.25710638
|
||||
7.47490633,7.32269025,0.67790234,0.01438901,0.57676856,33.04640450,1.25710638
|
||||
7.62149476,7.37217229,0.75344400,0.05702280,0.63242198,36.23511018,1.39344177
|
||||
7.62149476,7.37217229,0.75344400,0.05702280,0.63242198,36.23511018,1.39344177
|
||||
7.62149476,7.37217229,0.75344400,0.05702280,0.63242198,36.23511018,1.39344177
|
||||
7.76808320,7.41906334,0.82998318,0.09397974,0.68917167,39.48662798,1.50331498
|
||||
7.76808320,7.41906334,0.82998318,0.09397974,0.68917167,39.48662798,1.50331498
|
||||
7.76808320,7.46123802,0.91086085,0.04478640,0.64519626,36.96702242,1.43083867
|
||||
7.76808320,7.46123802,0.91086085,0.04478640,0.64519626,36.96702242,1.43083867
|
||||
7.76808320,7.46123802,0.91086085,0.04478640,0.64519626,36.96702242,1.43083867
|
||||
7.91457090,7.49714986,0.99417674,0.09102649,0.69766762,39.97340986,1.55844350
|
||||
7.91457090,7.49714986,0.99417674,0.09102649,0.69766762,39.97340986,1.55844350
|
||||
7.91457090,7.49714986,0.99417674,0.09102649,0.69766762,39.97340986,1.55844350
|
||||
7.91457090,7.53039682,1.07875281,0.04234805,0.65275516,37.40011560,1.48260060
|
||||
7.91457090,7.53039682,1.07875281,0.04234805,0.65275516,37.40011560,1.48260060
|
||||
8.06105861,7.55702158,1.16467014,0.07883426,0.70456890,40.36882430,1.58397840
|
||||
8.06105861,7.55702158,1.16467014,0.07883426,0.70456890,40.36882430,1.58397840
|
||||
8.06105861,7.55702158,1.16467014,0.07883426,0.70456890,40.36882430,1.58397840
|
||||
8.06105861,7.58046128,1.25167592,0.03024921,0.65871964,37.74185500,1.50378070
|
||||
8.06105861,7.58046128,1.25167592,0.03024921,0.65871964,37.74185500,1.50378070
|
||||
8.20749180,7.59808248,1.33943527,0.07947287,0.71011203,40.68642240,1.63696535
|
||||
8.20749180,7.59808248,1.33943527,0.07947287,0.71011203,40.68642240,1.63696535
|
||||
8.20749180,7.59808248,1.33943527,0.07947287,0.71011203,40.68642240,1.63696535
|
||||
8.35392499,7.61273044,1.42798631,0.12227882,0.76217421,43.66936521,1.74131450
|
||||
8.35392499,7.61273044,1.42798631,0.12227882,0.76217421,43.66936521,1.74131450
|
||||
8.35392499,7.61273044,1.42798631,0.12227882,0.76217421,43.66936521,1.74131450
|
||||
8.35392499,7.62048290,1.51655748,0.07117413,0.71458520,40.94271613,1.66106131
|
||||
8.35392499,7.62048290,1.51655748,0.07117413,0.71458520,40.94271613,1.66106131
|
||||
8.50035823,7.62169030,1.60479510,0.12336634,0.76392767,43.76983159,1.78314581
|
||||
8.50035823,7.62169030,1.60479510,0.12336634,0.76392767,43.76983159,1.78314581
|
||||
8.50035823,7.62169030,1.60479510,0.12336634,0.76392767,43.76983159,1.78314581
|
||||
8.50035823,7.61961185,1.69321356,0.07286777,0.71571234,41.00729670,1.69934871
|
||||
8.50035823,7.61961185,1.69321356,0.07286777,0.71571234,41.00729670,1.69934871
|
||||
8.64679147,7.61128411,1.78069853,0.11504887,0.76456546,43.80637423,1.79350406
|
||||
8.64679147,7.61128411,1.78069853,0.11504887,0.76456546,43.80637423,1.79350406
|
||||
8.64679147,7.61128411,1.78069853,0.11504887,0.76456546,43.80637423,1.79350406
|
||||
8.64679147,7.60007533,1.86815058,0.06504345,0.71609962,41.02948569,1.70815342
|
||||
8.64679147,7.60007533,1.86815058,0.06504345,0.71609962,41.02948569,1.70815342
|
||||
8.64679147,7.60007533,1.86815058,0.06504345,0.71609962,41.02948569,1.70815342
|
||||
8.79327918,7.58295527,1.95442655,0.11874712,0.76473101,43.81585905,1.83323680
|
||||
8.79327918,7.58295527,1.95442655,0.11874712,0.76473101,43.81585905,1.83323680
|
||||
8.79327918,7.56482049,2.04156732,0.07090948,0.71613915,41.03175100,1.75134371
|
||||
8.79327918,7.56482049,2.04156732,0.07090948,0.71613915,41.03175100,1.75134371
|
||||
8.79327918,7.56482049,2.04156732,0.07090948,0.71613915,41.03175100,1.75134371
|
||||
8.93976688,7.54241968,2.12666338,0.11766646,0.76444367,43.79939598,1.85660215
|
||||
8.93976688,7.54241968,2.12666338,0.11766646,0.76444367,43.79939598,1.85660215
|
||||
8.93976688,7.51778837,2.21054687,0.07306011,0.71521178,40.97861664,1.77620068
|
||||
8.93976688,7.51778837,2.21054687,0.07306011,0.71521178,40.97861664,1.77620068
|
||||
8.93976688,7.51778837,2.21054687,0.07306011,0.71521178,40.97861664,1.77620068
|
||||
9.08635531,7.48851150,2.29170480,0.13341347,0.76295769,43.71425538,1.91238650
|
||||
9.08635531,7.48851150,2.29170480,0.13341347,0.76295769,43.71425538,1.91238650
|
||||
9.08635531,7.48851150,2.29170480,0.13341347,0.76295769,43.71425538,1.91238650
|
||||
9.23294374,7.45465503,2.37244927,0.18540415,0.81151076,46.49614134,2.01478393
|
||||
9.23294374,7.45465503,2.37244927,0.18540415,0.81151076,46.49614134,2.01478393
|
||||
9.23294374,7.41270398,2.44951595,0.13539850,0.76023097,43.55802618,1.92747750
|
||||
9.23294374,7.41270398,2.44951595,0.13539850,0.76023097,43.55802618,1.92747750
|
||||
9.23294374,7.41270398,2.44951595,0.13539850,0.76023097,43.55802618,1.92747750
|
||||
9.37966363,7.36421073,2.52246158,0.19241589,0.80615572,46.18932012,2.03904426
|
||||
9.37966363,7.36421073,2.52246158,0.19241589,0.80615572,46.18932012,2.03904426
|
||||
9.37966363,7.31240084,2.59231944,0.14135561,0.75476769,43.24500315,1.94425941
|
||||
9.37966363,7.31240084,2.59231944,0.14135561,0.75476769,43.24500315,1.94425941
|
||||
9.37966363,7.31240084,2.59231944,0.14135561,0.75476769,43.24500315,1.94425941
|
||||
9.52638352,7.25583054,2.65661979,0.18733258,0.80055856,45.86862679,2.02180154
|
||||
9.52638352,7.25583054,2.65661979,0.18733258,0.80055856,45.86862679,2.02180154
|
||||
9.52638352,7.25583054,2.65661979,0.18733258,0.80055856,45.86862679,2.02180154
|
||||
9.52638352,7.19700364,2.71785348,0.13617102,0.74889767,42.90867552,1.92138799
|
||||
9.52638352,7.19700364,2.71785348,0.13617102,0.74889767,42.90867552,1.92138799
|
||||
9.67324555,7.13424513,2.77310736,0.19204726,0.79390485,45.48739750,2.02138828
|
||||
9.67324555,7.13424513,2.77310736,0.19204726,0.79390485,45.48739750,2.02138828
|
||||
9.67324555,7.13424513,2.77310736,0.19204726,0.79390485,45.48739750,2.02138828
|
||||
9.67324555,7.06984023,2.82524526,0.14136466,0.74136384,42.47701894,1.91473825
|
||||
9.67324555,7.06984023,2.82524526,0.14136466,0.74136384,42.47701894,1.91473825
|
||||
9.67324555,7.06984023,2.82524526,0.14136466,0.74136384,42.47701894,1.91473825
|
||||
9.82010758,7.00251054,2.87151259,0.18640975,0.78582958,45.02471820,1.98123881
|
||||
9.82010758,7.00251054,2.87151259,0.18640975,0.78582958,45.02471820,1.98123881
|
||||
9.82010758,6.93463260,2.91613153,0.13657573,0.73373738,42.04005530,1.87537804
|
||||
9.82010758,6.93463260,2.91613153,0.13657573,0.73373738,42.04005530,1.87537804
|
||||
9.82010758,6.93463260,2.91613153,0.13657573,0.73373738,42.04005530,1.87537804
|
||||
9.96710085,6.86491470,2.95584378,0.19302664,0.77930581,44.65093381,1.97391025
|
||||
9.96710085,6.86491470,2.95584378,0.19302664,0.77930581,44.65093381,1.97391025
|
||||
9.96710085,6.78897395,2.99383468,0.13994139,0.72578883,41.58463649,1.86185767
|
||||
9.96710085,6.78897395,2.99383468,0.13994139,0.72578883,41.58463649,1.86185767
|
||||
9.96710085,6.78897395,2.99383468,0.13994139,0.72578883,41.58463649,1.86185767
|
||||
10.11409411,6.71172835,3.02596120,0.18136088,0.77022095,44.13040963,1.92516645
|
||||
10.11409411,6.71172835,3.02596120,0.18136088,0.77022095,44.13040963,1.92516645
|
||||
10.11409411,6.71172835,3.02596120,0.18136088,0.77022095,44.13040963,1.92516645
|
||||
10.11409411,6.63347862,3.05626374,0.12900608,0.71798308,41.13740025,1.81636514
|
||||
10.11409411,6.63347862,3.05626374,0.12900608,0.71798308,41.13740025,1.81636514
|
||||
10.26118771,6.55529243,3.08196336,0.18246126,0.76392106,43.76945234,1.91491503
|
||||
10.26118771,6.55529243,3.08196336,0.18246126,0.76392106,43.76945234,1.91491503
|
||||
10.26118771,6.55529243,3.08196336,0.18246126,0.76392106,43.76945234,1.91491503
|
||||
10.26118771,6.47515240,3.10578482,0.13165012,0.71279052,40.83988858,1.81127122
|
||||
10.26118771,6.47515240,3.10578482,0.13165012,0.71279052,40.83988858,1.81127122
|
||||
10.40828131,6.39293908,3.12490022,0.17310304,0.75929236,43.50424747,1.88402253
|
||||
10.40828131,6.39293908,3.12490022,0.17310304,0.75929236,43.50424747,1.88402253
|
||||
10.40828131,6.39293908,3.12490022,0.17310304,0.75929236,43.50424747,1.88402253
|
||||
10.40828131,6.30895569,3.14292305,0.12196820,0.70927309,40.63835473,1.78609577
|
||||
10.40828131,6.30895569,3.14292305,0.12196820,0.70927309,40.63835473,1.78609577
|
||||
10.40828131,6.30895569,3.14292305,0.12196820,0.70927309,40.63835473,1.78609577
|
||||
10.55542921,6.22329909,3.15634519,0.17406130,0.75675364,43.35878947,1.89461372
|
||||
10.55542921,6.22329909,3.15634519,0.17406130,0.75675364,43.35878947,1.89461372
|
||||
10.55542921,6.13562431,3.16966081,0.12441105,0.70687647,40.50103832,1.80363648
|
||||
10.55542921,6.13562431,3.16966081,0.12441105,0.70687647,40.50103832,1.80363648
|
||||
10.55542921,6.13562431,3.16966081,0.12441105,0.70687647,40.50103832,1.80363648
|
||||
10.70257711,6.04576112,3.18190235,0.16923645,0.75396624,43.19908370,1.89905183
|
||||
10.70257711,6.04576112,3.18190235,0.16923645,0.75396624,43.19908370,1.89905183
|
||||
10.70257711,5.95520268,3.19068563,0.12232422,0.70366565,40.31707172,1.81539225
|
||||
10.70257711,5.95520268,3.19068563,0.12232422,0.70366565,40.31707172,1.81539225
|
||||
10.70257711,5.95520268,3.19068563,0.12232422,0.70366565,40.31707172,1.81539225
|
||||
10.89787047,5.86591843,3.18855849,0.19349811,0.65261665,37.39217981,1.70862663
|
||||
10.89787047,5.86591843,3.18855849,0.19349811,0.65261665,37.39217981,1.70862663
|
||||
10.89787047,5.77674524,3.18333659,0.14229690,0.60252062,34.52188844,1.59764773
|
||||
10.89787047,5.77674524,3.18333659,0.14229690,0.60252062,34.52188844,1.59764773
|
||||
10.89787047,5.77674524,3.18333659,0.14229690,0.60252062,34.52188844,1.59764773
|
||||
11.09316384,5.68759397,3.17598608,0.19842053,0.55405513,31.74502039,1.48572993
|
||||
11.09316384,5.68759397,3.17598608,0.19842053,0.55405513,31.74502039,1.48572993
|
||||
11.09316384,5.68759397,3.17598608,0.19842053,0.55405513,31.74502039,1.48572993
|
||||
11.09316384,5.59826802,3.16655075,0.14832547,0.50695887,29.04660389,1.37243480
|
||||
11.09316384,5.59826802,3.16655075,0.14832547,0.50695887,29.04660389,1.37243480
|
||||
11.28845721,5.50870939,3.15502761,0.18953243,0.46118346,26.42386589,1.25765937
|
||||
11.28845721,5.50870939,3.15502761,0.18953243,0.46118346,26.42386589,1.25765937
|
||||
11.28845721,5.50870939,3.15502761,0.18953243,0.46118346,26.42386589,1.25765937
|
||||
11.28845721,5.41876793,3.14195441,0.14071721,0.41706196,23.89588994,1.14313731
|
||||
11.28845721,5.41876793,3.14195441,0.14071721,0.41706196,23.89588994,1.14313731
|
||||
11.28845721,5.41876793,3.14195441,0.14071721,0.41706196,23.89588994,1.14313731
|
||||
11.28845721,5.33051239,3.12799455,0.09782255,0.37578383,21.53082766,1.03257185
|
||||
11.28845721,5.33051239,3.12799455,0.09782255,0.37578383,21.53082766,1.03257185
|
||||
11.48375057,5.24424888,3.11367515,0.12547392,0.33761016,19.34363716,0.92753118
|
||||
11.48375057,5.24424888,3.11367515,0.12547392,0.33761016,19.34363716,0.92753118
|
||||
11.48375057,5.24424888,3.11367515,0.12547392,0.33761016,19.34363716,0.92753118
|
||||
11.48375057,5.15975847,3.09858397,0.08667729,0.30185929,17.29526343,0.82582957
|
||||
11.48375057,5.15975847,3.09858397,0.08667729,0.30185929,17.29526343,0.82582957
|
||||
11.67904394,5.07738967,3.08503730,0.10671066,0.27030960,15.48759922,0.73562605
|
||||
11.67904394,5.07738967,3.08503730,0.10671066,0.27030960,15.48759922,0.73562605
|
||||
11.67904394,5.07738967,3.08503730,0.10671066,0.27030960,15.48759922,0.73562605
|
||||
11.67904394,4.99612880,3.07180424,0.07379029,0.24134985,13.82832771,0.65124641
|
||||
11.67904394,4.99612880,3.07180424,0.07379029,0.24134985,13.82832771,0.65124641
|
||||
11.87433731,4.91618158,3.06069936,0.08897923,0.21637812,12.39755334,0.57909232
|
||||
11.87433731,4.91618158,3.06069936,0.08897923,0.21637812,12.39755334,0.57909232
|
||||
11.87433731,4.91618158,3.06069936,0.08897923,0.21637812,12.39755334,0.57909232
|
||||
11.87433731,4.83722237,3.05146391,0.06320876,0.19485846,11.16456759,0.51757459
|
||||
11.87433731,4.83722237,3.05146391,0.06320876,0.19485846,11.16456759,0.51757459
|
||||
11.87433731,4.83722237,3.05146391,0.06320876,0.19485846,11.16456759,0.51757459
|
||||
11.87433731,4.75881988,3.04278940,0.04114633,0.17536131,10.04746283,0.46123061
|
||||
11.87433731,4.75881988,3.04278940,0.04114633,0.17536131,10.04746283,0.46123061
|
||||
12.06963067,4.68092448,3.03492860,0.05329034,0.15793792,9.04917604,0.41066387
|
||||
12.06963067,4.68092448,3.03492860,0.05329034,0.15793792,9.04917604,0.41066387
|
||||
12.06963067,4.68092448,3.03492860,0.05329034,0.15793792,9.04917604,0.41066387
|
||||
12.06963067,4.60338097,3.02731503,0.03422097,0.14193788,8.13244171,0.36344602
|
||||
12.06963067,4.60338097,3.02731503,0.03422097,0.14193788,8.13244171,0.36344602
|
||||
12.06963067,4.60338097,3.02731503,0.03422097,0.14193788,8.13244171,0.36344602
|
||||
12.26492404,4.52624233,3.02094220,0.04354702,0.12811318,7.34034467,0.32305501
|
||||
12.26492404,4.52624233,3.02094220,0.04354702,0.12811318,7.34034467,0.32305501
|
||||
12.26492404,4.44937658,3.01531026,0.02810329,0.11587826,6.63933504,0.28732464
|
||||
12.26492404,4.44937658,3.01531026,0.02810329,0.11587826,6.63933504,0.28732464
|
||||
12.26492404,4.44937658,3.01531026,0.02810329,0.11587826,6.63933504,0.28732464
|
||||
12.26492404,4.37268642,3.00989029,0.01466297,0.10466424,5.99681914,0.25406488
|
||||
12.26492404,4.37268642,3.00989029,0.01466297,0.10466424,5.99681914,0.25406488
|
||||
12.46021741,4.29619633,3.00537186,0.02213056,0.09499040,5.44254929,0.22568438
|
||||
12.46021741,4.29619633,3.00537186,0.02213056,0.09499040,5.44254929,0.22568438
|
||||
12.46021741,4.29619633,3.00537186,0.02213056,0.09499040,5.44254929,0.22568438
|
||||
12.46021741,4.21981856,3.00106312,0.01085231,0.08615652,4.93640495,0.19940641
|
||||
12.46021741,4.21981856,3.00106312,0.01085231,0.08615652,4.93640495,0.19940641
|
||||
12.65551077,4.14356216,2.99749728,0.01685808,0.07855764,4.50102138,0.17708048
|
||||
12.65551077,4.14356216,2.99749728,0.01685808,0.07855764,4.50102138,0.17708048
|
||||
12.65551077,4.14356216,2.99749728,0.01685808,0.07855764,4.50102138,0.17708048
|
||||
12.65551077,4.06737867,2.99458456,0.00788114,0.07202950,4.12698656,0.15819872
|
||||
12.65551077,4.06737867,2.99458456,0.00788114,0.07202950,4.12698656,0.15819872
|
||||
12.65551077,4.06737867,2.99458456,0.00788114,0.07202950,4.12698656,0.15819872
|
||||
12.65551077,3.99124973,2.99181827,0.00000846,0.06606379,3.78517657,0.14073674
|
||||
12.65551077,3.99124973,2.99181827,0.00000846,0.06606379,3.78517657,0.14073674
|
||||
12.85080414,3.91517319,2.98932403,0.00508134,0.06073609,3.47992176,0.12509523
|
||||
12.85080414,3.91517319,2.98932403,0.00508134,0.06073609,3.47992176,0.12509523
|
||||
12.85080414,3.91517319,2.98932403,0.00508134,0.06073609,3.47992176,0.12509523
|
||||
12.85080414,3.83912984,2.98692169,-0.00184514,0.05584827,3.19987034,0.11051930
|
||||
12.85080414,3.83912984,2.98692169,-0.00184514,0.05584827,3.19987034,0.11051930
|
||||
12.85080414,3.76312711,2.98491737,-0.00769406,0.05163279,2.95834119,0.09808214
|
||||
12.85080414,3.76312711,2.98491737,-0.00769406,0.05163279,2.95834119,0.09808214
|
||||
12.85080414,3.76312711,2.98491737,-0.00769406,0.05163279,2.95834119,0.09808214
|
||||
13.04609751,3.68715251,2.98326916,-0.00327466,0.04801288,2.75093567,0.08754660
|
||||
13.04609751,3.68715251,2.98326916,-0.00327466,0.04801288,2.75093567,0.08754660
|
||||
13.04609751,3.68715251,2.98326916,-0.00327466,0.04801288,2.75093567,0.08754660
|
||||
13.04609751,3.61119604,2.98170710,-0.00831441,0.04470745,2.56154818,0.07781334
|
||||
13.04609751,3.61119604,2.98170710,-0.00831441,0.04470745,2.56154818,0.07781334
|
||||
13.24139087,3.53525526,2.98029991,-0.00458973,0.04175702,2.39250100,0.06909996
|
||||
13.24139087,3.53525526,2.98029991,-0.00458973,0.04175702,2.39250100,0.06909996
|
||||
13.24139087,3.53525526,2.98029991,-0.00458973,0.04175702,2.39250100,0.06909996
|
||||
13.24139087,3.45932541,2.97894786,-0.00909198,0.03905335,2.23759231,0.06099141
|
||||
13.24139087,3.45932541,2.97894786,-0.00909198,0.03905335,2.23759231,0.06099141
|
||||
13.24139087,3.45932541,2.97894786,-0.00909198,0.03905335,2.23759231,0.06099141
|
||||
13.24139087,3.38340584,2.97781984,-0.01299086,0.03672400,2.10413041,0.05407843
|
||||
13.24139087,3.38340584,2.97781984,-0.01299086,0.03672400,2.10413041,0.05407843
|
||||
13.43668424,3.30749695,2.97682684,-0.00967532,0.03466812,1.98633697,0.04798222
|
||||
13.43668424,3.30749695,2.97682684,-0.00967532,0.03466812,1.98633697,0.04798222
|
||||
13.43668424,3.30749695,2.97682684,-0.00967532,0.03466812,1.98633697,0.04798222
|
||||
13.43668424,3.23159389,2.97587591,-0.01318292,0.03278676,1.87854292,0.04231986
|
||||
13.43668424,3.23159389,2.97587591,-0.01318292,0.03278676,1.87854292,0.04231986
|
||||
13.63197761,3.15568911,2.97508060,-0.01019379,0.03116933,1.78587092,0.03749591
|
||||
13.63197761,3.15568911,2.97508060,-0.01019379,0.03116933,1.78587092,0.03749591
|
||||
13.63197761,3.15568911,2.97508060,-0.01019379,0.03116933,1.78587092,0.03749591
|
||||
13.63197761,3.07977344,2.97436984,-0.01327621,0.02974382,1.70419551,0.03322485
|
||||
13.63197761,3.07977344,2.97436984,-0.01327621,0.02974382,1.70419551,0.03322485
|
||||
13.63197761,3.07977344,2.97436984,-0.01327621,0.02974382,1.70419551,0.03322485
|
||||
13.63197761,3.00386381,2.97373967,-0.01607335,0.02848259,1.63193211,0.02944338
|
||||
13.63197761,3.00386381,2.97373967,-0.01607335,0.02848259,1.63193211,0.02944338
|
||||
13.82727097,2.92796525,2.97318951,-0.01327676,0.02735797,1.56749611,0.02609486
|
||||
13.82727097,2.92796525,2.97318951,-0.01327676,0.02735797,1.56749611,0.02609486
|
||||
13.82727097,2.92796525,2.97318951,-0.01327676,0.02735797,1.56749611,0.02609486
|
||||
13.82727097,2.85207290,2.97267208,-0.01584107,0.02632776,1.50846961,0.02300073
|
||||
13.82727097,2.85207290,2.97267208,-0.01584107,0.02632776,1.50846961,0.02300073
|
||||
14.02256434,2.77618274,2.97224032,-0.01321036,0.02544061,1.45763935,0.02036368
|
||||
14.02256434,2.77618274,2.97224032,-0.01321036,0.02544061,1.45763935,0.02036368
|
||||
14.02256434,2.77618274,2.97224032,-0.01321036,0.02544061,1.45763935,0.02036368
|
||||
14.02256434,2.70029245,2.97183016,-0.01556332,0.02463237,1.41133066,0.01792786
|
||||
14.02256434,2.70029245,2.97183016,-0.01556332,0.02463237,1.41133066,0.01792786
|
||||
14.02256434,2.62440536,2.97149150,-0.01772908,0.02393976,1.37164726,0.01586592
|
||||
14.02256434,2.62440536,2.97149150,-0.01772908,0.02393976,1.37164726,0.01586592
|
||||
14.02256434,2.62440536,2.97149150,-0.01772908,0.02393976,1.37164726,0.01586592
|
||||
14.21785771,2.54851968,2.97121081,-0.01518639,0.02334467,1.33755096,0.01411473
|
||||
14.21785771,2.54851968,2.97121081,-0.01518639,0.02334467,1.33755096,0.01411473
|
||||
14.21785771,2.54851968,2.97121081,-0.01518639,0.02334467,1.33755096,0.01411473
|
||||
14.21785771,2.47263508,2.97094404,-0.01721520,0.02280084,1.30639164,0.01249400
|
||||
14.21785771,2.47263508,2.97094404,-0.01721520,0.02280084,1.30639164,0.01249400
|
||||
14.21785771,2.39675162,2.97070565,-0.01913877,0.02231804,1.27872937,0.01105208
|
||||
14.21785771,2.39675162,2.97070565,-0.01913877,0.02231804,1.27872937,0.01105208
|
||||
14.21785771,2.39675162,2.97070565,-0.01913877,0.02231804,1.27872937,0.01105208
|
||||
14.41315107,2.32088639,2.97047870,-0.01671224,0.02187434,1.25330741,0.00971143
|
||||
14.41315107,2.32088639,2.97047870,-0.01671224,0.02187434,1.25330741,0.00971143
|
||||
14.41315107,2.24504981,2.97028742,-0.01854352,0.02149478,1.23156008,0.00857017
|
||||
14.41315107,2.24504981,2.97028742,-0.01854352,0.02149478,1.23156008,0.00857017
|
||||
14.41315107,2.24504981,2.97028742,-0.01854352,0.02149478,1.23156008,0.00857017
|
||||
14.60844444,2.16920900,2.97011730,-0.01616973,0.02115885,1.21231261,0.00755855
|
||||
14.60844444,2.16920900,2.97011730,-0.01616973,0.02115885,1.21231261,0.00755855
|
||||
14.60844444,2.16920900,2.97011730,-0.01616973,0.02115885,1.21231261,0.00755855
|
||||
14.60844444,2.09336693,2.96996512,-0.01792480,0.02086106,1.19525080,0.00665901
|
||||
14.60844444,2.09336693,2.96996512,-0.01792480,0.02086106,1.19525080,0.00665901
|
||||
14.60844444,2.01752397,2.96982942,-0.01962103,0.02059737,1.18014242,0.00586058
|
||||
14.60844444,2.01752397,2.96982942,-0.01962103,0.02059737,1.18014242,0.00586058
|
||||
14.60844444,2.01752397,2.96982942,-0.01962103,0.02059737,1.18014242,0.00586058
|
||||
14.80373781,1.94168702,2.96968535,-0.01731367,0.02036134,1.16661865,0.00510123
|
||||
14.80373781,1.94168702,2.96968535,-0.01731367,0.02036134,1.16661865,0.00510123
|
||||
14.80373781,1.86584918,2.96955790,-0.01897769,0.02016464,1.15534883,0.00445373
|
||||
14.80373781,1.86584918,2.96955790,-0.01897769,0.02016464,1.15534883,0.00445373
|
||||
14.80373781,1.86584918,2.96955790,-0.01897769,0.02016464,1.15534883,0.00445373
|
||||
14.99903117,1.79001126,2.96945097,-0.01668949,0.01999870,1.14584121,0.00390871
|
||||
14.99903117,1.79001126,2.96945097,-0.01668949,0.01999870,1.14584121,0.00390871
|
||||
14.99903117,1.79001126,2.96945097,-0.01668949,0.01999870,1.14584121,0.00390871
|
||||
14.99903117,1.71417143,2.96935151,-0.01830638,0.01984993,1.13731713,0.00341290
|
||||
14.99903117,1.71417143,2.96935151,-0.01830638,0.01984993,1.13731713,0.00341290
|
||||
14.99903117,1.63832767,2.96926053,-0.01989350,0.01971832,1.12977661,0.00296837
|
||||
14.99903117,1.63832767,2.96926053,-0.01989350,0.01971832,1.12977661,0.00296837
|
||||
14.99903117,1.63832767,2.96926053,-0.01989350,0.01971832,1.12977661,0.00296837
|
||||
15.19432454,1.56248371,2.96917422,-0.01763042,0.01959983,1.12298740,0.00255950
|
||||
15.19432454,1.56248371,2.96917422,-0.01763042,0.01959983,1.12298740,0.00255950
|
||||
15.19432454,1.48663856,2.96910137,-0.01918708,0.01950065,1.11730468,0.00221601
|
||||
15.19432454,1.48663856,2.96910137,-0.01918708,0.01950065,1.11730468,0.00221601
|
||||
15.19432454,1.48663856,2.96910137,-0.01918708,0.01950065,1.11730468,0.00221601
|
||||
15.38961791,1.41078952,2.96903947,-0.01692753,0.01941791,1.11256453,0.00192731
|
||||
15.38961791,1.41078952,2.96903947,-0.01692753,0.01941791,1.11256453,0.00192731
|
||||
15.38961791,1.33493873,2.96898117,-0.01845985,0.01934353,1.10830249,0.00166245
|
||||
15.38961791,1.33493873,2.96898117,-0.01845985,0.01934353,1.10830249,0.00166245
|
||||
15.38961791,1.33493873,2.96898117,-0.01845985,0.01934353,1.10830249,0.00166245
|
||||
15.38961791,1.25908830,2.96893027,-0.01997418,0.01928082,1.10470981,0.00143570
|
||||
15.38961791,1.25908830,2.96893027,-0.01997418,0.01928082,1.10470981,0.00143570
|
||||
15.38961791,1.25908830,2.96893027,-0.01997418,0.01928082,1.10470981,0.00143570
|
||||
15.58491127,1.18323614,2.96888120,-0.01772388,0.01922384,1.10144498,0.00122415
|
||||
15.58491127,1.18323614,2.96888120,-0.01772388,0.01922384,1.10144498,0.00122415
|
||||
15.58491127,1.10736414,2.96884168,-0.01922107,0.01917210,1.09848068,0.00104196
|
||||
15.58491127,1.10736414,2.96884168,-0.01922107,0.01917210,1.09848068,0.00104196
|
||||
15.58491127,1.10736414,2.96884168,-0.01922107,0.01917210,1.09848068,0.00104196
|
||||
15.58491127,1.03149210,2.96880128,-0.02071220,0.01913038,1.09609011,0.00087813
|
||||
15.58491127,1.03149210,2.96880128,-0.02071220,0.01913038,1.09609011,0.00087813
|
||||
15.78020464,0.95562145,2.96876670,-0.01846325,0.01909605,1.09412302,0.00074077
|
||||
15.78020464,0.95562145,2.96876670,-0.01846325,0.01909605,1.09412302,0.00074077
|
||||
15.78020464,0.95562145,2.96876670,-0.01846325,0.01909605,1.09412302,0.00074077
|
||||
15.78020464,0.87975086,2.96873561,-0.01994170,0.01906720,1.09247011,0.00062126
|
||||
15.78020464,0.87975086,2.96873561,-0.01994170,0.01906720,1.09247011,0.00062126
|
||||
15.78020464,0.87975086,2.96873561,-0.01994170,0.01906720,1.09247011,0.00062126
|
||||
15.97549801,0.80387888,2.96870731,-0.01769485,0.01904240,1.09104943,0.00051549
|
||||
15.97549801,0.80387888,2.96870731,-0.01769485,0.01904240,1.09104943,0.00051549
|
||||
15.97549801,0.72800700,2.96868153,-0.01916524,0.01902166,1.08986098,0.00042276
|
||||
15.97549801,0.72800700,2.96868153,-0.01916524,0.01902166,1.08986098,0.00042276
|
||||
15.97549801,0.72800700,2.96868153,-0.01916524,0.01902166,1.08986098,0.00042276
|
||||
15.97549801,0.65213516,2.96865853,-0.02062998,0.01900450,1.08887743,0.00034275
|
||||
15.97549801,0.65213516,2.96865853,-0.02062998,0.01900450,1.08887743,0.00034275
|
||||
15.97549801,0.65213516,2.96865853,-0.02062998,0.01900450,1.08887743,0.00034275
|
||||
16.17079137,0.57626546,2.96863643,-0.01838319,0.01898948,1.08801683,0.00026889
|
||||
16.17079137,0.57626546,2.96863643,-0.01838319,0.01898948,1.08801683,0.00026889
|
||||
16.17079137,0.50039034,2.96862041,-0.01983950,0.01897732,1.08732015,0.00021274
|
||||
16.17079137,0.50039034,2.96862041,-0.01983950,0.01897732,1.08732015,0.00021274
|
||||
16.17079137,0.50039034,2.96862041,-0.01983950,0.01897732,1.08732015,0.00021274
|
||||
16.36608474,0.42450680,2.96861097,-0.01758385,0.01896659,1.08670543,0.00017257
|
||||
16.36608474,0.42450680,2.96861097,-0.01758385,0.01896659,1.08670543,0.00017257
|
||||
16.36608474,0.34862428,2.96860146,-0.01903258,0.01895705,1.08615902,0.00013458
|
||||
16.36608474,0.34862428,2.96860146,-0.01903258,0.01895705,1.08615902,0.00013458
|
||||
16.36608474,0.34862428,2.96860146,-0.01903258,0.01895705,1.08615902,0.00013458
|
||||
16.36608474,0.27274144,2.96859320,-0.02047872,0.01894918,1.08570822,0.00010242
|
||||
16.36608474,0.27274144,2.96859320,-0.02047872,0.01894918,1.08570822,0.00010242
|
||||
16.56137811,0.19686029,2.96858646,-0.01822310,0.01894322,1.08536672,0.00007718
|
||||
16.56137811,0.19686029,2.96858646,-0.01822310,0.01894322,1.08536672,0.00007718
|
||||
16.56137811,0.19686029,2.96858646,-0.01822310,0.01894322,1.08536672,0.00007718
|
||||
16.56137811,0.12097973,2.96857923,-0.01966752,0.01893726,1.08502521,0.00005088
|
||||
16.56137811,0.12097973,2.96857923,-0.01966752,0.01893726,1.08502521,0.00005088
|
||||
16.56137811,0.12097973,2.96857923,-0.01966752,0.01893726,1.08502521,0.00005088
|
||||
16.75667147,0.04509974,2.96857151,-0.01741453,0.01893130,1.08468370,0.00002370
|
||||
16.75667147,0.04509974,2.96857151,-0.01741453,0.01893130,1.08468370,0.00002370
|
||||
16.75667147,-0.03078182,2.96856549,-0.01885708,0.01892725,1.08445147,0.00000363
|
||||
16.75667147,-0.03078182,2.96856549,-0.01885708,0.01892725,1.08445147,0.00000363
|
||||
16.75667147,-0.03078182,2.96856549,-0.01885708,0.01892725,1.08445147,0.00000363
|
||||
16.75667147,-0.10666124,2.96856075,-0.02029776,0.01892439,1.08428755,-0.00001150
|
||||
16.75667147,-0.10666124,2.96856075,-0.02029776,0.01892439,1.08428755,-0.00001150
|
||||
16.95196484,-0.18253953,2.96855635,-0.01804253,0.01892224,1.08416460,-0.00002446
|
||||
16.95196484,-0.18253953,2.96855635,-0.01804253,0.01892224,1.08416460,-0.00002446
|
||||
16.95196484,-0.18253953,2.96855635,-0.01804253,0.01892224,1.08416460,-0.00002446
|
||||
16.95196484,-0.25841727,2.96855175,-0.01948279,0.01892010,1.08404166,-0.00003787
|
||||
16.95196484,-0.25841727,2.96855175,-0.01948279,0.01892010,1.08404166,-0.00003787
|
||||
16.95196484,-0.25841727,2.96855175,-0.01948279,0.01892010,1.08404166,-0.00003787
|
||||
16.95196484,-0.33429443,2.96854696,-0.02092288,0.01891771,1.08390505,-0.00005214
|
||||
16.95196484,-0.33429443,2.96854696,-0.02092288,0.01891771,1.08390505,-0.00005214
|
||||
17.14725821,-0.41017102,2.96854198,-0.01866894,0.01891533,1.08376845,-0.00006672
|
||||
17.14725821,-0.41017102,2.96854198,-0.01866894,0.01891533,1.08376845,-0.00006672
|
||||
17.14725821,-0.41017102,2.96854198,-0.01866894,0.01891533,1.08376845,-0.00006672
|
||||
17.14725821,-0.48605213,2.96853684,-0.02010930,0.01891509,1.08375479,-0.00007739
|
||||
17.14725821,-0.48605213,2.96853684,-0.02010930,0.01891509,1.08375479,-0.00007739
|
||||
17.34255157,-0.56194386,2.96852707,-0.01786051,0.01891724,1.08387773,-0.00009234
|
||||
17.34255157,-0.56194386,2.96852707,-0.01786051,0.01891724,1.08387773,-0.00009234
|
||||
17.34255157,-0.56194386,2.96852707,-0.01786051,0.01891724,1.08387773,-0.00009234
|
||||
17.34255157,-0.63783125,2.96852159,-0.01930150,0.01892057,1.08406898,-0.00009649
|
||||
17.34255157,-0.63783125,2.96852159,-0.01930150,0.01892057,1.08406898,-0.00009649
|
||||
17.34255157,-0.63783125,2.96852159,-0.01930150,0.01892057,1.08406898,-0.00009649
|
||||
17.34255157,-0.71371281,2.96852671,-0.02073198,0.01892010,1.08404166,-0.00008731
|
||||
17.34255157,-0.71371281,2.96852671,-0.02073198,0.01892010,1.08404166,-0.00008731
|
||||
17.53784494,-0.78959339,2.96853290,-0.01846664,0.01891890,1.08397336,-0.00007738
|
||||
17.53784494,-0.78959339,2.96853290,-0.01846664,0.01891890,1.08397336,-0.00007738
|
||||
17.53784494,-0.78959339,2.96853290,-0.01846664,0.01891890,1.08397336,-0.00007738
|
||||
17.53784494,-0.86547367,2.96853859,-0.01989640,0.01891795,1.08391872,-0.00006802
|
||||
17.53784494,-0.86547367,2.96853859,-0.01989640,0.01891795,1.08391872,-0.00006802
|
||||
17.73313831,-0.94135352,2.96854399,-0.01763216,0.01891652,1.08383675,-0.00006014
|
||||
17.73313831,-0.94135352,2.96854399,-0.01763216,0.01891652,1.08383675,-0.00006014
|
||||
17.73313831,-0.94135352,2.96854399,-0.01763216,0.01891652,1.08383675,-0.00006014
|
||||
17.73313831,-1.01723501,2.96854698,-0.01906453,0.01891342,1.08365917,-0.00006045
|
||||
17.73313831,-1.01723501,2.96854698,-0.01906453,0.01891342,1.08365917,-0.00006045
|
||||
17.73313831,-1.01723501,2.96854698,-0.01906453,0.01891342,1.08365917,-0.00006045
|
||||
17.73313831,-1.09311600,2.96854963,-0.02049674,0.01891008,1.08346792,-0.00006190
|
||||
17.73313831,-1.09311600,2.96854963,-0.02049674,0.01891008,1.08346792,-0.00006190
|
||||
17.92843167,-1.16899645,2.96855195,-0.01823658,0.01890674,1.08327668,-0.00006395
|
||||
17.92843167,-1.16899645,2.96855195,-0.01823658,0.01890674,1.08327668,-0.00006395
|
||||
17.92843167,-1.16899645,2.96855195,-0.01823658,0.01890674,1.08327668,-0.00006395
|
||||
17.92843167,-1.24487634,2.96855393,-0.01966907,0.01890341,1.08308543,-0.00006672
|
||||
17.92843167,-1.24487634,2.96855393,-0.01966907,0.01890341,1.08308543,-0.00006672
|
||||
18.12372504,-1.32075567,2.96855559,-0.01741052,0.01889983,1.08288053,-0.00007054
|
||||
18.12372504,-1.32075567,2.96855559,-0.01741052,0.01889983,1.08288053,-0.00007054
|
||||
18.12372504,-1.32075567,2.96855559,-0.01741052,0.01889983,1.08288053,-0.00007054
|
||||
18.12372504,-1.39661881,2.96855837,-0.01884154,0.01889578,1.08264830,-0.00007320
|
||||
18.12372504,-1.39661881,2.96855837,-0.01884154,0.01889578,1.08264830,-0.00007320
|
||||
18.12372504,-1.39661881,2.96855837,-0.01884154,0.01889578,1.08264830,-0.00007320
|
||||
18.12372504,-1.47247272,2.96855936,-0.02027359,0.01889244,1.08245705,-0.00007793
|
||||
18.12372504,-1.47247272,2.96855936,-0.02027359,0.01889244,1.08245705,-0.00007793
|
||||
18.31901841,-1.54832527,2.96856224,-0.01801439,0.01889077,1.08236143,-0.00007552
|
||||
18.31901841,-1.54832527,2.96856224,-0.01801439,0.01889077,1.08236143,-0.00007552
|
||||
18.31901841,-1.54832527,2.96856224,-0.01801439,0.01889077,1.08236143,-0.00007552
|
||||
18.31901841,-1.62417833,2.96856493,-0.01944451,0.01888886,1.08225215,-0.00007402
|
||||
18.31901841,-1.62417833,2.96856493,-0.01944451,0.01888886,1.08225215,-0.00007402
|
||||
18.31901841,-1.70002757,2.96855755,-0.02088474,0.01889149,1.08240241,-0.00008335
|
||||
18.31901841,-1.70002757,2.96855755,-0.02088474,0.01889149,1.08240241,-0.00008335
|
||||
18.31901841,-1.70002757,2.96855755,-0.02088474,0.01889149,1.08240241,-0.00008335
|
||||
18.51431177,-1.77587687,2.96854768,-0.01863810,0.01889554,1.08263464,-0.00009468
|
||||
18.51431177,-1.77587687,2.96854768,-0.01863810,0.01889554,1.08263464,-0.00009468
|
||||
18.51431177,-1.85172763,2.96853884,-0.02008028,0.01889959,1.08286687,-0.00010405
|
||||
18.51431177,-1.85172763,2.96853884,-0.02008028,0.01889959,1.08286687,-0.00010405
|
||||
18.51431177,-1.85172763,2.96853884,-0.02008028,0.01889959,1.08286687,-0.00010405
|
||||
18.70960514,-1.92757957,2.96853059,-0.01783091,0.01890388,1.08311275,-0.00011168
|
||||
18.70960514,-1.92757957,2.96853059,-0.01783091,0.01890388,1.08311275,-0.00011168
|
||||
18.70960514,-1.92757957,2.96853059,-0.01783091,0.01890388,1.08311275,-0.00011168
|
||||
18.70960514,-2.00343258,2.96852277,-0.01927257,0.01890794,1.08334498,-0.00011903
|
||||
18.70960514,-2.00343258,2.96852277,-0.01927257,0.01890794,1.08334498,-0.00011903
|
||||
18.85675304,-2.07928660,2.96851530,-0.03229481,-0.07926278,-4.54142280,-0.21207433
|
||||
18.85675304,-2.07928660,2.96851530,-0.03229481,-0.07926278,-4.54142280,-0.21207433
|
||||
18.85675304,-2.07928660,2.96851530,-0.03229481,-0.07926278,-4.54142280,-0.21207433
|
||||
18.85675304,-2.15514163,2.96850816,-0.03373647,-0.07925873,-4.54119057,-0.22680176
|
||||
18.85675304,-2.15514163,2.96850816,-0.03373647,-0.07925873,-4.54119057,-0.22680176
|
||||
19.00390093,-2.23098379,2.97434722,-0.04057900,-0.17226434,-9.87001991,-0.40327844
|
||||
19.00390093,-2.23098379,2.97434722,-0.04057900,-0.17226434,-9.87001991,-0.40327844
|
||||
19.00390093,-2.23098379,2.97434722,-0.04057900,-0.17226434,-9.87001991,-0.40327844
|
||||
19.00390093,-2.30675718,2.98404997,-0.03279563,-0.16406656,-9.40032146,-0.39723701
|
||||
19.00390093,-2.30675718,2.98404997,-0.03279563,-0.16406656,-9.40032146,-0.39723701
|
||||
19.00390093,-2.30675718,2.98404997,-0.03279563,-0.16406656,-9.40032146,-0.39723701
|
||||
19.15099451,-2.38231106,3.00009910,-0.05639908,-0.24902340,-14.26799009,-0.58127679
|
||||
19.15099451,-2.38231106,3.00009910,-0.05639908,-0.24902340,-14.26799009,-0.58127679
|
||||
19.15099451,-2.45764081,3.01734038,-0.04286913,-0.23564884,-13.50168385,-0.56503723
|
||||
19.15099451,-2.45764081,3.01734038,-0.04286913,-0.23564884,-13.50168385,-0.56503723
|
||||
19.15099451,-2.45764081,3.01734038,-0.04286913,-0.23564884,-13.50168385,-0.56503723
|
||||
19.29808810,-2.53253790,3.03923726,-0.05876851,-0.31721370,-18.17500628,-0.71797556
|
||||
19.29808810,-2.53253790,3.03923726,-0.05876851,-0.31721370,-18.17500628,-0.71797556
|
||||
19.29808810,-2.60686587,3.06515605,-0.03904971,-0.29819434,-17.08527692,-0.68867346
|
||||
19.29808810,-2.60686587,3.06515605,-0.03904971,-0.29819434,-17.08527692,-0.68867346
|
||||
19.29808810,-2.60686587,3.06515605,-0.03904971,-0.29819434,-17.08527692,-0.68867346
|
||||
19.44508136,-2.68024988,3.09702977,-0.06994291,-0.37333120,-21.39030188,-0.85420815
|
||||
19.44508136,-2.68024988,3.09702977,-0.06994291,-0.37333120,-21.39030188,-0.85420815
|
||||
19.44508136,-2.68024988,3.09702977,-0.06994291,-0.37333120,-21.39030188,-0.85420815
|
||||
19.44508136,-2.75286293,3.13076682,-0.04591130,-0.35014952,-20.06208964,-0.81650049
|
||||
19.44508136,-2.75286293,3.13076682,-0.04591130,-0.35014952,-20.06208964,-0.81650049
|
||||
19.59207462,-2.82393173,3.17120120,-0.06536801,-0.42066702,-24.10244477,-0.94448085
|
||||
19.59207462,-2.82393173,3.17120120,-0.06536801,-0.42066702,-24.10244477,-0.94448085
|
||||
19.59207462,-2.82393173,3.17120120,-0.06536801,-0.42066702,-24.10244477,-0.94448085
|
||||
19.59207462,-2.89382536,3.21378377,-0.03655647,-0.39286384,-22.50943975,-0.89540707
|
||||
19.59207462,-2.89382536,3.21378377,-0.03655647,-0.39286384,-22.50943975,-0.89540707
|
||||
19.73893668,-2.96170202,3.26215092,-0.07119268,-0.45976119,-26.34237570,-1.04639156
|
||||
19.73893668,-2.96170202,3.26215092,-0.07119268,-0.45976119,-26.34237570,-1.04639156
|
||||
19.73893668,-2.96170202,3.26215092,-0.07119268,-0.45976119,-26.34237570,-1.04639156
|
||||
19.73893668,-3.02834035,3.31137388,-0.04041651,-0.42961912,-24.61536237,-0.99420379
|
||||
19.73893668,-3.02834035,3.31137388,-0.04041651,-0.42961912,-24.61536237,-0.99420379
|
||||
19.73893668,-3.02834035,3.31137388,-0.04041651,-0.42961912,-24.61536237,-0.99420379
|
||||
19.88579874,-3.09218296,3.36721243,-0.06394392,-0.49342275,-28.27104125,-1.11297133
|
||||
19.88579874,-3.09218296,3.36721243,-0.06394392,-0.49342275,-28.27104125,-1.11297133
|
||||
19.88579874,-3.15438362,3.42425545,-0.03011099,-0.45995546,-26.35350662,-1.05295888
|
||||
19.88579874,-3.15438362,3.42425545,-0.03011099,-0.45995546,-26.35350662,-1.05295888
|
||||
19.88579874,-3.15438362,3.42425545,-0.03011099,-0.45995546,-26.35350662,-1.05295888
|
||||
20.03251862,-3.21369466,3.48588448,-0.06936921,-0.52226755,-29.92372618,-1.20252560
|
||||
20.03251862,-3.21369466,3.48588448,-0.06936921,-0.52226755,-29.92372618,-1.20252560
|
||||
20.17923850,-3.27094979,3.54915807,-0.10264494,-0.58502714,-33.51958626,-1.32246812
|
||||
20.17923850,-3.27094979,3.54915807,-0.10264494,-0.58502714,-33.51958626,-1.32246812
|
||||
20.17923850,-3.27094979,3.54915807,-0.10264494,-0.58502714,-33.51958626,-1.32246812
|
||||
20.17923850,-3.32405848,3.61840483,-0.06142762,-0.54573171,-31.26812369,-1.25478619
|
||||
20.17923850,-3.32405848,3.61840483,-0.06142762,-0.54573171,-31.26812369,-1.25478619
|
||||
20.17923850,-3.32405848,3.61840483,-0.06142762,-0.54573171,-31.26812369,-1.25478619
|
||||
20.32582688,-3.37280755,3.69316747,-0.10239782,-0.60126412,-34.44989672,-1.38293652
|
||||
20.32582688,-3.37280755,3.69316747,-0.10239782,-0.60126412,-34.44989672,-1.38293652
|
||||
20.32582688,-3.41931381,3.76819686,-0.06055881,-0.56038488,-32.10768825,-1.31199246
|
||||
20.32582688,-3.41931381,3.76819686,-0.06055881,-0.56038488,-32.10768825,-1.31199246
|
||||
20.32582688,-3.41931381,3.76819686,-0.06055881,-0.56038488,-32.10768825,-1.31199246
|
||||
20.47241526,-3.46152349,3.84711776,-0.09195296,-0.61557421,-35.26980400,-1.41731168
|
||||
20.47241526,-3.46152349,3.84711776,-0.09195296,-0.61557421,-35.26980400,-1.41731168
|
||||
20.47241526,-3.50068789,3.92725840,-0.04941040,-0.57317766,-32.84066089,-1.34305901
|
||||
20.47241526,-3.50068789,3.92725840,-0.04941040,-0.57317766,-32.84066089,-1.34305901
|
||||
20.47241526,-3.50068789,3.92725840,-0.04941040,-0.57317766,-32.84066089,-1.34305901
|
||||
20.61890301,-3.53463336,4.01074643,-0.09369707,-0.62679510,-35.91271374,-1.47719239
|
||||
20.61890301,-3.53463336,4.01074643,-0.09369707,-0.62679510,-35.91271374,-1.47719239
|
||||
20.61890301,-3.53463336,4.01074643,-0.09369707,-0.62679510,-35.91271374,-1.47719239
|
||||
20.76539077,-3.56613211,4.09472696,-0.13216763,-0.68176175,-39.06207067,-1.58497127
|
||||
20.76539077,-3.56613211,4.09472696,-0.13216763,-0.68176175,-39.06207067,-1.58497127
|
||||
20.76539077,-3.59140747,4.18091759,-0.08570995,-0.63649607,-36.46853855,-1.50982562
|
||||
20.76539077,-3.59140747,4.18091759,-0.08570995,-0.63649607,-36.46853855,-1.50982562
|
||||
20.76539077,-3.59140747,4.18091759,-0.08570995,-0.63649607,-36.46853855,-1.50982562
|
||||
20.91182396,-3.61065961,4.26803421,-0.13424305,-0.68826076,-39.43443663,-1.63626039
|
||||
20.91182396,-3.61065961,4.26803421,-0.13424305,-0.68826076,-39.43443663,-1.63626039
|
||||
20.91182396,-3.61065961,4.26803421,-0.13424305,-0.68826076,-39.43443663,-1.63626039
|
||||
20.91182396,-3.62671017,4.35607628,-0.08831510,-0.64231607,-36.80199976,-1.55850104
|
||||
20.91182396,-3.62671017,4.35607628,-0.08831510,-0.64231607,-36.80199976,-1.55850104
|
||||
21.05825715,-3.63611200,4.44437259,-0.12615879,-0.69311826,-39.71275089,-1.65584211
|
||||
21.05825715,-3.63611200,4.44437259,-0.12615879,-0.69311826,-39.71275089,-1.65584211
|
||||
21.05825715,-3.63611200,4.44437259,-0.12615879,-0.69311826,-39.71275089,-1.65584211
|
||||
21.05825715,-3.64227948,4.53324289,-0.08006261,-0.64627378,-37.02875976,-1.57394635
|
||||
21.05825715,-3.64227948,4.53324289,-0.08006261,-0.64627378,-37.02875976,-1.57394635
|
||||
21.25744160,-3.64271742,4.62190030,-0.14857342,-0.59854834,-34.29429352,-1.47893646
|
||||
21.25744160,-3.64271742,4.62190030,-0.14857342,-0.59854834,-34.29429352,-1.47893646
|
||||
21.25744160,-3.64271742,4.62190030,-0.14857342,-0.59854834,-34.29429352,-1.47893646
|
||||
21.25744160,-3.64050497,4.71090088,-0.10127840,-0.55174057,-31.61240608,-1.38052218
|
||||
21.25744160,-3.64050497,4.71090088,-0.10127840,-0.55174057,-31.61240608,-1.38052218
|
||||
21.45662606,-3.63621095,4.80044154,-0.15502429,-0.50613205,-28.99923035,-1.28039573
|
||||
21.45662606,-3.63621095,4.80044154,-0.15502429,-0.50613205,-28.99923035,-1.28039573
|
||||
21.45662606,-3.63621095,4.80044154,-0.15502429,-0.50613205,-28.99923035,-1.28039573
|
||||
21.45662606,-3.63049654,4.89029663,-0.10946321,-0.46229951,-26.48781077,-1.18102461
|
||||
21.45662606,-3.63049654,4.89029663,-0.10946321,-0.46229951,-26.48781077,-1.18102461
|
||||
21.45662606,-3.63049654,4.89029663,-0.10946321,-0.46229951,-26.48781077,-1.18102461
|
||||
21.45662606,-3.62328311,4.97882612,-0.06936712,-0.42075412,-24.10743521,-1.08328015
|
||||
21.45662606,-3.62328311,4.97882612,-0.06936712,-0.42075412,-24.10743521,-1.08328015
|
||||
21.65581052,-3.61489413,5.06590399,-0.10873003,-0.38159577,-21.86382735,-0.98800365
|
||||
21.65581052,-3.61489413,5.06590399,-0.10873003,-0.38159577,-21.86382735,-0.98800365
|
||||
21.65581052,-3.61489413,5.06590399,-0.10873003,-0.38159577,-21.86382735,-0.98800365
|
||||
21.65581052,-3.60515319,5.15175247,-0.07159107,-0.34439175,-19.73219361,-0.89397622
|
||||
21.65581052,-3.60515319,5.15175247,-0.07159107,-0.34439175,-19.73219361,-0.89397622
|
||||
21.65581052,-3.60515319,5.15175247,-0.07159107,-0.34439175,-19.73219361,-0.89397622
|
||||
21.85499498,-3.59623055,5.23573636,-0.10173870,-0.31091790,-17.81428332,-0.80906283
|
||||
21.85499498,-3.59623055,5.23573636,-0.10173870,-0.31091790,-17.81428332,-0.80906283
|
||||
21.85499498,-3.58795097,5.31821952,-0.07052738,-0.28059260,-16.07677199,-0.73174782
|
||||
21.85499498,-3.58795097,5.31821952,-0.07052738,-0.28059260,-16.07677199,-0.73174782
|
||||
21.85499498,-3.58795097,5.31821952,-0.07052738,-0.28059260,-16.07677199,-0.73174782
|
||||
22.05417943,-3.57964729,5.39968928,-0.09360288,-0.25250451,-14.46744282,-0.65887958
|
||||
22.05417943,-3.57964729,5.39968928,-0.09360288,-0.25250451,-14.46744282,-0.65887958
|
||||
22.05417943,-3.57336701,5.47930363,-0.06808244,-0.22801761,-13.06444683,-0.59725212
|
||||
22.05417943,-3.57336701,5.47930363,-0.06808244,-0.22801761,-13.06444683,-0.59725212
|
||||
22.05417943,-3.57336701,5.47930363,-0.06808244,-0.22801761,-13.06444683,-0.59725212
|
||||
22.05417943,-3.56664332,5.55863302,-0.04571562,-0.20523326,-11.75899960,-0.53816700
|
||||
22.05417943,-3.56664332,5.55863302,-0.04571562,-0.20523326,-11.75899960,-0.53816700
|
||||
22.05417943,-3.56664332,5.55863302,-0.04571562,-0.20523326,-11.75899960,-0.53816700
|
||||
22.25336389,-3.56105392,5.63726153,-0.06425966,-0.18513624,-10.60752533,-0.48672656
|
||||
22.25336389,-3.56105392,5.63726153,-0.06425966,-0.18513624,-10.60752533,-0.48672656
|
||||
22.25336389,-3.55611463,5.71534403,-0.04588769,-0.16702346,-9.56973956,-0.44055942
|
||||
22.25336389,-3.55611463,5.71534403,-0.04588769,-0.16702346,-9.56973956,-0.44055942
|
||||
22.25336389,-3.55611463,5.71534403,-0.04588769,-0.16702346,-9.56973956,-0.44055942
|
||||
22.45254835,-3.55121350,5.79308230,-0.05999697,-0.15020685,-8.60621843,-0.39707188
|
||||
22.45254835,-3.55121350,5.79308230,-0.05999697,-0.15020685,-8.60621843,-0.39707188
|
||||
22.45254835,-3.54726019,5.87038358,-0.04453226,-0.13537685,-7.75652241,-0.35945188
|
||||
22.45254835,-3.54726019,5.87038358,-0.04453226,-0.13537685,-7.75652241,-0.35945188
|
||||
22.45254835,-3.54726019,5.87038358,-0.04453226,-0.13537685,-7.75652241,-0.35945188
|
||||
22.45254835,-3.54339496,5.94744573,-0.03134659,-0.12164430,-6.96970511,-0.32421096
|
||||
22.45254835,-3.54339496,5.94744573,-0.03134659,-0.12164430,-6.96970511,-0.32421096
|
||||
22.45254835,-3.54339496,5.94744573,-0.03134659,-0.12164430,-6.96970511,-0.32421096
|
||||
22.65173281,-3.54032869,6.02420691,-0.04259835,-0.10954289,-6.27634528,-0.29382896
|
||||
22.65173281,-3.54032869,6.02420691,-0.04259835,-0.10954289,-6.27634528,-0.29382896
|
||||
22.65173281,-3.53768106,6.10076549,-0.03191446,-0.09862880,-5.65101414,-0.26666100
|
||||
22.65173281,-3.53768106,6.10076549,-0.03191446,-0.09862880,-5.65101414,-0.26666100
|
||||
22.65173281,-3.53768106,6.10076549,-0.03191446,-0.09862880,-5.65101414,-0.26666100
|
||||
22.85091726,-3.53509284,6.17723042,-0.04047214,-0.08847766,-5.06939622,-0.24114348
|
||||
22.85091726,-3.53509284,6.17723042,-0.04047214,-0.08847766,-5.06939622,-0.24114348
|
||||
22.85091726,-3.53306802,6.25353909,-0.03154908,-0.07949345,-4.55463901,-0.21908567
|
||||
22.85091726,-3.53306802,6.25353909,-0.03154908,-0.07949345,-4.55463901,-0.21908567
|
||||
22.85091726,-3.53306802,6.25353909,-0.03154908,-0.07949345,-4.55463901,-0.21908567
|
||||
22.85091726,-3.53107984,6.32974955,-0.02399387,-0.07115476,-4.07686728,-0.19839721
|
||||
22.85091726,-3.53107984,6.32974955,-0.02399387,-0.07115476,-4.07686728,-0.19839721
|
||||
23.05010172,-3.52954865,6.40584568,-0.03073262,-0.06377499,-3.65403759,-0.18054013
|
||||
23.05010172,-3.52954865,6.40584568,-0.03073262,-0.06377499,-3.65403759,-0.18054013
|
||||
23.05010172,-3.52954865,6.40584568,-0.03073262,-0.06377499,-3.65403759,-0.18054013
|
||||
23.05010172,-3.52841316,6.48185026,-0.02482004,-0.05724136,-3.27968858,-0.16516626
|
||||
23.05010172,-3.52841316,6.48185026,-0.02482004,-0.05724136,-3.27968858,-0.16516626
|
||||
23.05010172,-3.52841316,6.48185026,-0.02482004,-0.05724136,-3.27968858,-0.16516626
|
||||
23.05010172,-3.52740220,6.55785739,-0.01998243,-0.05116252,-2.93139674,-0.15095258
|
||||
23.05010172,-3.52740220,6.55785739,-0.01998243,-0.05116252,-2.93139674,-0.15095258
|
||||
23.24928618,-3.52643894,6.63398950,-0.02510463,-0.04559688,-2.61250887,-0.13786446
|
||||
23.24928618,-3.52643894,6.63398950,-0.02510463,-0.04559688,-2.61250887,-0.13786446
|
||||
23.24928618,-3.52643894,6.63398950,-0.02510463,-0.04559688,-2.61250887,-0.13786446
|
||||
23.24928618,-3.52569340,6.71008812,-0.02108205,-0.04062001,-2.32735530,-0.12639009
|
||||
23.24928618,-3.52569340,6.71008812,-0.02108205,-0.04062001,-2.32735530,-0.12639009
|
||||
23.24928618,-3.52569340,6.71008812,-0.02108205,-0.04062001,-2.32735530,-0.12639009
|
||||
23.44847064,-3.52495204,6.78615406,-0.02494709,-0.03597455,-2.06118966,-0.11558989
|
||||
23.44847064,-3.52495204,6.78615406,-0.02494709,-0.03597455,-2.06118966,-0.11558989
|
||||
23.44847064,-3.52429841,6.86219005,-0.02152099,-0.03171484,-1.81712651,-0.10573826
|
||||
23.44847064,-3.52429841,6.86219005,-0.02152099,-0.03171484,-1.81712651,-0.10573826
|
||||
23.44847064,-3.52429841,6.86219005,-0.02152099,-0.03171484,-1.81712651,-0.10573826
|
||||
23.44847064,-3.52362915,6.93820579,-0.01870849,-0.02772729,-1.58865668,-0.09640239
|
||||
23.44847064,-3.52362915,6.93820579,-0.01870849,-0.02772729,-1.58865668,-0.09640239
|
||||
23.64765509,-3.52311922,7.01423949,-0.02141278,-0.02416853,-1.38475505,-0.08824357
|
||||
23.64765509,-3.52311922,7.01423949,-0.02141278,-0.02416853,-1.38475505,-0.08824357
|
||||
23.64765509,-3.52311922,7.01423949,-0.02141278,-0.02416853,-1.38475505,-0.08824357
|
||||
23.64765509,-3.52271456,7.09024220,-0.01923512,-0.02092986,-1.19919247,-0.08093606
|
||||
23.64765509,-3.52271456,7.09024220,-0.01923512,-0.02092986,-1.19919247,-0.08093606
|
||||
23.64765509,-3.52271456,7.09024220,-0.01923512,-0.02092986,-1.19919247,-0.08093606
|
||||
23.64765509,-3.52240698,7.16620753,-0.01761993,-0.01797597,-1.02994721,-0.07439290
|
||||
23.64765509,-3.52240698,7.16620753,-0.01761993,-0.01797597,-1.02994721,-0.07439290
|
||||
23.84683955,-3.52216860,7.24214904,-0.01952187,-0.01527218,-0.87503169,-0.06848930
|
||||
23.84683955,-3.52216860,7.24214904,-0.01952187,-0.01527218,-0.87503169,-0.06848930
|
||||
23.84683955,-3.52216860,7.24214904,-0.01952187,-0.01527218,-0.87503169,-0.06848930
|
||||
23.84683955,-3.52190358,7.31808920,-0.01821991,-0.01272099,-0.72885881,-0.06283938
|
||||
23.84683955,-3.52190358,7.31808920,-0.01821991,-0.01272099,-0.72885881,-0.06283938
|
||||
24.04602401,-3.52172600,7.39402696,-0.01943591,-0.01040260,-0.59602529,-0.05783043
|
||||
24.04602401,-3.52172600,7.39402696,-0.01943591,-0.01040260,-0.59602529,-0.05783043
|
||||
24.04602401,-3.52172600,7.39402696,-0.01943591,-0.01040260,-0.59602529,-0.05783043
|
||||
24.04602401,-3.52153337,7.46995892,-0.01845497,-0.00822560,-0.47129238,-0.05307558
|
||||
24.04602401,-3.52153337,7.46995892,-0.01845497,-0.00822560,-0.47129238,-0.05307558
|
||||
24.04602401,-3.52153337,7.46995892,-0.01845497,-0.00822560,-0.47129238,-0.05307558
|
||||
24.04602401,-3.52142425,7.54588094,-0.01787149,-0.00626545,-0.35898358,-0.04892170
|
||||
24.04602401,-3.52142425,7.54588094,-0.01787149,-0.00626545,-0.35898358,-0.04892170
|
||||
24.24520847,-3.52134674,7.62179948,-0.01848220,-0.00446348,-0.25573844,-0.04514833
|
||||
24.24520847,-3.52134674,7.62179948,-0.01848220,-0.00446348,-0.25573844,-0.04514833
|
||||
24.24520847,-3.52134674,7.62179948,-0.01848220,-0.00446348,-0.25573844,-0.04514833
|
||||
24.24520847,-3.52125017,7.69771269,-0.01809633,-0.00276558,-0.15845605,-0.04154615
|
||||
24.24520847,-3.52125017,7.69771269,-0.01809633,-0.00276558,-0.15845605,-0.04154615
|
||||
24.44439292,-3.52120864,7.77362024,-0.01825111,-0.00122838,-0.07038076,-0.03837593
|
||||
24.44439292,-3.52120864,7.77362024,-0.01825111,-0.00122838,-0.07038076,-0.03837593
|
||||
24.44439292,-3.52120864,7.77362024,-0.01825111,-0.00122838,-0.07038076,-0.03837593
|
||||
24.44439292,-3.52115364,7.84952453,-0.01807648,0.00021751,0.01246260,-0.03536234
|
||||
24.44439292,-3.52115364,7.84952453,-0.01807648,0.00021751,0.01246260,-0.03536234
|
||||
24.44439292,-3.52114611,7.92542455,-0.01816085,0.00152607,0.08743759,-0.03271861
|
||||
24.44439292,-3.52114611,7.92542455,-0.01816085,0.00152607,0.08743759,-0.03271861
|
||||
24.44439292,-3.52114611,7.92542455,-0.01816085,0.00152607,0.08743759,-0.03271861
|
||||
24.64357738,-3.52115430,8.00132329,-0.01790164,0.00273378,0.15663424,-0.03030876
|
||||
24.64357738,-3.52115430,8.00132329,-0.01790164,0.00273378,0.15663424,-0.03030876
|
||||
24.64357738,-3.52115430,8.00132329,-0.01790164,0.00273378,0.15663424,-0.03030876
|
||||
24.64357738,-3.52117278,8.07721671,-0.01813899,0.00385197,0.22070141,-0.02809900
|
||||
24.64357738,-3.52117278,8.07721671,-0.01813899,0.00385197,0.22070141,-0.02809900
|
||||
24.64357738,-3.52119298,8.15310514,-0.01854066,0.00488801,0.28006258,-0.02605763
|
||||
24.64357738,-3.52119298,8.15310514,-0.01854066,0.00488801,0.28006258,-0.02605763
|
||||
24.64357738,-3.52119298,8.15310514,-0.01854066,0.00488801,0.28006258,-0.02605763
|
||||
24.84276184,-3.52116684,8.22898182,-0.01787591,0.00585266,0.33533247,-0.02406811
|
||||
24.84276184,-3.52116684,8.22898182,-0.01787591,0.00585266,0.33533247,-0.02406811
|
||||
24.84276184,-3.52116864,8.30485878,-0.01835563,0.00672980,0.38558901,-0.02230955
|
||||
24.84276184,-3.52116864,8.30485878,-0.01835563,0.00672980,0.38558901,-0.02230955
|
||||
24.84276184,-3.52116864,8.30485878,-0.01835563,0.00672980,0.38558901,-0.02230955
|
||||
25.04194630,-3.52117767,8.38073425,-0.01746607,0.00754197,0.43212309,-0.02069596
|
||||
25.04194630,-3.52117767,8.38073425,-0.01746607,0.00754197,0.43212309,-0.02069596
|
||||
25.04194630,-3.52119588,8.45661018,-0.01804986,0.00829299,0.47515328,-0.01922327
|
||||
25.04194630,-3.52119588,8.45661018,-0.01804986,0.00829299,0.47515328,-0.01922327
|
||||
25.04194630,-3.52119588,8.45661018,-0.01804986,0.00829299,0.47515328,-0.01922327
|
||||
25.04194630,-3.52123429,8.53248327,-0.01876324,0.00897618,0.51429709,-0.01792684
|
||||
25.04194630,-3.52123429,8.53248327,-0.01876324,0.00897618,0.51429709,-0.01792684
|
||||
25.04194630,-3.52123429,8.53248327,-0.01876324,0.00897618,0.51429709,-0.01792684
|
||||
25.24113075,-3.52126375,8.60835598,-0.01764953,0.00962205,0.55130306,-0.01668778
|
||||
25.24113075,-3.52126375,8.60835598,-0.01764953,0.00962205,0.55130306,-0.01668778
|
||||
25.24113075,-3.52129223,8.68422827,-0.01841984,0.01022597,0.58590479,-0.01553096
|
||||
25.24113075,-3.52129223,8.68422827,-0.01841984,0.01022597,0.58590479,-0.01553096
|
||||
25.24113075,-3.52129223,8.68422827,-0.01841984,0.01022597,0.58590479,-0.01553096
|
||||
25.24113075,-3.52131061,8.76010027,-0.01926865,0.01079829,0.61869653,-0.01441759
|
||||
25.24113075,-3.52131061,8.76010027,-0.01926865,0.01079829,0.61869653,-0.01441759
|
||||
25.44031521,-3.52132302,8.83560458,-0.01793106,0.01131232,0.64814831,-0.01340962
|
||||
25.44031521,-3.52132302,8.83560458,-0.01793106,0.01131232,0.64814831,-0.01340962
|
||||
25.44031521,-3.52132302,8.83560458,-0.01793106,0.01131232,0.64814831,-0.01340962
|
||||
25.44031521,-3.52137065,8.91108275,-0.01885497,0.01178868,0.67544174,-0.01254696
|
||||
25.44031521,-3.52137065,8.91108275,-0.01885497,0.01178868,0.67544174,-0.01254696
|
||||
25.44031521,-3.52137065,8.91108275,-0.01885497,0.01178868,0.67544174,-0.01254696
|
||||
25.63949967,-3.52140886,8.98658718,-0.01740076,0.01223941,0.70126669,-0.01171726
|
||||
25.63949967,-3.52140886,8.98658718,-0.01740076,0.01223941,0.70126669,-0.01171726
|
||||
25.63949967,-3.52144460,9.06211365,-0.01836045,0.01266153,0.72545239,-0.01094002
|
||||
25.63949967,-3.52144460,9.06211365,-0.01836045,0.01266153,0.72545239,-0.01094002
|
||||
25.63949967,-3.52144460,9.06211365,-0.01836045,0.01266153,0.72545239,-0.01094002
|
||||
25.63949967,-3.52148073,9.13765354,-0.01938234,0.01305516,0.74800567,-0.01022079
|
||||
25.63949967,-3.52148073,9.13765354,-0.01938234,0.01305516,0.74800567,-0.01022079
|
||||
25.83868413,-3.52151755,9.21319210,-0.01778703,0.01342197,0.76902217,-0.00955693
|
||||
25.83868413,-3.52151755,9.21319210,-0.01778703,0.01342197,0.76902217,-0.00955693
|
||||
25.83868413,-3.52151755,9.21319210,-0.01778703,0.01342197,0.76902217,-0.00955693
|
||||
25.83868413,-3.52155921,9.28872528,-0.01885139,0.01376017,0.78839941,-0.00896000
|
||||
25.83868413,-3.52155921,9.28872528,-0.01885139,0.01376017,0.78839941,-0.00896000
|
||||
25.83868413,-3.52155921,9.28872528,-0.01885139,0.01376017,0.78839941,-0.00896000
|
||||
26.03786858,-3.52159516,9.36425299,-0.01715470,0.01408108,0.80678628,0.00000000
|
||||
26.03786858,-3.52159516,9.36425299,-0.01715470,0.01408108,0.80678628,0.00000000
|
||||
26.03786858,-3.52162875,9.43977518,-0.01824513,0.01438280,0.82407349,0.00000000
|
||||
26.03786858,-3.52162875,9.43977518,-0.01824513,0.01438280,0.82407349,0.00000000
|
||||
26.03786858,-3.52162875,9.43977518,-0.01824513,0.01438280,0.82407349,0.00000000
|
||||
26.03786858,-3.52161211,9.50909370,-0.01923981,0.01468499,0.84138802,0.00000000
|
||||
26.03786858,-3.52161211,9.50909370,-0.01923981,0.01468499,0.84138802,0.00000000
|
||||
26.03786858,-3.52161211,9.50909370,-0.01923981,0.01468499,0.84138802,0.00000000
|
||||
26.03786858,-3.52153683,9.56837078,-0.02006748,0.01498909,0.85881183,0.00000000
|
||||
26.03786858,-3.52153683,9.56837078,-0.02006748,0.01498909,0.85881183,0.00000000
|
||||
26.03786858,-3.52140215,9.61761260,-0.02071830,0.01529296,0.87622199,0.00000000
|
||||
26.03786858,-3.52140215,9.61761260,-0.02071830,0.01529296,0.87622199,0.00000000
|
||||
26.03786858,-3.52140215,9.61761260,-0.02071830,0.01529296,0.87622199,0.00000000
|
||||
26.03786858,-3.52121341,9.65682636,-0.02118852,0.01559647,0.89361165,0.00000000
|
||||
26.03786858,-3.52121341,9.65682636,-0.02118852,0.01559647,0.89361165,0.00000000
|
||||
26.03786858,-3.52097697,9.68601657,-0.02147536,0.01589950,0.91097399,0.00000000
|
||||
26.03786858,-3.52097697,9.68601657,-0.02147536,0.01589950,0.91097399,0.00000000
|
||||
26.03786858,-3.52097697,9.68601657,-0.02147536,0.01589950,0.91097399,0.00000000
|
||||
26.03786858,-3.52069898,9.70518549,-0.02157590,0.01620217,0.92831584,0.00000000
|
||||
26.03786858,-3.52069898,9.70518549,-0.02157590,0.01620217,0.92831584,0.00000000
|
||||
26.03786858,-3.52038555,9.71433425,-0.02148709,0.01650424,0.94562354,0.00000000
|
||||
26.03786858,-3.52038555,9.71433425,-0.02148709,0.01650424,0.94562354,0.00000000
|
||||
26.03786858,-3.52038555,9.71433425,-0.02148709,0.01650424,0.94562354,0.00000000
|
||||
26.03786858,-3.52021554,9.71512122,-0.02136839,0.01665528,0.95427739,0.00000000
|
||||
26.03786858,-3.52021554,9.71512122,-0.02136839,0.01665528,0.95427739,0.00000000
|
||||
26.03786858,-3.52021554,9.71512122,-0.02136839,0.01665528,0.95427739,0.00000000
|
||||
26.03786858,-3.52021482,9.71508470,-0.02136706,0.01665528,0.95427739,0.00000000
|
||||
26.03786858,-3.52021482,9.71508470,-0.02136706,0.01665528,0.95427739,0.00000000
|
||||
26.03786858,-3.52021456,9.71506980,-0.02136655,0.01665528,0.95427739,0.00000000
|
||||
26.03786858,-3.52021456,9.71506980,-0.02136655,0.01665528,0.95427739,0.00000000
|
||||
26.03786858,-3.52021456,9.71506980,-0.02136655,0.01665528,0.95427739,0.00000000
|
||||
26.03786858,-3.52021449,9.71506371,-0.02136638,0.01665528,0.95427739,0.00000000
|
||||
26.03786858,-3.52021449,9.71506371,-0.02136638,0.01665528,0.95427739,0.00000000
|
||||
26.03786858,-3.52021449,9.71506119,-0.02136634,0.01665528,0.95427739,0.00000000
|
||||
26.03786858,-3.52021449,9.71506119,-0.02136634,0.01665528,0.95427739,0.00000000
|
||||
26.03786858,-3.52021449,9.71506119,-0.02136634,0.01665528,0.95427739,0.00000000
|
||||
26.03786858,-3.52021452,9.71506013,-0.02136635,0.01665528,0.95427739,0.00000000
|
||||
26.03786858,-3.52021452,9.71506013,-0.02136635,0.01665528,0.95427739,0.00000000
|
||||
26.03786858,-3.52021452,9.71506013,-0.02136635,0.01665528,0.95427739,0.00000000
|
||||
26.03786858,-3.52021456,9.71505966,-0.02136639,0.01665528,0.95427739,0.00000000
|
||||
26.03786858,-3.52021456,9.71505966,-0.02136639,0.01665528,0.95427739,0.00000000
|
||||
26.03786858,-3.52021462,9.71505942,-0.02136640,0.01665516,0.95427056,0.00000000
|
||||
|
232
path_generate_json.py
Normal file
232
path_generate_json.py
Normal file
@ -0,0 +1,232 @@
|
||||
import json
|
||||
import math
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
# ============================================================
|
||||
# 参数配置
|
||||
# ============================================================
|
||||
|
||||
# 起点:采用你提供的第一个路径点
|
||||
START_LAT = 30.80062100422322
|
||||
START_LON = 121.21541599992909
|
||||
|
||||
TURN_RADIUS = 1.0
|
||||
MISSION_SPEED = 0.64
|
||||
ARC_SPACING = 0.3
|
||||
|
||||
# stanley para
|
||||
K_YAW = 2.0
|
||||
K_LAT = 4.0
|
||||
|
||||
# lqr para
|
||||
Q_e = 100
|
||||
Q_h = 5
|
||||
R_u = 25
|
||||
|
||||
# 地球半径(m)
|
||||
EARTH_RADIUS = 6378137.0
|
||||
|
||||
|
||||
#
|
||||
first_line_length = 6.0
|
||||
first_arc_rad = math.pi # 180° 半圆
|
||||
|
||||
second_line_length = 8.0
|
||||
second_arc_rad = math.pi / 2 # 90° 四分之一圆
|
||||
|
||||
third_line_length = 5.0
|
||||
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 工具函数
|
||||
# ============================================================
|
||||
|
||||
def normalize_yaw(yaw):
|
||||
"""将 yaw 归一化到 [-pi, pi]。"""
|
||||
return math.atan2(math.sin(yaw), math.cos(yaw))
|
||||
|
||||
|
||||
def local_to_latlon(x, y):
|
||||
"""
|
||||
局部 ENU 坐标转经纬度。
|
||||
x: East,向东为正,单位 m
|
||||
y: North,向北为正,单位 m
|
||||
"""
|
||||
lat0 = math.radians(START_LAT)
|
||||
|
||||
lat = START_LAT + math.degrees(y / EARTH_RADIUS)
|
||||
lon = START_LON + math.degrees(
|
||||
x / (EARTH_RADIUS * math.cos(lat0))
|
||||
)
|
||||
|
||||
return lat, lon
|
||||
|
||||
|
||||
def add_point(points, x, y, yaw):
|
||||
"""添加一个 [latitude, longitude, yaw] 路径点。"""
|
||||
lat, lon = local_to_latlon(x, y)
|
||||
|
||||
points.append([
|
||||
round(lat, 12),
|
||||
round(lon, 12),
|
||||
round(normalize_yaw(yaw), 9)
|
||||
])
|
||||
|
||||
|
||||
def add_arc(points, cx, cy, radius,
|
||||
start_angle, sweep_angle, spacing):
|
||||
"""
|
||||
添加圆弧采样点,不重复添加圆弧起点。
|
||||
yaw 为圆弧的切线方向,单位 rad。
|
||||
"""
|
||||
arc_length = abs(radius * sweep_angle)
|
||||
num_segments = max(1, math.ceil(arc_length / spacing))
|
||||
|
||||
for i in range(1, num_segments + 1):
|
||||
ratio = i / num_segments
|
||||
angle = start_angle + sweep_angle * ratio
|
||||
|
||||
x = cx + radius * math.cos(angle)
|
||||
y = cy + radius * math.sin(angle)
|
||||
|
||||
# CCW 左转时,切线方向 = 圆心角 + pi/2
|
||||
yaw = angle + (
|
||||
math.pi / 2 if sweep_angle > 0
|
||||
else -math.pi / 2
|
||||
)
|
||||
|
||||
add_point(points, x, y, yaw)
|
||||
|
||||
|
||||
|
||||
coordinates = []
|
||||
|
||||
# 1. 第一段直线:长度 6 m
|
||||
# 起点 (0, 0),终点 (6, 0)
|
||||
add_point(coordinates, 0, 0, 0.0)
|
||||
add_point(coordinates, first_line_length, 0, 0.0)
|
||||
|
||||
# 第一段圆弧起始索引
|
||||
first_turn_index = len(coordinates) - 1
|
||||
|
||||
# 2. 第一段半圆:R=1,逆时针 180°
|
||||
# 圆心 (6, 1),从 -90° 转到 90°
|
||||
add_arc(
|
||||
coordinates,
|
||||
cx=first_line_length,
|
||||
cy=TURN_RADIUS,
|
||||
radius=TURN_RADIUS,
|
||||
start_angle=-math.pi / 2,
|
||||
sweep_angle= first_arc_rad,
|
||||
spacing=ARC_SPACING
|
||||
)
|
||||
|
||||
# 3. 第二段直线:长度 8 m
|
||||
# 半圆终点 (6, 2),直线终点 (-2, 2)
|
||||
second_line_end_x = first_line_length - second_line_length
|
||||
second_line_end_y = 2 * TURN_RADIUS
|
||||
|
||||
add_point(
|
||||
coordinates,
|
||||
second_line_end_x,
|
||||
second_line_end_y,
|
||||
math.pi
|
||||
)
|
||||
# 第二段圆弧起始索引
|
||||
second_turn_index = len(coordinates) - 1
|
||||
|
||||
# 4. 第二段四分之一圆:顺时针 90°
|
||||
# 与第一段圆弧方向相反
|
||||
second_arc_cx = second_line_end_x
|
||||
second_arc_cy = second_line_end_y + TURN_RADIUS
|
||||
|
||||
add_arc(
|
||||
coordinates,
|
||||
cx=second_arc_cx,
|
||||
cy=second_arc_cy,
|
||||
radius=TURN_RADIUS,
|
||||
start_angle=-math.pi / 2,
|
||||
sweep_angle=-second_arc_rad,
|
||||
spacing=ARC_SPACING
|
||||
)
|
||||
|
||||
# 5. 最后一段直线:长度 5 m
|
||||
|
||||
third_line_start_x = second_arc_cx
|
||||
third_line_start_y = second_arc_cy
|
||||
|
||||
add_point(
|
||||
coordinates,
|
||||
third_line_start_x - TURN_RADIUS,
|
||||
third_line_start_y + third_line_length,
|
||||
math.pi / 2
|
||||
)
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 构造符合现有项目的 GeoJSON
|
||||
# ============================================================
|
||||
|
||||
path_json = {
|
||||
"type": "FeatureCollection",
|
||||
"properties": {
|
||||
"turnRadius": TURN_RADIUS,
|
||||
"misionSpeed": MISSION_SPEED,
|
||||
"k_yaw": K_YAW,
|
||||
"k_lat": K_LAT,
|
||||
"lqr_Q_e": Q_e,
|
||||
"lqr_Q_h": Q_h,
|
||||
"lqr_R_u": R_u
|
||||
},
|
||||
"features": [
|
||||
{
|
||||
"type": "Feature",
|
||||
"properties": {
|
||||
"turnInds": [
|
||||
first_turn_index,
|
||||
second_turn_index
|
||||
],
|
||||
"mission": [],
|
||||
|
||||
},
|
||||
"geometry": {
|
||||
"type": "LineString",
|
||||
"coordinates": coordinates
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 保存文件
|
||||
# ============================================================
|
||||
|
||||
output_file = "test_path.json"
|
||||
|
||||
with open(output_file, "w", encoding="utf-8") as f:
|
||||
json.dump(
|
||||
path_json,
|
||||
f,
|
||||
ensure_ascii=False,
|
||||
indent=2
|
||||
)
|
||||
|
||||
print(f"JSON 文件已生成: {output_file}")
|
||||
print(f"路径点数量: {len(coordinates)}")
|
||||
print(f"turnInds: {path_json['features'][0]['properties']['turnInds']}")
|
||||
print(f"起点: {coordinates[0]}")
|
||||
print(f"终点: {coordinates[-1]}")
|
||||
|
||||
|
||||
fig, ax = plt.subplots(figsize=(10, 6))
|
||||
ax.plot([p[0] for p in coordinates], [p[1] for p in coordinates], "-o", markersize=3, label="Path")
|
||||
|
||||
ax.set_xlabel("X (m)")
|
||||
ax.set_ylabel("Y (m)")
|
||||
ax.axis("equal")
|
||||
ax.grid(True)
|
||||
ax.legend()
|
||||
plt.tight_layout()
|
||||
plt.show()
|
||||
6011
path_visualizer.log
Normal file
6011
path_visualizer.log
Normal file
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
Before Width: | Height: | Size: 565 KiB |
@ -14,6 +14,7 @@ find_package(auto_drive_proj_utils REQUIRED)
|
||||
find_package(auto_drive_proj_msg REQUIRED)
|
||||
find_package(Eigen3 REQUIRED)
|
||||
find_package(fmt REQUIRED)
|
||||
find_package(visualization_msgs REQUIRED)
|
||||
|
||||
include_directories(
|
||||
include
|
||||
@ -66,6 +67,7 @@ ament_target_dependencies(mission_center_node
|
||||
builtin_interfaces
|
||||
auto_drive_proj_utils
|
||||
auto_drive_proj_msg
|
||||
visualization_msgs
|
||||
)
|
||||
|
||||
ament_target_dependencies(auto_mission_handler_node
|
||||
@ -2,7 +2,7 @@ auto_mission_handler_node:
|
||||
# parameters
|
||||
ros__parameters:
|
||||
# redis
|
||||
redis_host: "192.168.1.110" # "127.0.0.1"
|
||||
redis_host: "127.0.0.1" # "127.0.0.1"
|
||||
redis_port: 6379
|
||||
redis_db: 0
|
||||
|
||||
@ -20,13 +20,13 @@ path_follow_handler_node:
|
||||
# parameters
|
||||
ros__parameters:
|
||||
# redis
|
||||
redis_host: "192.168.1.110" # "127.0.0.1"
|
||||
redis_host: "127.0.0.1" # "127.0.0.1"
|
||||
redis_port: 6379
|
||||
redis_db: 0
|
||||
|
||||
device_id: "2072868304711761920"
|
||||
|
||||
controller_type: "pure_pursuit" # "pure_pursuit", "lqr", "pid"
|
||||
controller_type: "stanley" # "pure_pursuit", "lqr", "pid","stanley"
|
||||
|
||||
# logger
|
||||
logger_logger_name: "path_follow"
|
||||
@ -40,7 +40,7 @@ mission_center_node:
|
||||
# parameters
|
||||
ros__parameters:
|
||||
# redis
|
||||
redis_host: "192.168.1.110" # "127.0.0.1"
|
||||
redis_host: "127.0.0.1" # "127.0.0.1"
|
||||
redis_port: 6379
|
||||
redis_db: 0
|
||||
|
||||
@ -22,17 +22,18 @@ public:
|
||||
B.resize(2, 1); // 控制输入矩阵
|
||||
Q.resize(2, 2); // 状态误差的加权矩阵
|
||||
R.resize(1, 1); // 控制输入的加权矩阵
|
||||
B << -1, 1; // 控制输入矩阵
|
||||
//B << 0, 1; // 控制输入矩阵
|
||||
|
||||
// 设计LQR的代价函数矩阵
|
||||
Q << 50, 0, 0, 15; // 状态误差的加权矩阵:惩罚横向误差e_x和角度误差θ
|
||||
Q << 100, 0, 0, 10; // 状态误差的加权矩阵:惩罚横向误差e_x和角度误差θ
|
||||
|
||||
R << 10; // 控制输入的加权矩阵:惩罚角速度ω
|
||||
R << 50; // 控制输入的加权矩阵:惩罚角速度ω
|
||||
};
|
||||
~LQR_Controller_C() {};
|
||||
// LQR求解器函数
|
||||
MatrixXd lqr(const MatrixXd &A, const MatrixXd &B, const MatrixXd &Q, const MatrixXd &R)
|
||||
{
|
||||
|
||||
MatrixXd P = Q; // 初始化P为Q
|
||||
MatrixXd P_prev = MatrixXd::Zero(A.rows(), A.cols());
|
||||
for (int i = 0; i < 1000; ++i)
|
||||
@ -46,12 +47,16 @@ public:
|
||||
MatrixXd K = (R + B.transpose() * P * B).inverse() * B.transpose() * P * A;
|
||||
return K;
|
||||
};
|
||||
float update(const float alpha, const float linear_val, const float dis)
|
||||
float update(const float alpha, const float linear_val, const float dis, const float kappa)
|
||||
{
|
||||
// std::cout << "LQR update!" << std::endl;
|
||||
logger_->trace("LQR update!");
|
||||
double dt = 0.01;
|
||||
MatrixXd A(2, 2);
|
||||
A << 0, linear_val, 0, 0;
|
||||
A << 1.0, linear_val * dt,
|
||||
0, 1.0;
|
||||
B << 0.5 * linear_val * dt * dt,
|
||||
dt;
|
||||
Eigen::VectorXd x(2);
|
||||
|
||||
x << dis, alpha;
|
||||
@ -61,8 +66,24 @@ public:
|
||||
// << K << std::endl;
|
||||
std::stringstream ss;
|
||||
ss << K;
|
||||
logger_->trace("LQR Gain Matrix K:\n{}", ss.str());
|
||||
return -(K * x)(0, 0);
|
||||
logger_->info("LQR Gain Matrix K:\n{}", ss.str());
|
||||
double omega_feedback = -(K * x)(0, 0);
|
||||
// Curvature feedforward
|
||||
double omega_feedforward = linear_val * kappa;// feedforwward unused temporarily
|
||||
|
||||
double omega = omega_feedback;
|
||||
|
||||
logger_->info(
|
||||
"LQR: dis={}, alpha={}, kappa={}, "
|
||||
"omega_fb={}, omega_ff={}, omega={}",
|
||||
dis,
|
||||
alpha,
|
||||
kappa,
|
||||
omega_feedback,
|
||||
omega_feedforward,
|
||||
omega);
|
||||
|
||||
return omega;
|
||||
};
|
||||
/*void init_lqr(const MatrixXd B, const MatrixXd Q, const MatrixXd R)
|
||||
{
|
||||
@ -70,6 +91,26 @@ public:
|
||||
this->Q = Q;
|
||||
this->R = R;
|
||||
}*/
|
||||
float update(const float alpha, const float linear_val, const float dis)
|
||||
{
|
||||
// std::cout << "LQR update!" << std::endl;
|
||||
logger_->trace("LQR update!");
|
||||
double dt = 0.01;
|
||||
MatrixXd A(2, 2);
|
||||
A << 1.0, linear_val*dt,0, 1.0;
|
||||
B << 0.5 * linear_val * dt * dt,dt;
|
||||
Eigen::VectorXd x(2);
|
||||
|
||||
x << dis, alpha;
|
||||
// 求解LQR增益矩阵K
|
||||
MatrixXd K = lqr(A, B, Q, R);
|
||||
// std::cout << "LQR Gain Matrix K:" << std::endl
|
||||
// << K << std::endl;
|
||||
std::stringstream ss;
|
||||
ss << K;
|
||||
logger_->info("LQR Gain Matrix K:\n{}", ss.str());
|
||||
return -(K * x)(0, 0);
|
||||
};
|
||||
void init(const float max_linear_vel, const float max_angular_vel, const float kp, const float ki,
|
||||
const float kd, const float look_ahead_dis, const float kv)
|
||||
{
|
||||
@ -82,7 +123,7 @@ public:
|
||||
B.resize(2, 1); // 控制输入矩阵
|
||||
Q.resize(2, 2); // 状态误差的加权矩阵
|
||||
R.resize(1, 1); // 控制输入的加权矩阵
|
||||
B << -1, 1; // 控制输入矩阵
|
||||
B << 0, 1; // 控制输入矩阵
|
||||
|
||||
// 设计LQR的代价函数矩阵
|
||||
Q << 50, 0, 0, 15; // 状态误差的加权矩阵:惩罚横向误差e_x和角度误差θ
|
||||
@ -55,7 +55,6 @@ private:
|
||||
rclcpp::Publisher<std_msgs::msg::String>::SharedPtr event_warn_pub_;
|
||||
rclcpp::Publisher<std_msgs::msg::String>::SharedPtr event_error_pub_;
|
||||
rclcpp::Publisher<std_msgs::msg::String>::SharedPtr properties_report_pub_;
|
||||
|
||||
std::vector<std::pair<int, int>> interpolation_map_;
|
||||
|
||||
std::shared_future<typename auto_drive_proj_msg::srv::ReqString::Response::SharedPtr> mission_future_;
|
||||
@ -86,7 +85,11 @@ private:
|
||||
std::string& mission_data,
|
||||
std::string& follow_data);
|
||||
std::vector<std::vector<double>> interpolatePoints(const std::vector<std::vector<double>>& coordinates,
|
||||
double max_distance = 0.5);
|
||||
double max_distance);
|
||||
// simulation only
|
||||
std::vector<std::vector<double>> alignPathYaw( const std::vector<std::vector<double>>& coordinates,
|
||||
double vehicle_initial_yaw);
|
||||
|
||||
int updatePathIndices(const int original_ind, const std::vector<std::pair<int, int>>& interpolation_map);
|
||||
|
||||
void handleAsyncResponses();
|
||||
@ -145,6 +148,9 @@ private:
|
||||
int logger_max_size_;
|
||||
int logger_max_files_;
|
||||
int logger_set_level_;
|
||||
|
||||
//
|
||||
double vehicle_initial_yaw_ = 0.0;
|
||||
};
|
||||
|
||||
} // namespace auto_drive_misson_center
|
||||
@ -45,7 +45,7 @@ public:
|
||||
private:
|
||||
MainState main_state_{MainState::IDLE};
|
||||
bool is_resuming_{false};
|
||||
std::string controller_type_{"pure_pursuit"};
|
||||
std::string controller_type_{"lqr"};
|
||||
|
||||
rclcpp::Subscription<geometry_msgs::msg::PoseWithCovarianceStamped>::SharedPtr pose_sub_;
|
||||
rclcpp::Publisher<geometry_msgs::msg::Twist>::SharedPtr cmd_vel_pub_;
|
||||
@ -15,7 +15,7 @@ struct PathPoint {
|
||||
double x; // 经度或UTM X坐标
|
||||
double y; // 纬度或UTM Y坐标
|
||||
double yaw; // 朝向角度(弧度)
|
||||
|
||||
double kappa; // 曲率
|
||||
PathPoint(double x_val = 0.0, double y_val = 0.0, double yaw_val = 0.0)
|
||||
: x(x_val), y(y_val), yaw(yaw_val) {}
|
||||
};
|
||||
@ -60,7 +60,36 @@ public:
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void computePathCurvature()
|
||||
{
|
||||
if (path_points_.size() < 3) {
|
||||
return;
|
||||
}
|
||||
for (size_t i = 1; i < path_points_.size() - 1; ++i)
|
||||
{
|
||||
const auto& p_prev = path_points_[i - 1];
|
||||
const auto& p_curr = path_points_[i];
|
||||
const auto& p_next = path_points_[i + 1];
|
||||
double ds1 = std::hypot(p_curr.x - p_prev.x,p_curr.y - p_prev.y);
|
||||
double ds2 = std::hypot(p_next.x - p_curr.x,p_next.y - p_curr.y);
|
||||
double ds = 0.5 * (ds1 + ds2);
|
||||
if (ds < 1e-6) {
|
||||
path_points_[i].kappa= 0.0;
|
||||
continue;
|
||||
}
|
||||
double dyaw = p_next.yaw - p_prev.yaw;
|
||||
while (dyaw > M_PI)
|
||||
dyaw -= 2.0 * M_PI;
|
||||
|
||||
while (dyaw < -M_PI)
|
||||
dyaw += 2.0 * M_PI;
|
||||
path_points_[i].kappa = dyaw / (ds1 + ds2);
|
||||
logger_->info("path ind:{}, kappa:{}", i, path_points_[i].kappa);
|
||||
}
|
||||
// 首尾点处理
|
||||
path_points_.front().kappa= path_points_[1].kappa;
|
||||
path_points_.back().kappa= path_points_[path_points_.size() - 2].kappa;
|
||||
}
|
||||
// 运行一次控制计算
|
||||
ControlOutput run(const PathPoint& current_pose) {
|
||||
if (!is_initialized_) {
|
||||
@ -159,6 +188,7 @@ protected:
|
||||
|
||||
logger_->debug("current_point_index_:{}, path_points_ size:{}, distance2:{}, distance1:{}",
|
||||
current_point_index_, path_points_.size(), distance2, distance1);
|
||||
|
||||
|
||||
// 如果current_point_index_+1的距离小于current_point_index_距离,current_point_index_++
|
||||
if (distance2 < distance1) {
|
||||
@ -185,7 +215,9 @@ protected:
|
||||
|
||||
// 保护成员变量,子类可以访问
|
||||
double mission_speed_{0.0};
|
||||
double turn_radius_{1.0};
|
||||
double turn_radius_{0.3};
|
||||
double max_allowed_speed_{1.0};
|
||||
double wheel_dis_{0.5};
|
||||
std::vector<PathPoint> path_points_;
|
||||
int current_point_index_{0};
|
||||
bool is_initialized_{false};
|
||||
@ -8,6 +8,7 @@
|
||||
#include "lqr_control.hpp"
|
||||
#include "pid_control.hpp"
|
||||
#include "pure_pursuit_control.hpp"
|
||||
#include "stanley_control.hpp"
|
||||
#include "spdlog/logger.h"
|
||||
#include "spdlog/spdlog.h"
|
||||
#include "spdlog/sinks/rotating_file_sink.h"
|
||||
@ -27,29 +28,35 @@ protected:
|
||||
// 从PathTrackingController的参数映射到原有控制器的init参数
|
||||
// 注意:原有控制器需要max_linear_vel, max_angular_vel, kp, ki, kd, look_ahead_dis, kv
|
||||
// 这里需要根据需求设置合适的参数值
|
||||
float max_linear_vel = mission_speed_;
|
||||
float max_linear_vel = mission_speed_ ;
|
||||
float max_angular_vel = mission_speed_ / turn_radius_; // 根据转弯半径估算最大角速度
|
||||
float max_angular_vel_theory = max_allowed_speed_/wheel_dis_;
|
||||
max_angular_vel = std::max(max_angular_vel, max_angular_vel_theory);
|
||||
float kp = 1.76; // 需要根据实际情况调整
|
||||
float ki = 0.0;
|
||||
float kd = 0.8;
|
||||
float look_ahead_dis = 0.4; // 需要根据实际情况调整
|
||||
float kv = 1.0; // 需要根据实际情况调整
|
||||
float look_ahead_dis = 0.6; // 需要根据实际情况调整
|
||||
float kv = 0.0; // 需要根据实际情况调整
|
||||
|
||||
controller_->init(max_linear_vel, max_angular_vel, kp, ki, kd, look_ahead_dis, kv);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool kappa_cal = false;
|
||||
ControlOutput onRun(const PathPoint& current_pose) override {
|
||||
// 从PathPoint计算所需参数
|
||||
float alpha = 0.0; // 角度误差
|
||||
float linear_val = 0.0; // 线速度
|
||||
float dis = 0.0; // 横向误差
|
||||
|
||||
computeControlParams(current_pose, alpha, linear_val, dis);
|
||||
logger_->debug("PPAdapter alpha={}, linear_val={}, dis={}", alpha, linear_val, dis);
|
||||
float kappa = 0.0; // 路徑曲率
|
||||
if(!kappa_cal){
|
||||
computePathCurvature();
|
||||
kappa_cal = true;
|
||||
}
|
||||
computeControlParams(current_pose, alpha, linear_val, dis, kappa);
|
||||
logger_->debug("PPAdapter alpha={}, linear_val={}, dis={}, kappa:{}", alpha, linear_val, dis,kappa);
|
||||
|
||||
// 调用原有控制器的update方法
|
||||
float angular_velocity = controller_->update(alpha, linear_val, dis);
|
||||
float angular_velocity = controller_->update(alpha, linear_val, dis, kappa);
|
||||
logger_->debug("PP output angular={}", angular_velocity);
|
||||
|
||||
// 判断是否完成
|
||||
@ -65,8 +72,8 @@ protected:
|
||||
private:
|
||||
std::shared_ptr<LQR_Controller_C> controller_;
|
||||
std::shared_ptr<spdlog::logger> logger_;
|
||||
|
||||
void computeControlParams(const PathPoint& current_pose, float& alpha, float& linear_val, float& dis) {
|
||||
|
||||
void computeControlParams(const PathPoint& current_pose, float& alpha, float& linear_val, float& dis, float& kappa) {
|
||||
// 获取当前路径点的索引
|
||||
int idx = current_point_index_;
|
||||
if (idx >= static_cast<int>(path_points_.size()) - 1) {
|
||||
@ -82,13 +89,15 @@ private:
|
||||
dis = static_cast<float>(-dx * sin(path_yaw) + dy * cos(path_yaw));
|
||||
|
||||
// 角度误差
|
||||
alpha = static_cast<float>(path_yaw - current_pose.yaw);
|
||||
alpha = static_cast<float>(current_pose.yaw - path_yaw);
|
||||
// 归一化到 [-pi, pi]
|
||||
while (alpha > M_PI) alpha -= 2 * M_PI;
|
||||
while (alpha < -M_PI) alpha += 2 * M_PI;
|
||||
|
||||
// 线速度
|
||||
linear_val = static_cast<float>(mission_speed_);
|
||||
kappa = path_points_[idx].kappa;
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
@ -165,29 +174,38 @@ public:
|
||||
|
||||
protected:
|
||||
bool onInitialize() override {
|
||||
float max_linear_vel = mission_speed_;
|
||||
float max_linear_vel = mission_speed_ ;
|
||||
float max_angular_vel = mission_speed_ / turn_radius_;
|
||||
float max_angular_vel_theory = max_allowed_speed_/wheel_dis_;
|
||||
max_angular_vel = std::max(max_angular_vel, max_angular_vel_theory);
|
||||
float kp = 1.76;
|
||||
float ki = 0.0;
|
||||
float kd = 0.8;
|
||||
float look_ahead_dis = 0.4; // 前视距离,需要根据实际情况调整
|
||||
float kv = 0.6; // 速度系数,需要根据实际情况调整
|
||||
adapter_look_ahead_dis_ = look_ahead_dis;
|
||||
float kv = 1.0; // 速度系数,需要根据实际情况调整
|
||||
|
||||
controller_->init(max_linear_vel, max_angular_vel, kp, ki, kd, look_ahead_dis, kv);
|
||||
//logger_->debug("PP para mission_speed_={}, turn_radius_={} frontdis={}", mission_speed_, turn_radius_,adapter_look_ahead_dis_ );
|
||||
controller_->init(max_linear_vel, max_angular_vel, kp, ki, kd, adapter_look_ahead_dis_, kv);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool kappa_cal = false;
|
||||
ControlOutput onRun(const PathPoint& current_pose) override {
|
||||
float alpha = 0.0;
|
||||
float linear_val = 0.0;
|
||||
float dis = 0.0;
|
||||
|
||||
float lon_dis = 0.0;
|
||||
float kappa = 0.0;
|
||||
if(!kappa_cal){
|
||||
computePathCurvature();
|
||||
kappa_cal = true;
|
||||
}
|
||||
|
||||
// Pure Pursuit使用前视点,计算需要特殊处理
|
||||
computeControlParamsWithLookAhead(current_pose, alpha, linear_val, dis);
|
||||
logger_->debug("PPAdapter alpha={}, linear_val={}, dis={}", alpha, linear_val, dis);
|
||||
computeControlParamsWithLookAhead(current_pose, alpha, linear_val, dis, lon_dis, kappa);
|
||||
logger_->debug("PPAdapter alpha={}, linear_val={}, dis={}, lon_dis={},kappa={}", alpha, linear_val, dis,lon_dis,kappa);
|
||||
|
||||
float angular_velocity = controller_->update(alpha, linear_val, dis);
|
||||
float angular_velocity = controller_->update(alpha, linear_val, dis, lon_dis, kappa);
|
||||
//float angular_velocity = controller_->update(alpha, linear_val, dis);
|
||||
logger_->debug("PP output angular={}", angular_velocity);
|
||||
bool completed = isPathCompleted(current_pose);
|
||||
|
||||
@ -204,7 +222,7 @@ private:
|
||||
std::shared_ptr<spdlog::logger> logger_;
|
||||
|
||||
void computeControlParamsWithLookAhead(const PathPoint& current_pose,
|
||||
float& alpha, float& linear_val, float& dis) {
|
||||
float& alpha, float& linear_val, float& dis, float& lon_dis, float& kappa) {
|
||||
// 查找前视点
|
||||
PathPoint lookahead_point;
|
||||
if (!findLookAheadPoint(current_pose, lookahead_point)) {
|
||||
@ -237,7 +255,19 @@ private:
|
||||
double dx_path = current_pose.x - path_points_[idx].x;
|
||||
double dy_path = current_pose.y - path_points_[idx].y;
|
||||
double path_yaw = path_points_[idx].yaw;
|
||||
dis = static_cast<float>(-dx_path * sin(path_yaw) + dy_path * cos(path_yaw));
|
||||
//dis = static_cast<float>(-dx_path * sin(path_yaw) + dy_path * cos(path_yaw));
|
||||
dis = static_cast<float>(-dx * sin(path_yaw) + dy * cos(path_yaw));
|
||||
lon_dis = static_cast<float>(sqrt(dx * dx + dy * dy));
|
||||
kappa = static_cast<float>(path_points_[idx].kappa);
|
||||
logger_->debug("current_pose_x:{}, current_pose_y:{},current_pose_yaw:{}",
|
||||
current_pose.x, current_pose.y,current_pose.yaw
|
||||
);
|
||||
logger_->debug("current_path_x:{}, current_path_y:{},current_path_yaw:{}",
|
||||
path_points_[idx].x,
|
||||
path_points_[idx].y,
|
||||
path_points_[idx].yaw
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
bool findLookAheadPoint(const PathPoint& current_pose, PathPoint& lookahead_point) {
|
||||
@ -267,6 +297,7 @@ private:
|
||||
lookahead_point.x = path_points_[i].x + ratio * dx;
|
||||
lookahead_point.y = path_points_[i].y + ratio * dy;
|
||||
lookahead_point.yaw = path_points_[i].yaw;
|
||||
lookahead_point.kappa = path_points_[i].kappa;
|
||||
return true;
|
||||
}
|
||||
accumulated_dist += segment_length;
|
||||
@ -278,6 +309,148 @@ private:
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace auto_drive_misson_center
|
||||
// Stanley控制器适配器
|
||||
class StanleyControllerAdapter : public PathTrackingController {
|
||||
public:
|
||||
StanleyControllerAdapter(std::shared_ptr<spdlog::logger> logger = nullptr)
|
||||
: logger_(logger), PathTrackingController(logger), controller_(std::make_shared<Stanley_Controller_C>(logger)) {}
|
||||
|
||||
protected:
|
||||
bool onInitialize() override {
|
||||
float max_linear_vel = mission_speed_ ;
|
||||
float max_angular_vel = mission_speed_ / turn_radius_;
|
||||
float max_angular_vel_theory = max_allowed_speed_/wheel_dis_;
|
||||
max_angular_vel = std::max(max_angular_vel, max_angular_vel_theory);
|
||||
float kp = 1.76;
|
||||
float ki = 0.0;
|
||||
float kd = 0.8;
|
||||
float look_ahead_dis = 0.4; // 前视距离,需要根据实际情况调整
|
||||
float kv = 0.6; // 速度系数,需要根据实际情况调整
|
||||
adapter_look_ahead_dis_ = look_ahead_dis;
|
||||
//logger_->debug("PP para mission_speed_={}, turn_radius_={} frontdis={}", mission_speed_, turn_radius_,adapter_look_ahead_dis_ );
|
||||
controller_->init(max_linear_vel, max_angular_vel, kp, ki, kd, adapter_look_ahead_dis_, kv);
|
||||
return true;
|
||||
}
|
||||
bool kappa_cal = false;
|
||||
ControlOutput onRun(const PathPoint& current_pose) override {
|
||||
float alpha = 0.0;
|
||||
float linear_val = 0.0;
|
||||
float dis = 0.0;
|
||||
float lon_dis = 0.0;
|
||||
float kappa = 0.0;
|
||||
if(!kappa_cal){
|
||||
computePathCurvature();
|
||||
kappa_cal = true;
|
||||
}
|
||||
|
||||
// Pure Pursuit使用前视点,计算需要特殊处理
|
||||
computeControlParamsWithLookAhead(current_pose, alpha, linear_val, dis, lon_dis, kappa);
|
||||
logger_->debug("Stanley Adapter alpha={}, linear_val={}, dis={}, lon_dis={},kappa={}", alpha, linear_val, dis,lon_dis,kappa);
|
||||
|
||||
float angular_velocity = controller_->update(alpha, linear_val, dis, lon_dis, kappa);
|
||||
//float angular_velocity = controller_->update(alpha, linear_val, dis);
|
||||
logger_->debug("Stanley output angular={}", angular_velocity);
|
||||
bool completed = isPathCompleted(current_pose);
|
||||
|
||||
return ControlOutput(mission_speed_, angular_velocity, completed);
|
||||
}
|
||||
|
||||
void onReset() override {
|
||||
controller_->reset();
|
||||
}
|
||||
|
||||
private:
|
||||
std::shared_ptr<Stanley_Controller_C> controller_;
|
||||
double adapter_look_ahead_dis_; //保存前视距离
|
||||
std::shared_ptr<spdlog::logger> logger_;
|
||||
|
||||
void computeControlParamsWithLookAhead(const PathPoint& current_pose,
|
||||
float& alpha, float& linear_val, float& dis, float& lon_dis, float& kappa) {
|
||||
// 查找前视点
|
||||
PathPoint lookahead_point;
|
||||
if (!findLookAheadPoint(current_pose, lookahead_point)) {
|
||||
// 如果找不到前视点,使用当前路径点
|
||||
int idx = current_point_index_;
|
||||
if (idx >= static_cast<int>(path_points_.size())) {
|
||||
idx = path_points_.size() - 1;
|
||||
}
|
||||
lookahead_point = path_points_[idx];
|
||||
}
|
||||
|
||||
// 计算从当前点到前视点的角度误差
|
||||
double dx = lookahead_point.x - current_pose.x;
|
||||
double dy = lookahead_point.y - current_pose.y;
|
||||
double target_yaw = atan2(dy, dx);
|
||||
|
||||
// 预瞄角度误差
|
||||
alpha = static_cast<float>(target_yaw - current_pose.yaw);
|
||||
while (alpha > M_PI) alpha -= 2 * M_PI;
|
||||
while (alpha < -M_PI) alpha += 2 * M_PI;
|
||||
|
||||
// 线速度
|
||||
linear_val = static_cast<float>(mission_speed_);
|
||||
|
||||
// 横向误差(用于更新索引)
|
||||
int idx = current_point_index_;
|
||||
if (idx >= static_cast<int>(path_points_.size()) - 1) {
|
||||
idx = path_points_.size() - 1;
|
||||
}
|
||||
double dx_path = current_pose.x - path_points_[idx].x;
|
||||
double dy_path = current_pose.y - path_points_[idx].y;
|
||||
double path_yaw = path_points_[idx].yaw;
|
||||
//dis = static_cast<float>(-dx_path * sin(path_yaw) + dy_path * cos(path_yaw));
|
||||
dis = static_cast<float>(-dx * sin(path_yaw) + dy * cos(path_yaw));
|
||||
lon_dis = static_cast<float>(sqrt(dx * dx + dy * dy));
|
||||
kappa = static_cast<float>(path_points_[idx].kappa);
|
||||
logger_->debug("current_pose_x:{}, current_pose_y:{},current_pose_yaw:{}",
|
||||
current_pose.x, current_pose.y,current_pose.yaw
|
||||
);
|
||||
logger_->debug("current_path_x:{}, current_path_y:{},current_path_yaw:{}",
|
||||
path_points_[idx].x,
|
||||
path_points_[idx].y,
|
||||
path_points_[idx].yaw
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
bool findLookAheadPoint(const PathPoint& current_pose, PathPoint& lookahead_point) {
|
||||
if (path_points_.empty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// 获取前视距离(从控制器参数获取)
|
||||
// 这里需要从controller_获取lookAheadDis,但由于接口限制,我们使用默认值
|
||||
double look_ahead_distance = adapter_look_ahead_dis_; // 需要与初始化时一致
|
||||
|
||||
// 从当前点开始沿路径向前查找
|
||||
int start_idx = current_point_index_;
|
||||
if (start_idx >= static_cast<int>(path_points_.size())) {
|
||||
start_idx = path_points_.size() - 1;
|
||||
}
|
||||
|
||||
double accumulated_dist = 0.0;
|
||||
for (int i = start_idx; i < static_cast<int>(path_points_.size()) - 1; ++i) {
|
||||
double dx = path_points_[i + 1].x - path_points_[i].x;
|
||||
double dy = path_points_[i + 1].y - path_points_[i].y;
|
||||
double segment_length = sqrt(dx * dx + dy * dy);
|
||||
|
||||
if (accumulated_dist + segment_length >= look_ahead_distance) {
|
||||
// 在前视距离内插值
|
||||
double ratio = (look_ahead_distance - accumulated_dist) / segment_length;
|
||||
lookahead_point.x = path_points_[i].x + ratio * dx;
|
||||
lookahead_point.y = path_points_[i].y + ratio * dy;
|
||||
lookahead_point.yaw = path_points_[i].yaw;
|
||||
lookahead_point.kappa = path_points_[i].kappa;
|
||||
return true;
|
||||
}
|
||||
accumulated_dist += segment_length;
|
||||
}
|
||||
|
||||
// 如果路径长度不够,使用最后一个点
|
||||
lookahead_point = path_points_.back();
|
||||
return true;
|
||||
}
|
||||
}; // namespace auto_drive_misson_center
|
||||
|
||||
}
|
||||
#endif // AUTO_DRIVE_MISSION_CENTER_PATH_TRACKING_CONTROLLER_ADAPTER_HPP_
|
||||
@ -27,17 +27,30 @@ public:
|
||||
lookAheadDis = look_ahead_dis;
|
||||
k_v = kv;
|
||||
}
|
||||
|
||||
float update(const float alpha, const float linear_val, const float dis)
|
||||
{
|
||||
// std::cout<<"PurePursuit update!"<<std::endl;
|
||||
logger_->trace("PurePursuit update!");
|
||||
float w_val = (2 * fabs(linear_val) * sin(alpha) / (k_v * fabs(linear_val) + lookAheadDis));
|
||||
float w_val = (2 * fabs(linear_val) * sin(alpha) / (lookAheadDis));
|
||||
w_val = fabs(w_val) > maxAngularVel ? (maxAngularVel * (w_val > 0.0 ? 1.0 : -1.0)) : w_val;
|
||||
// std::cout << "linear_val: " << linear_val << ", w_val: " << w_val << std::endl;
|
||||
logger_->trace("linear_val:{}, w_val:{}", linear_val, w_val);
|
||||
return w_val;
|
||||
};
|
||||
float update(const float alpha, const float linear_val, const float dis, const float lon_dis,const float kappa)
|
||||
{
|
||||
// std::cout<<"PurePursuit update!"<<std::endl;
|
||||
logger_->trace("PurePursuit update!");
|
||||
// logger_->info("PurePursuit process! linear_val:{}, dis:{}, lon_dis:{}, kappa:{}", linear_val, dis, lon_dis, kappa);
|
||||
float w_val = (2 * fabs(linear_val) * sin(alpha) / (lon_dis)) + dis;
|
||||
|
||||
//float w_val = linear_val*kappa;
|
||||
w_val = fabs(w_val) > maxAngularVel ? (maxAngularVel * (w_val > 0.0 ? 1.0 : -1.0)) : w_val;
|
||||
// std::cout << "linear_val: " << linear_val << ", w_val: " << w_val << std::endl;
|
||||
logger_->trace("linear_val:{}, w_val:{}", linear_val, w_val);
|
||||
|
||||
return w_val;
|
||||
};
|
||||
|
||||
void reset()
|
||||
{
|
||||
@ -0,0 +1,71 @@
|
||||
#ifndef _STANLEY_CONTROLL_H_
|
||||
#define _STANLEY_CONTROLL_H_
|
||||
|
||||
#include <iostream>
|
||||
#include <math.h>
|
||||
#include <Eigen/Dense>
|
||||
#include "base_following_controller.hpp"
|
||||
#include "pid_control.hpp"
|
||||
|
||||
using namespace Eigen;
|
||||
|
||||
class Stanley_Controller_C : public BaseFollowingController
|
||||
{
|
||||
public:
|
||||
Stanley_Controller_C() = delete;
|
||||
Stanley_Controller_C(std::shared_ptr<spdlog::logger> logger_recorder)
|
||||
:BaseFollowingController(logger_recorder), logger_(logger_recorder){};
|
||||
~Stanley_Controller_C(){};
|
||||
|
||||
void init(const float max_linear_vel, const float max_angular_vel, const float kp, const float ki, \
|
||||
const float kd, const float look_ahead_dis, const float kv)
|
||||
{
|
||||
// std::cout<<"PurePursuit init!"<<std::endl;
|
||||
logger_->info("PurePursuit init! max_linear_vel:{}, max_angular_vel:{}", max_linear_vel, max_angular_vel);
|
||||
maxLinearVel = max_linear_vel;
|
||||
maxAngularVel = max_angular_vel;
|
||||
lookAheadDis = look_ahead_dis;
|
||||
k_v = kv;
|
||||
}
|
||||
float update(const float alpha, const float linear_val, const float dis)
|
||||
{
|
||||
// std::cout<<"PurePursuit update!"<<std::endl;
|
||||
logger_->trace("PurePursuit update!");
|
||||
float w_val = 1.5 * alpha +1.0 * std::atan2(dis,linear_val);
|
||||
w_val = fabs(w_val) > maxAngularVel ? (maxAngularVel * (w_val > 0.0 ? 1.0 : -1.0)) : w_val;
|
||||
// std::cout << "linear_val: " << linear_val << ", w_val: " << w_val << std::endl;
|
||||
logger_->trace("linear_val:{}, w_val:{}", linear_val, w_val);
|
||||
return w_val;
|
||||
};
|
||||
float update(const float alpha, const float linear_val, const float dis, const float lon_dis,const float kappa)
|
||||
{
|
||||
// std::cout<<"PurePursuit update!"<<std::endl;
|
||||
logger_->trace("PurePursuit update!");
|
||||
// logger_->info("PurePursuit process! linear_val:{}, dis:{}, lon_dis:{}, kappa:{}", linear_val, dis, lon_dis, kappa);
|
||||
float w_val = 1.5 * alpha +1.0 * std::atan2(dis,linear_val);
|
||||
|
||||
//float w_val = linear_val*kappa;
|
||||
w_val = fabs(w_val) > maxAngularVel ? (maxAngularVel * (w_val > 0.0 ? 1.0 : -1.0)) : w_val;
|
||||
// std::cout << "linear_val: " << linear_val << ", w_val: " << w_val << std::endl;
|
||||
logger_->trace("linear_val:{}, w_val:{}", linear_val, w_val);
|
||||
|
||||
return w_val;
|
||||
};
|
||||
|
||||
void reset()
|
||||
{
|
||||
//pid_.reset();
|
||||
}
|
||||
|
||||
void test(){std::cout<<"pp test!"<<std::endl; logger_->debug("pp test!");};
|
||||
|
||||
private:
|
||||
float maxLinearVel;
|
||||
float maxAngularVel;
|
||||
float lookAheadDis, k_v;
|
||||
float maxSlowAngularVel, minToleranceAngle;
|
||||
//PID_Controller_C pid_;
|
||||
std::shared_ptr<spdlog::logger> logger_;
|
||||
};
|
||||
|
||||
#endif
|
||||
@ -12,6 +12,7 @@
|
||||
<depend>rclcpp</depend>
|
||||
<depend>std_msgs</depend>
|
||||
<depend>std_srvs</depend>
|
||||
<depend>visualization_msgs</depend>
|
||||
<depend>auto_drive_proj_utils</depend>
|
||||
<depend>auto_drive_proj_msg</depend>
|
||||
<depend>libcurl-dev</depend>
|
||||
@ -20,20 +20,20 @@ class MockPoseNode(Node):
|
||||
)
|
||||
self.get_logger().info("Service /start_pose ready, always return success=True")
|
||||
|
||||
# 2. rtk_pose publisher
|
||||
self.pub_rtk = self.create_publisher(
|
||||
PoseWithCovarianceStamped,
|
||||
"/rtk_pose",
|
||||
10
|
||||
)
|
||||
# # 2. rtk_pose publisher
|
||||
# self.pub_rtk = self.create_publisher(
|
||||
# PoseWithCovarianceStamped,
|
||||
# "/rtk_pose",
|
||||
# 10
|
||||
# )
|
||||
|
||||
self.url = url
|
||||
self.coord_list = []
|
||||
self.load_geojson()
|
||||
# self.url = url
|
||||
# self.coord_list = []
|
||||
# self.load_geojson()
|
||||
|
||||
self.index = 0
|
||||
self.timer_period = 0.2
|
||||
self.timer = self.create_timer(self.timer_period, self.publish_rtk_pose_cb)
|
||||
# self.index = 0
|
||||
# self.timer_period = 0.2
|
||||
# self.timer = self.create_timer(self.timer_period, self.publish_rtk_pose_cb)
|
||||
|
||||
def load_geojson(self):
|
||||
try:
|
||||
@ -53,40 +53,40 @@ class MockPoseNode(Node):
|
||||
response.success = True
|
||||
return response
|
||||
|
||||
def publish_rtk_pose_cb(self):
|
||||
if not self.coord_list:
|
||||
return
|
||||
# def publish_rtk_pose_cb(self):
|
||||
# if not self.coord_list:
|
||||
# return
|
||||
|
||||
lon, lat, alt = self.coord_list[self.index]
|
||||
# lon, lat, alt = self.coord_list[self.index]
|
||||
|
||||
msg = PoseWithCovarianceStamped()
|
||||
msg.header.stamp = self.get_clock().now().to_msg()
|
||||
msg.header.frame_id = "enu"
|
||||
# msg = PoseWithCovarianceStamped()
|
||||
# msg.header.stamp = self.get_clock().now().to_msg()
|
||||
# msg.header.frame_id = "enu"
|
||||
|
||||
msg.pose.pose.position.x = lon
|
||||
msg.pose.pose.position.y = lat
|
||||
msg.pose.pose.position.z = alt
|
||||
# msg.pose.pose.position.x = lon
|
||||
# msg.pose.pose.position.y = lat
|
||||
# msg.pose.pose.position.z = alt
|
||||
|
||||
msg.pose.pose.orientation.w = 1.0
|
||||
msg.pose.pose.orientation.x = 0.0
|
||||
msg.pose.pose.orientation.y = 0.0
|
||||
msg.pose.pose.orientation.z = 0.0
|
||||
# msg.pose.pose.orientation.w = 1.0
|
||||
# msg.pose.pose.orientation.x = 0.0
|
||||
# msg.pose.pose.orientation.y = 0.0
|
||||
# msg.pose.pose.orientation.z = 0.0
|
||||
|
||||
for i in range(36):
|
||||
msg.pose.covariance[i] = 0.0
|
||||
# for i in range(36):
|
||||
# msg.pose.covariance[i] = 0.0
|
||||
|
||||
self.pub_rtk.publish(msg)
|
||||
# self.pub_rtk.publish(msg)
|
||||
|
||||
self.index += 1
|
||||
if self.index >= len(self.coord_list):
|
||||
self.index = 0
|
||||
# self.index += 1
|
||||
# if self.index >= len(self.coord_list):
|
||||
# self.index = 0
|
||||
|
||||
|
||||
def main(args=None):
|
||||
# 解析命令行参数,注意:分离ros args和自定义argparse参数
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--url", type=str,
|
||||
default="https://test.sweetai.cn:4433/load/locationCmdPath/1701148411059699712.json",
|
||||
default="https://test.sweetai.cn:4433/load/locationCmdPath/1700080420079468544.json",
|
||||
help="geojson path url")
|
||||
parsed_args, ros_args = parser.parse_known_args(args)
|
||||
|
||||
@ -119,4 +119,4 @@ if __name__ == "__main__":
|
||||
3. `/start_pose`服务不解析请求参数,任何入参直接返回`success=True`,完全匹配你的需求。
|
||||
4. frame_id 写为`map`,你可以根据实际工程改成`enu`。
|
||||
5. 发布周期`timer_period = 0.2`,可按需调快 / 调慢。
|
||||
'''
|
||||
'''
|
||||
@ -427,7 +427,7 @@ void MissionCenterNode::missionOnCallback(
|
||||
response->success = true;
|
||||
response->message = "Mission request accepted, processing in background";
|
||||
LOG_INFO("mission on cb, set main state to WAIT MIS RSP, Mission request accepted, processing in background");
|
||||
|
||||
LOG_INFO("========================== /invoke/missionOn request= end");
|
||||
} catch (const std::exception& e) {
|
||||
response->success = false;
|
||||
response->message = std::string("Exception: ") + e.what();
|
||||
@ -744,6 +744,67 @@ std::string MissionCenterNode::downloadFile(const std::string& url)
|
||||
return readBuffer;
|
||||
}
|
||||
|
||||
std::vector<std::vector<double>> MissionCenterNode::alignPathYaw(
|
||||
const std::vector<std::vector<double>>& coordinates,
|
||||
double vehicle_initial_yaw)
|
||||
{
|
||||
std::vector<std::vector<double>> aligned_coordinates;
|
||||
|
||||
if (coordinates.empty())
|
||||
return aligned_coordinates;
|
||||
|
||||
// Path 起点
|
||||
const double origin_x = coordinates.front()[0];
|
||||
const double origin_y = coordinates.front()[1];
|
||||
|
||||
// Path 原始起始航向
|
||||
const double path_initial_yaw = coordinates.front()[2];
|
||||
|
||||
// 将 Path 初始航向旋转到车辆初始航向
|
||||
const double yaw_offset =
|
||||
vehicle_initial_yaw - path_initial_yaw;
|
||||
|
||||
const double cos_offset = std::cos(yaw_offset);
|
||||
const double sin_offset = std::sin(yaw_offset);
|
||||
|
||||
aligned_coordinates.reserve(coordinates.size());
|
||||
|
||||
for (const auto& coord : coordinates)
|
||||
{
|
||||
if (coord.size() < 3)
|
||||
continue;
|
||||
|
||||
const double dx = coord[0] - origin_x;
|
||||
const double dy = coord[1] - origin_y;
|
||||
|
||||
const double x =
|
||||
cos_offset * dx - sin_offset * dy;
|
||||
|
||||
const double y =
|
||||
sin_offset * dx + cos_offset * dy;
|
||||
|
||||
double yaw = coord[2] + yaw_offset;
|
||||
|
||||
while (yaw > M_PI)
|
||||
yaw -= 2.0 * M_PI;
|
||||
|
||||
while (yaw < -M_PI)
|
||||
yaw += 2.0 * M_PI;
|
||||
|
||||
aligned_coordinates.push_back({
|
||||
x,
|
||||
y,
|
||||
yaw
|
||||
});
|
||||
LOG_INFO(
|
||||
"Path new: x={} y={} yaw={} deg",
|
||||
x,
|
||||
y,
|
||||
yaw * 180.0 / M_PI);
|
||||
}
|
||||
|
||||
return aligned_coordinates;
|
||||
}
|
||||
bool MissionCenterNode::processDownloadedData(const std::string& downloaded_data,
|
||||
std::string& mission_data, std::string& follow_data)
|
||||
{
|
||||
@ -786,8 +847,10 @@ bool MissionCenterNode::processDownloadedData(const std::string& downloaded_data
|
||||
}
|
||||
|
||||
interpolation_map_.clear();
|
||||
std::vector<std::vector<double>> interpolated_coords = interpolatePoints(coordinates, 0.5);
|
||||
|
||||
std::vector<std::vector<double>> aligned_coords = alignPathYaw(coordinates, vehicle_initial_yaw_);
|
||||
std::vector<std::vector<double>> interpolated_coords = interpolatePoints(aligned_coords, 0.2);
|
||||
|
||||
json processed_data = data;
|
||||
json new_coordinates = json::array();
|
||||
for (const auto& coord : interpolated_coords) {
|
||||
@ -857,9 +920,28 @@ std::vector<std::vector<double>> MissionCenterNode::interpolatePoints(
|
||||
double ratio = static_cast<double>(j) / num_segments;
|
||||
double x = current[0] + dx * ratio;
|
||||
double y = current[1] + dy * ratio;
|
||||
result.push_back({x, y, current[2]});
|
||||
inserted_points++;
|
||||
}
|
||||
|
||||
// yaw 插值
|
||||
double yaw_diff = next[2] - current[2];
|
||||
// normalize yaw_diff 到 [-pi, pi]
|
||||
while (yaw_diff > M_PI) {
|
||||
yaw_diff -= 2.0 * M_PI;
|
||||
}
|
||||
while (yaw_diff < -M_PI) {
|
||||
yaw_diff += 2.0 * M_PI;
|
||||
}
|
||||
double yaw =current[2] + yaw_diff * ratio;
|
||||
// normalize yaw 到 [-pi, pi]
|
||||
while (yaw > M_PI) {
|
||||
yaw -= 2.0 * M_PI;
|
||||
}
|
||||
while (yaw < -M_PI) {
|
||||
yaw += 2.0 * M_PI;
|
||||
}
|
||||
|
||||
result.push_back({x, y, yaw});
|
||||
inserted_points++;
|
||||
}
|
||||
interpolation_map_.push_back({i + 1, inserted_points});
|
||||
}
|
||||
|
||||
@ -9,7 +9,6 @@
|
||||
#include <chrono>
|
||||
#include <cmath>
|
||||
#include <limits>
|
||||
|
||||
namespace auto_drive_misson_center {
|
||||
|
||||
constexpr double PathFollowHandler::POS_LOST_TIMEOUT_SECONDS;
|
||||
@ -79,7 +78,7 @@ PathFollowHandler::PathFollowHandler(const std::string & node_name)
|
||||
10
|
||||
);
|
||||
|
||||
this->declare_parameter<std::string>("controller_type", "pure_pursuit");
|
||||
this->declare_parameter<std::string>("controller_type", "lqr");
|
||||
this->get_parameter("controller_type", controller_type_);
|
||||
LOG_INFO("Controller type parameter: {}", controller_type_);
|
||||
|
||||
@ -417,7 +416,7 @@ void PathFollowHandler::processRunningState()
|
||||
auto path_ind_msg = std_msgs::msg::Int32();
|
||||
path_ind_msg.data = path_controller_->getCurrentPointIndex() + path_ind_start_;
|
||||
path_ind_pub_->publish(path_ind_msg);
|
||||
|
||||
LOG_INFO("Published final path index 1: {}", path_ind_msg.data);
|
||||
saveCurrentStateToRedis();
|
||||
|
||||
LOG_DEBUG("path controller, current pose point:x:{}, y:{}, yaw:{}; twist_msg pub:linear x:{}, angular z:{}, run is completed:{}, Current Point Index:{}, Path Point Count:{}",
|
||||
@ -444,7 +443,7 @@ void PathFollowHandler::processRunningState()
|
||||
}
|
||||
final_ind_msg.data = total_points - 1;
|
||||
path_ind_pub_->publish(final_ind_msg);
|
||||
|
||||
LOG_INFO("Published final path index 2: {}", final_ind_msg.data);
|
||||
LOG_INFO("main state change(Running State:Mission completed):{} -> {}", mainStateToString(main_state_), "AUTO_OFF");
|
||||
main_state_ = MainState::AUTO_OFF;
|
||||
} else {
|
||||
@ -693,7 +692,13 @@ bool PathFollowHandler::loadPathTrackingController(const std::string& controller
|
||||
LOG_INFO("Pure Pursuit path tracking controller loaded");
|
||||
reportEvent("info", "PATH_CONTROLLER_LOAD_OK", "Pure Pursuit控制器加载成功");
|
||||
return true;
|
||||
} else {
|
||||
} else if (controller_type == "stanley") {
|
||||
path_controller_ = std::make_shared<StanleyControllerAdapter>(logger);
|
||||
LOG_INFO("STAN path tracking controller loaded");
|
||||
reportEvent("info", "PATH_CONTROLLER_LOAD_OK", "STAN控制器加载成功");
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
LOG_ERROR("load Path Tracking Controller ERROR");
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user