Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Pinoxchio
apollo
提交
4c4f63a4
A
apollo
项目概览
Pinoxchio
/
apollo
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
apollo
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
4c4f63a4
编写于
10月 16, 2018
作者:
L
luoqi06
提交者:
Liangliang Zhang
10月 17, 2018
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Planning : fix edge number count in distance approach
上级
64ff0110
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
37 addition
and
31 deletion
+37
-31
modules/planning/open_space/distance_approach_ipopt_interface.cc
.../planning/open_space/distance_approach_ipopt_interface.cc
+37
-31
未找到文件。
modules/planning/open_space/distance_approach_ipopt_interface.cc
浏览文件 @
4c4f63a4
...
...
@@ -105,8 +105,8 @@ bool DistanceApproachIPOPTInterface::get_nlp_info(int& n, int& m,
for
(
std
::
size_t
i
=
0
;
i
<
horizon_
+
1
;
++
i
)
{
for
(
std
::
size_t
j
=
0
;
j
<
obstacles_num_
;
++
j
)
{
std
::
size_t
current_
vertice
_num
=
obstacles_edges_num_
(
j
,
0
);
tmp
+=
current_
vertice
_num
*
4
+
9
+
4
;
std
::
size_t
current_
edges
_num
=
obstacles_edges_num_
(
j
,
0
);
tmp
+=
current_
edges
_num
*
4
+
9
+
4
;
}
}
...
...
@@ -389,25 +389,26 @@ bool DistanceApproachIPOPTInterface::eval_g(int n, const double* x, bool new_x,
// 4. Three obstacles related equal constraints, one equality constraints,
// [0, horizon_] * [0, obstacles_num_-1] * 4
int
counter
=
0
;
state_index
=
state_start_index_
;
std
::
size_t
l_index
=
l_start_index_
;
std
::
size_t
n_index
=
n_start_index_
;
for
(
std
::
size_t
i
=
0
;
i
<
horizon_
+
1
;
++
i
)
{
int
edges_counter
=
0
;
for
(
std
::
size_t
j
=
0
;
j
<
obstacles_num_
;
++
j
)
{
std
::
size_t
current_
vertice
_num
=
obstacles_edges_num_
(
i
,
0
);
std
::
size_t
current_
edges
_num
=
obstacles_edges_num_
(
i
,
0
);
Eigen
::
MatrixXd
Aj
=
obstacles_A_
.
block
(
counter
,
0
,
current_vertice
_num
,
2
);
std
::
vector
<
int
>
lj
(
&
x
[
l_index
],
&
x
[
l_index
+
current_
vertice
_num
]);
obstacles_A_
.
block
(
edges_counter
,
0
,
current_edges
_num
,
2
);
std
::
vector
<
int
>
lj
(
&
x
[
l_index
],
&
x
[
l_index
+
current_
edges
_num
]);
std
::
vector
<
int
>
nj
(
&
x
[
n_index
],
&
x
[
n_index
+
3
]);
Eigen
::
MatrixXd
bj
=
obstacles_b_
.
block
(
counter
,
0
,
current_vertice
_num
,
1
);
obstacles_b_
.
block
(
edges_counter
,
0
,
current_edges
_num
,
1
);
// norm(A* lambda == 1)
double
tmp1
=
0
;
double
tmp2
=
0
;
for
(
std
::
size_t
k
=
0
;
k
<
current_
vertice
_num
;
++
k
)
{
for
(
std
::
size_t
k
=
0
;
k
<
current_
edges
_num
;
++
k
)
{
// TODO(QiL) : replace this one directly with x
tmp1
+=
Aj
(
k
,
0
)
*
x
[
l_index
+
k
];
tmp2
+=
Aj
(
k
,
1
)
*
x
[
l_index
+
k
];
...
...
@@ -431,7 +432,7 @@ bool DistanceApproachIPOPTInterface::eval_g(int n, const double* x, bool new_x,
}
double
tmp4
=
0.0
;
for
(
std
::
size_t
k
=
0
;
k
<
current_
vertice
_num
;
++
k
)
{
for
(
std
::
size_t
k
=
0
;
k
<
current_
edges
_num
;
++
k
)
{
tmp4
+=
bj
(
k
,
0
)
*
x
[
l_index
+
k
];
}
...
...
@@ -442,8 +443,8 @@ bool DistanceApproachIPOPTInterface::eval_g(int n, const double* x, bool new_x,
tmp4
-
min_safety_distance_
;
// Update index
counter
+=
4
;
l_index
+=
current_
vertice
_num
;
edges_counter
+=
current_edges_num
;
l_index
+=
current_
edges
_num
;
n_index
+=
4
;
constraint_index
+=
4
;
}
...
...
@@ -697,10 +698,10 @@ bool DistanceApproachIPOPTInterface::eval_jac_g(int n, const double* x,
for
(
std
::
size_t
i
=
0
;
i
<
horizon_
+
1
;
++
i
)
{
for
(
std
::
size_t
j
=
0
;
j
<
obstacles_num_
;
++
j
)
{
std
::
size_t
current_
vertice
_num
=
obstacles_edges_num_
(
j
,
0
);
std
::
size_t
current_
edges
_num
=
obstacles_edges_num_
(
j
,
0
);
// 1. norm(A* lambda == 1)
for
(
std
::
size_t
k
=
0
;
k
<
current_
vertice
_num
;
++
k
)
{
for
(
std
::
size_t
k
=
0
;
k
<
current_
edges
_num
;
++
k
)
{
// with respect to l
iRow
[
nz_index
]
=
constraint_index
;
jCol
[
nz_index
]
=
l_index
+
k
;
...
...
@@ -715,7 +716,7 @@ bool DistanceApproachIPOPTInterface::eval_jac_g(int n, const double* x,
++
nz_index
;
// with respect to l
for
(
std
::
size_t
k
=
0
;
k
<
current_
vertice
_num
;
++
k
)
{
for
(
std
::
size_t
k
=
0
;
k
<
current_
edges
_num
;
++
k
)
{
iRow
[
nz_index
]
=
constraint_index
;
jCol
[
nz_index
]
=
l_index
+
k
;
++
nz_index
;
...
...
@@ -739,7 +740,7 @@ bool DistanceApproachIPOPTInterface::eval_jac_g(int n, const double* x,
++
nz_index
;
// with respect to l
for
(
std
::
size_t
k
=
0
;
k
<
current_
vertice
_num
;
++
k
)
{
for
(
std
::
size_t
k
=
0
;
k
<
current_
edges
_num
;
++
k
)
{
iRow
[
nz_index
]
=
constraint_index
;
jCol
[
nz_index
]
=
l_index
+
k
;
++
nz_index
;
...
...
@@ -772,7 +773,7 @@ bool DistanceApproachIPOPTInterface::eval_jac_g(int n, const double* x,
++
nz_index
;
// with respect to l
for
(
std
::
size_t
k
=
0
;
k
<
current_
vertice
_num
;
++
k
)
{
for
(
std
::
size_t
k
=
0
;
k
<
current_
edges
_num
;
++
k
)
{
iRow
[
nz_index
]
=
constraint_index
;
jCol
[
nz_index
]
=
l_index
+
k
;
++
nz_index
;
...
...
@@ -786,7 +787,7 @@ bool DistanceApproachIPOPTInterface::eval_jac_g(int n, const double* x,
}
// Update inde
l_index
+=
current_
vertice
_num
;
l_index
+=
current_
edges
_num
;
n_index
+=
4
;
constraint_index
+=
1
;
}
...
...
@@ -1056,20 +1057,25 @@ bool DistanceApproachIPOPTInterface::eval_jac_g(int n, const double* x,
state_index
=
state_start_index_
;
std
::
size_t
l_index
=
l_start_index_
;
std
::
size_t
n_index
=
n_start_index_
;
std
::
size_t
counter
=
0
;
for
(
std
::
size_t
i
=
0
;
i
<
horizon_
+
1
;
++
i
)
{
std
::
size_t
edges_counter
=
0
;
for
(
std
::
size_t
j
=
0
;
j
<
obstacles_num_
;
++
j
)
{
std
::
size_t
current_
vertice
_num
=
obstacles_edges_num_
(
j
,
0
);
std
::
size_t
current_
edges
_num
=
obstacles_edges_num_
(
j
,
0
);
AINFO
<<
"eval_jac_g, obstacle constraint values, current "
"vertice_num : "
<<
current_vertice_num
<<
" i : "
<<
i
<<
" j : "
<<
j
;
<<
current_edges_num
<<
" i : "
<<
i
<<
" j : "
<<
j
;
AINFO
<<
"obstacles_A_ size : "
<<
obstacles_A_
.
rows
()
<<
" and "
<<
obstacles_A_
.
cols
();
AINFO
<<
"edges_counter : "
<<
edges_counter
;
Eigen
::
MatrixXd
Aj
=
obstacles_A_
.
block
(
counter
,
0
,
current_vertice_num
,
2
);
std
::
vector
<
int
>
lj
(
&
x
[
l_index
],
&
x
[
l_index
+
current_vertice_num
]);
obstacles_A_
.
block
(
edges_counter
,
0
,
current_edges_num
,
2
);
AINFO
<<
"before after Aj"
;
std
::
vector
<
int
>
lj
(
&
x
[
l_index
],
&
x
[
l_index
+
current_edges_num
]);
AINFO
<<
"before nj"
;
std
::
vector
<
int
>
nj
(
&
x
[
n_index
],
&
x
[
n_index
+
3
]);
Eigen
::
MatrixXd
bj
=
obstacles_b_
.
block
(
counter
,
0
,
current_vertice
_num
,
1
);
obstacles_b_
.
block
(
edges_counter
,
0
,
current_edges
_num
,
1
);
AINFO
<<
"eval_jac_g, obstacle constraint values, extraction number : i "
...
...
@@ -1077,7 +1083,7 @@ bool DistanceApproachIPOPTInterface::eval_jac_g(int n, const double* x,
// TODO(QiL) : Remove redudant calculation
double
tmp1
=
0
;
double
tmp2
=
0
;
for
(
std
::
size_t
k
=
0
;
k
<
current_
vertice
_num
;
++
k
)
{
for
(
std
::
size_t
k
=
0
;
k
<
current_
edges
_num
;
++
k
)
{
// TODO(QiL) : replace this one directly with x
tmp1
+=
Aj
(
k
,
0
)
*
x
[
l_index
+
k
];
tmp2
+=
Aj
(
k
,
1
)
*
x
[
l_index
+
k
];
...
...
@@ -1090,7 +1096,7 @@ bool DistanceApproachIPOPTInterface::eval_jac_g(int n, const double* x,
tmp3
+=
-
g_
[
k
]
*
nj
[
k
];
}
for
(
std
::
size_t
k
=
0
;
k
<
current_
vertice
_num
;
++
k
)
{
for
(
std
::
size_t
k
=
0
;
k
<
current_
edges
_num
;
++
k
)
{
tmp4
+=
bj
(
k
,
0
)
*
x
[
l_index
+
k
];
}
...
...
@@ -1098,7 +1104,7 @@ bool DistanceApproachIPOPTInterface::eval_jac_g(int n, const double* x,
<<
" j : "
<<
j
;
// 1. norm(A* lambda == 1)
for
(
std
::
size_t
k
=
0
;
k
<
current_
vertice
_num
;
++
k
)
{
for
(
std
::
size_t
k
=
0
;
k
<
current_
edges
_num
;
++
k
)
{
// with respect to l
values
[
nz_index
]
=
2
*
Aj
(
k
,
0
)
*
Aj
(
k
,
0
)
*
x
[
l_index
+
k
]
+
2
*
Aj
(
k
,
0
)
*
Aj
(
k
,
1
)
*
x
[
l_index
+
k
];
// t0~tk
...
...
@@ -1115,7 +1121,7 @@ bool DistanceApproachIPOPTInterface::eval_jac_g(int n, const double* x,
++
nz_index
;
// with respect to l
for
(
std
::
size_t
k
=
0
;
k
<
current_
vertice
_num
;
++
k
)
{
for
(
std
::
size_t
k
=
0
;
k
<
current_
edges
_num
;
++
k
)
{
values
[
nz_index
]
=
std
::
cos
(
x
[
state_index
+
2
])
*
Aj
(
k
,
0
)
+
std
::
sin
(
x
[
state_index
+
2
])
*
Aj
(
k
,
1
);
// v0~vn
++
nz_index
;
...
...
@@ -1135,7 +1141,7 @@ bool DistanceApproachIPOPTInterface::eval_jac_g(int n, const double* x,
++
nz_index
;
// with respect to l
for
(
std
::
size_t
k
=
0
;
k
<
current_
vertice
_num
;
++
k
)
{
for
(
std
::
size_t
k
=
0
;
k
<
current_
edges
_num
;
++
k
)
{
values
[
nz_index
]
=
std
::
cos
(
x
[
state_index
+
2
])
*
Aj
(
k
,
0
)
+
std
::
sin
(
x
[
state_index
+
2
])
*
Aj
(
k
,
1
);
// y0~yn
++
nz_index
;
...
...
@@ -1166,7 +1172,7 @@ bool DistanceApproachIPOPTInterface::eval_jac_g(int n, const double* x,
++
nz_index
;
// with respect to l
for
(
std
::
size_t
k
=
0
;
k
<
current_
vertice
_num
;
++
k
)
{
for
(
std
::
size_t
k
=
0
;
k
<
current_
edges
_num
;
++
k
)
{
values
[
nz_index
]
=
(
x
[
state_index
]
+
std
::
cos
(
x
[
state_index
+
2
])
*
offset_
)
*
Aj
(
k
,
0
)
+
...
...
@@ -1186,8 +1192,8 @@ bool DistanceApproachIPOPTInterface::eval_jac_g(int n, const double* x,
<<
" j : "
<<
j
;
// Update index
counter
+=
4
;
l_index
+=
current_
vertice
_num
;
edges_counter
+=
current_edges_num
;
l_index
+=
current_
edges
_num
;
n_index
+=
4
;
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录