<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[gophae的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/gophae</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; gophae]]></copyright><item><title><![CDATA[论文解析：Spatial-temporal Semantic Corridor(SSC)在环境建模中的应用]]></title><link>https://blog.youkuaiyun.com/gophae/article/details/122795999</link><guid>https://blog.youkuaiyun.com/gophae/article/details/122795999</guid><author>gophae</author><pubDate>Sun, 06 Feb 2022 10:17:30 +0800</pubDate><description><![CDATA[本文解析Safe trajectory generation for complex urban environments using spatio-temporal semantic corridor 中提到的 Spatial-temporal Semantic Corridor(SSC) 概念，并讨论其如何在自动驾驶的环境建模中使用。
文章的contribution为：

使用SSC将不同的语义信息统一在时空语义通道中。
使用基于优化的trajectory generation 方法进行motion
p]]></description><category></category></item><item><title><![CDATA[Apollo planning论文解析(1)]]></title><link>https://blog.youkuaiyun.com/gophae/article/details/115816108</link><guid>https://blog.youkuaiyun.com/gophae/article/details/115816108</guid><author>gophae</author><pubDate>Sun, 18 Apr 2021 08:50:10 +0800</pubDate><description><![CDATA[本文解析Apollo发表于ITSC2019的一篇规划方面的论文：Optimal Trajectory Generation for Autonomous Vehicles Under Centripetal Acceleration Constraints for In-lane Driving Scenarios
文章简述了规划模块的in lane driving 的纵向规划的最新方案之一，更确切的说是不带变道的部分。文章分为两个主要部分，第一部分是参考线生成，第二部分是如何生成一条path-time 轨]]></description><category></category></item><item><title><![CDATA[如何使用OSQP-Eigen]]></title><link>https://blog.youkuaiyun.com/gophae/article/details/115122792</link><guid>https://blog.youkuaiyun.com/gophae/article/details/115122792</guid><author>gophae</author><pubDate>Tue, 23 Mar 2021 15:12:28 +0800</pubDate><description><![CDATA[更多的关于Eigen的学习参考
更多的关于OSQP的学习参考
我们在github上找到了使用eigen库封装起来的OSQP库，比原来的OSQP写代码时更好用一些。
我们对照mathworks对quadprog的例子解释对库的使用
一个标准的QP问题可以以如下的标准形式进行描述：

注意这里面的写法不同的书本有些不同的表达：H , f 有时候也被写成 P, q.
接下来给出几个典型的不同约束的二次规划形式：
1，具有线性约束的二次规划

matlab的调用方法是：
H = [1 -1; -1 2]; 
f =]]></description><category></category></item><item><title><![CDATA[使用QP方法解基于五次多项式形式的cost function minimization问题]]></title><link>https://blog.youkuaiyun.com/gophae/article/details/113745314</link><guid>https://blog.youkuaiyun.com/gophae/article/details/113745314</guid><author>gophae</author><pubDate>Sun, 07 Feb 2021 18:21:01 +0800</pubDate><description><![CDATA[我们在这里使用二次规划(QP)的方法解一个五次多项式形式的曲线的cost function minimization的问题。二次规划的标准形式如下：

在之前的讨论的五次多项式的方法中，我们在采用空间上依旧有时间T信息，在这里时间T没有办法放进来，因此只适用于求解空间曲线，或者时间国定曲线的问题。
标准的无阶多项式及其一阶导数，二阶导数的表达式如下：

代价函数cost function中，我们只考虑横向偏移，以及jerk的大小：（当然我们还可以把比如横向速度和加速度考虑进来）

那么写成矩阵形式为：

对]]></description><category></category></item><item><title><![CDATA[自动驾驶论文解析(8)_motionPlanning]]></title><link>https://blog.youkuaiyun.com/gophae/article/details/113674766</link><guid>https://blog.youkuaiyun.com/gophae/article/details/113674766</guid><author>gophae</author><pubDate>Fri, 05 Feb 2021 09:48:08 +0800</pubDate><description><![CDATA[本文解析Optimal Vehicle Path Planning Using Quadratic Optimization for Baidu Apollo Open Platform，文章发表于IEEE-IV2020，出自百度。方法针对的场景是结构化道路上的因对静态或者低速障碍物的轨迹优化方法。
文章主要论述的内容为：
1）参考线的前处理
2）道路边界的计算
3）基于二次规划的轨迹优化
文章的创新点是结合了Werling et al的解耦思路，降低了计算维度，在选择最优曲线上使用了二次规划的基于优化理论]]></description><category></category></item><item><title><![CDATA[针对Hybrid A*论文解析(5)中的方法的一些验证]]></title><link>https://blog.youkuaiyun.com/gophae/article/details/109689728</link><guid>https://blog.youkuaiyun.com/gophae/article/details/109689728</guid><author>gophae</author><pubDate>Sat, 14 Nov 2020 13:55:18 +0800</pubDate><description><![CDATA[用matlab试了一个论文分析5里面的一些方法，感觉还是有很多问题，并没有像文章说的那么好。
curvature梯度方向的优化基本用不上，梯度的下降方向非常大，而且很不稳定，就算限制了梯度下降的步长，效果也不是很好。从开源代码里面也可以看到，curvature部分直接变成了0，说明代码里面也没用curvature这一项的优化。
smoothness 方向的优化，只有当原始曲线噪声比较大的时候优化效果还可以，一旦原始曲线也比较平滑，优化效果也会一般。所谓的原始曲线的噪声比较大，如下如：

如果对一条平滑曲线进]]></description><category></category></item><item><title><![CDATA[Hybrid A*论文解析(5)]]></title><link>https://blog.youkuaiyun.com/gophae/article/details/109658857</link><guid>https://blog.youkuaiyun.com/gophae/article/details/109658857</guid><author>gophae</author><pubDate>Thu, 12 Nov 2020 22:34:29 +0800</pubDate><description><![CDATA[本文解析论文Enhanced path smoothing based on conjugate gradient descent for firefighting robots in petrochemical complexes，文中依然在解决混合A* 加上梯度方法轨迹平滑的问题，但是对于CMU的方案中的轨迹优化部分，做出了很多改进建议。这里着重说一下这部分，A* 部分基本沿用了CMU方案，也就没什么要说的了。
对于曲线的前提条件是：

1，曲线的曲率要小于0.2，也就是曲率半径要比5m大。
2，曲线要]]></description><category></category></item><item><title><![CDATA[1024]]></title><link>https://blog.youkuaiyun.com/gophae/article/details/109262973</link><guid>https://blog.youkuaiyun.com/gophae/article/details/109262973</guid><author>gophae</author><pubDate>Sat, 24 Oct 2020 17:39:28 +0800</pubDate><description><![CDATA[mark today

]]></description><category></category></item><item><title><![CDATA[无人车制胜关键：Apollo决策系统全面剖析]]></title><link>https://blog.youkuaiyun.com/gophae/article/details/109240498</link><guid>https://blog.youkuaiyun.com/gophae/article/details/109240498</guid><author>gophae</author><pubDate>Fri, 23 Oct 2020 13:20:12 +0800</pubDate><description><![CDATA[2019年3月26日，AI前线社群邀请到了百度美研资深软件工程师 Yifei Jiang ，带来 《Apollo 决策技术分享（决策系统的设计和无人驾驶的实现）》 的内容分享。

大家好！感谢大家来参与这次Apollo决策技术的分享，我是来自Apollo美研团队的工程师Yifei。
在这次的分享中，我们会介绍Apollo是如何设计和实现无人驾驶的决策系统，包括以下5个部分：
参考路径
交规决策
路径决策
速度决策
决策场景

决策模块相当于无人驾驶系统的大脑，保障无人车的行车安全，同时也要理解和遵守交通规则]]></description><category></category></item><item><title><![CDATA[Effective C++阅读笔记]]></title><link>https://blog.youkuaiyun.com/gophae/article/details/109227467</link><guid>https://blog.youkuaiyun.com/gophae/article/details/109227467</guid><author>gophae</author><pubDate>Thu, 22 Oct 2020 20:43:36 +0800</pubDate><description><![CDATA[1，cpp的四个特点
c, object-oriented cpp, template cpp, STL
2, 不要用 #define
使用 const, enum, inline替换define, 因为我们宁可以编译器替换预处理器。
//定义常量char
const char* const autoName = "sm";
const string authorName ("sm");

在类中定义作用域仅在类中的常量：
class GamePlayer{
private:
	static const i]]></description><category></category></item><item><title><![CDATA[ROS在rviz中实时显示轨迹和点]]></title><link>https://blog.youkuaiyun.com/gophae/article/details/108514336</link><guid>https://blog.youkuaiyun.com/gophae/article/details/108514336</guid><author>gophae</author><pubDate>Thu, 10 Sep 2020 15:20:45 +0800</pubDate><description><![CDATA[记录一个简单的例子方便复制：
通过使用
nav_msgs::Path
geometry_msgs::PoseStamped
geometry_msgs::PointStamped

来实现rviz中可视化轨迹和轨迹点。
首先创建工程：
mkdir -p showpath/src
cd src
catkin_create_pkg showpath roscpp rospy sensor_msgs std_msgs nav_msgs tf
cd ..
catkin_make 

以及修改cmakelist:
a]]></description><category></category></item><item><title><![CDATA[ros::spin() 和 ros::spinOnce()]]></title><link>https://blog.youkuaiyun.com/gophae/article/details/108462156</link><guid>https://blog.youkuaiyun.com/gophae/article/details/108462156</guid><author>gophae</author><pubDate>Tue, 08 Sep 2020 10:19:24 +0800</pubDate><description><![CDATA[ROS的回调处理函数spin/spinOnce作用区别使用
作用
spin/spinOnce是ROS消息回调处理函数。它俩通常会出现在ROS的主循环中，程序需要不断调用ros::spin() 或 ros::spinOnce()，两者区别在于前者调用后不会再返回，也就是你的主程序到这儿就不往下执行了，而后者在调用后还可以继续执行之后的程序。
如果你的程序写了相关的消息订阅函数，那么程序在执行过程中，除了主程序以外，ROS还会自动在后台按照你规定的格式，接受订阅的消息，但是所接到的消息并不是立刻就被处理，而是必]]></description><category></category></item><item><title><![CDATA[浅拷贝和深拷贝]]></title><link>https://blog.youkuaiyun.com/gophae/article/details/108383121</link><guid>https://blog.youkuaiyun.com/gophae/article/details/108383121</guid><author>gophae</author><pubDate>Thu, 03 Sep 2020 15:06:47 +0800</pubDate><description><![CDATA[浅拷贝是不会分配新的内存的，深拷贝才能分配。
先考虑一种情况，对一个已知对象进行拷贝，编译系统会自动调用一种构造函数——拷贝构造函数，如果用户未定义拷贝构造函数，则会调用默认拷贝构造函数。
举一个例子：
#include &lt;iostream&gt;
using namespace std;

class Student
{
private:
    int num;
    char *name;

public:
    Student();
    ~Student();
};

Student:]]></description><category></category></item><item><title><![CDATA[C++计时器]]></title><link>https://blog.youkuaiyun.com/gophae/article/details/108316351</link><guid>https://blog.youkuaiyun.com/gophae/article/details/108316351</guid><author>gophae</author><pubDate>Mon, 31 Aug 2020 10:21:18 +0800</pubDate><description><![CDATA[在一个测试类中，我们重载了构造函数，用计时器观察不同构造函数的构造时间。
#include &lt;iostream&gt;
#include &lt;ctime&gt;
using namespace std;

class Test
{
public:
    Test() : a_(0), b_(0), c_(0)//列表初始化
    {
        cout &lt;&lt; "register constructor(default)." &lt;&lt; endl;
    }
    T]]></description><category></category></item><item><title><![CDATA[ROS在类中发布和接受消息(自定义消息)]]></title><link>https://blog.youkuaiyun.com/gophae/article/details/108103499</link><guid>https://blog.youkuaiyun.com/gophae/article/details/108103499</guid><author>gophae</author><pubDate>Wed, 19 Aug 2020 16:53:51 +0800</pubDate><description><![CDATA[一开始建立pkg:
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
cd ~/catkin_ws/src
catkin_create_pkg pub_sub_test std_msgs rospy roscpp
cd ..
catkin_make

我们现在有两个自定义消息：
adm_lat.msg
uint8 Enable_lat
float32 GPS1_Curvature_cmd
float32 V_des
int8 Gear_des
uint]]></description><category></category></item><item><title><![CDATA[ROS在类中发布和接受消息(标准消息)]]></title><link>https://blog.youkuaiyun.com/gophae/article/details/108103089</link><guid>https://blog.youkuaiyun.com/gophae/article/details/108103089</guid><author>gophae</author><pubDate>Wed, 19 Aug 2020 16:13:44 +0800</pubDate><description><![CDATA[作为模板写的时候方便查一下。本例生成两个节点talkerlisten1&amp; 2, 互相接受对方消息，做了简单处理后在发出去。注意测试的时候先开B在开A。

#include "ros/ros.h"
#include "std_msgs/Float64.h"
#include &lt;unistd.h&gt;

class tl1{
public:
    tl1();
    void registerNodeHandle(ros::NodeHandle&amp; _nh);//单独写出去注册nh
 ]]></description><category></category></item><item><title><![CDATA[eigen库学习笔记(2)]]></title><link>https://blog.youkuaiyun.com/gophae/article/details/108049507</link><guid>https://blog.youkuaiyun.com/gophae/article/details/108049507</guid><author>gophae</author><pubDate>Mon, 17 Aug 2020 09:50:46 +0800</pubDate><description><![CDATA[这里主要整理矩阵运算相关内容。其中备注了与Matlab的命令对比。
eigen库的矩阵运算Eigen 矩阵定义Eigen 基础使用Eigen 特殊矩阵生成Eigen 矩阵分块Eigen 矩阵元素交换Eigen 矩阵转置Eigen 矩阵乘积Eigen 矩阵单个元素操作Eigen 矩阵化简Eigen 矩阵点乘Eigen 矩阵类型转换Eigen 求解线性方程组 Ax = bEigen 矩阵特征值
Eigen 矩阵定义
#include &lt;Eigen/Dense&gt;

Matrix&lt;double, ]]></description><category></category></item><item><title><![CDATA[庞特里亚金最小值原理求解能耗最小化的时间最优OBVP问题]]></title><link>https://blog.youkuaiyun.com/gophae/article/details/107921163</link><guid>https://blog.youkuaiyun.com/gophae/article/details/107921163</guid><author>gophae</author><pubDate>Mon, 10 Aug 2020 20:54:38 +0800</pubDate><description><![CDATA[本文依据论文A computationally efficient motion primitive for quadrocopter trajectory generation中所述的方法，整理出其中对OBVP问题的求解方法。所谓的OBVP即为optimal boundary value problem。
OBVP是特殊的BVP问题，最简单的BVP问题就是state sampled lattice planning,这其实也是一种lattice planner方法。常见的例子比如：给定初始位置和终点位置，]]></description><category></category></item><item><title><![CDATA[C++ vector库学习笔记]]></title><link>https://blog.youkuaiyun.com/gophae/article/details/107742285</link><guid>https://blog.youkuaiyun.com/gophae/article/details/107742285</guid><author>gophae</author><pubDate>Sun, 02 Aug 2020 14:59:22 +0800</pubDate><description><![CDATA[vector是C++标准模板库，它是一个多功能、能够操作多种数据结构和算法的模板类。vector是一个容器，能够像容器一样存放各种类型的对象。vector是一个能够存放任意类型的动态数组，能够增加和删除元素，可以完全替代C语言风格的动态数组，由于vector能够自动的管理内存，我们不需要考虑内存的增长和释放、具有很好的安全性。
vector的初始化
//定义具有10个整型元素的向量
//（尖括号为元素类型名，它可以是任何合法的数据类型），
//不具有初值，其值不确定
vector&lt;int&gt;a(1]]></description><category></category></item><item><title><![CDATA[等式与不等式约束的序列二次规划(SQP)]]></title><link>https://blog.youkuaiyun.com/gophae/article/details/107695263</link><guid>https://blog.youkuaiyun.com/gophae/article/details/107695263</guid><author>gophae</author><pubDate>Thu, 30 Jul 2020 18:08:24 +0800</pubDate><description><![CDATA[最后介绍同时有等式约束和不等式约束的SQP解法。这里面的解法比之前的稍微复杂一点，用到了line search method以及BFGS下降。使用line search是为了增加搜索的鲁棒性，确保在任意的初始点都可以最后收敛到局部最优或者全局最优点。使用BFGS的作用是简化hessian的计算量。
解如下问题：

跟之前一样，这个问题的kkt条件为：

依旧是要找到x,lamda, mu的增量，是的下一步的位置能够逼近kkt条件。以上的KKT条件离散化后改写为：


这个KKT条件的源问题就是如下的QP问题]]></description><category></category></item></channel></rss>