SHENLAN_Chapter5_HW2_通过闭式求解的方法求解只有等式约束没有不等式约束的Minimun snap路径轨迹生成问题

本文详细介绍了使用闭式求解方法解决MinimumSnap路径规划问题,包括多项式系数映射矩阵Mj、选择矩阵C的计算过程及代码实现,适用于等式约束下的平滑路径规划。

通过闭式求解的方法求解只有等式约束没有不等式约束的Minimun snap路径轨迹生成问题

原理

解目标函数为Minimum Snap,多项式表达式为七次多项式
f ( t ) = ∑ i p i t i = p 7 t 7 + p 6 t 6 + p 5 t 5 + p 4 t 4 + p 3 t 3 + p 2 t 2 + p 1 t + p 0 f(t)=\sum\limits_{i}p_it^i=p_7t^7 + p_6t^6 + p_5t^5 + p_4t^4 + p_3t^3 + p_2t^2 + p_1t + p_0 f(t)=ipiti=p7t7+p6t6+p5t5+p4t4+p3t3+p2t2+p1t+p0
直接求解p_0、p_1、p_2、p_3、p_4、p_5、p_6、p_7,这些系数也就是优化参数,若直接求解这些系数可能会导致数值求解不稳定,若把优化项替换成p,v,a,j这些具有实际物理意义的变量的话则求解结果会更稳定。
通过一个mapping矩阵把多项式系数映射到p,v,a,j(即f(t),f’(t),f’’(t),f’’’(t))。
M j p j = d j (1) M_jp_j=d_j \tag{1} Mjpj=dj(1)
Mj就这这个映射矩阵,则:
p j = M j − 1 d j (2) p_j=M_j^{-1}d_j \tag{2} pj=Mj1dj(2)
其转置为:
p j T = d j T M j − T (3) p_j^T=d_j^TM_j^{-T} \tag{3} pjT=djTMjT(3)
J = [ p 1 ⋮ p M ] T [ Q 1 0 0 0 ⋱ 0 0 0 Q M ] [ p 1 ⋮ p M ] (4) J=\left[ \begin{matrix} p_1 \\ \vdots\\ p_M \\ \end{matrix} \right]^T \left[ \begin{matrix} Q_1 &0 &0 \\ 0 &\ddots &0\\ 0 &0 &Q_M \\ \end{matrix} \right] \left[ \begin{matrix} p_1 \\ \vdots\\ p_M \\ \end{matrix} \right] \tag{4} J=p1pMTQ1000000QMp1pM(4)
由把式(2)、(3)代入式(4),则
J = [ d 1 ⋮ d M ] T [ M 1 0 0 0 ⋱ 0 0 0 M M ] − T [ Q 1 0 0 0 ⋱ 0 0 0 Q M ] [ M 1 0 0 0 ⋱ 0 0 0 M M ] − 1 [ d 1 ⋮ d M ] (4) J=\left[ \begin{matrix} d_1 \\ \vdots\\ d_M \\ \end{matrix} \right]^T \left[ \begin{matrix} M_1 &0 &0 \\ 0 &\ddots &0\\ 0 &0 &M_M \\ \end{matrix} \right]^{-T} \left[ \begin{matrix} Q_1 &0 &0 \\ 0 &\ddots &0\\ 0 &0 &Q_M \\ \end{matrix} \right] \left[ \begin{matrix} M_1 &0 &0 \\ 0 &\ddots &0\\ 0 &0 &M_M \\ \end{matrix} \right]^{-1} \left[ \begin{matrix} d_1 \\ \vdots\\ d_M \\ \end{matrix} \right] \tag{4} J=d1dMTM1000000MMTQ1000000QMM1000000MM1d1dM(4)

映射矩阵Mj的求解方法

Mj代表第j段轨迹曲线所代表的多项式系数对应的映射矩阵。
即由这段轨迹p0、p1、p2、p3、p4、p5、p6、p7多项式系数可以找到一个M矩阵映射到该段轨迹首状态f(0)、f’(0)、f’’(0)、f’’’(0)和末状态f(t)、f’(t)、f’’(t)、f’’’(t)。若知道了首末状态也就能唯一确定多项式系数。

f ( t ) = p ( t ) = p 0 + p 1 t + p 2 t 2 + p 3 t 3 + p 4 t 4 + p 5 t 5 + p 6 t 6 + p 7 t 7 f(t)= p(t)=p_0 + p_1t +p_2t^2 + p_3t^3+ p_4t^4+ p_5t^5 + p_6t^6 +p_7t^7 f(t)=p(t)=p0+p1t+p2t2+p3t3+p4t4+

<think> 我们面对的问题是:用户想要解决程序 `/home/wzz/shenlan/slambook/ch5/imagebasics/-imagebasics` 不存在的问题。根据用户提供的引用信息,我们并没有直接相关的引用,但是我们可以根据常见的程序不存在错误的原因来分析和解决。 常见原因及解决方法: 1. **路径错误**:检查路径是否正确,特别是文件名前面多了一个横线`-`,这可能是打字错误。 - 建议:检查路径 `/home/wzz/shenlan/slambook/ch5/imagebasics/` 下是否存在名为 `imagebasics` 的可执行文件(注意横线可能是多余的)。如果实际文件名是 `imagebasics`,那么应该去掉多余的横线。 2. **程序未编译**:该程序可能是从源代码构建的,但尚未编译或编译失败。 - 建议:进入源代码目录(可能是`/home/wzz/shenlan/slambook/ch5/imagebasics/`),检查是否有编译成的二进制文件(如`imagebasics`)。如果没有,尝试重新编译(通常使用`cmake`和`make`命令)。 3. **编译后的程序不在当前目录**:有时编译后的程序可能被放在构建目录(如`build`)下,而不是源代码目录。 - 建议:检查是否有构建目录,并查看其中是否有成的可执行文件。 4. **环境变量问题**:如果程序不在系统的PATH环境变量中,可能需要使用绝对路径或相对路径来执行。 - 建议:使用绝对路径执行,比如:`/home/wzz/shenlan/slambook/ch5/imagebasics/imagebasics`(注意去掉多余的横线)或者如果当前在`imagebasics`目录下,使用`./imagebasics`。 5. **文件权限问题**:可执行文件没有执行权限。 - 建议:使用`chmod +x imagebasics`命令添加执行权限。 6. **依赖问题**:程序依赖的库不存在或路径不对。 - 建议:使用`ldd`命令检查程序的依赖库是否都能找到,如:`ldd imagebasics`。 根据引用[3]中提到的CMake错误信息,我们发现用户可能在使用CMake构建项目时遇到了问题。虽然错误信息不完全相同,但我们可以推测用户可能是在构建该程序时遇到了问题。引用[3]的错误提示是源目录和缓存目录不一致,需要重新运行CMake。因此,如果用户还没有成功编译程序,可以参考以下步骤: ### 重新构建程序的步骤 1. 进入项目目录(假设为`/home/wzz/shenlan/slambook/ch5/imagebasics/`)。 2. 创建一个构建目录(如`build`)并进入: ```bash mkdir build cd build ``` 3. 运行CMake成Makefile: ```bash cmake .. ``` 如果遇到引用[3]中的错误,可能是因为之前在其他目录运行过CMake,此时可以尝试删除缓存(删除整个build目录再重新创建)或者确保CMakeLists.txt在正确的目录。 4. 编译程序: ```bash make ``` 5. 编译成功后,可执行文件应该位于`build`目录下。然后可以运行: ```bash ./imagebasics # 注意在build目录下执行,或者根据实际成的可执行文件名 ``` ### 针对用户的具体路径 用户提供的路径是:`/home/wzz/shenlan/slambook/ch5/imagebasics/-imagebasics`。注意到文件名前面有一个多余的横线`-`,这很可能是输入错误。正确的路径应该是`/home/wzz/shenlan/slambook/ch5/imagebasics/imagebasics`。 ### 总结解决方法 1. **检查路径**:确认路径中是否有多余的字符(如横线`-`),并修正。 2. **重新编译**:如果程序不存在,按照上述构建步骤重新编译成可执行文件。 3. **检查权限**:确保可执行文件有执行权限。 4. **使用绝对路径或正确相对路径**:执行程序时使用正确的路径。 如果以上步骤不能解决问题,请提供更多信息,比如是否已经编译过以及编译时的错误信息。 §§相关问题§§ 1. 如何检查Linux中一个文件是否存在? 2. 如何使用CMake编译C++项目? 3. 如何给Linux文件添加执行权限? 4. 如何查看程序的依赖库是否存在? </think> ### 解决程序路径 `/home/wzz/shenlan/slambook/ch5/imagebasics/-imagebasics` 不存在的问题 #### 问题分析 路径中的多余横线 `-` 是典型错误。Linux 系统严格区分路径格式,额外的符号会导致路径无效。以下是关键排查点: 1. **路径格式错误** `/home/wzz/.../imagebasics/-imagebasics` 中的 `-imagebasics` 不符合命名规范。横线 `-` 在 Linux 路径中仅允许出现在文件名/目录名**内部**(如 `my-program`),不能作为起始字符[^1]。 2. **常见成因** - 手动输入路径时误加符号 - 脚本/代码中路径拼接错误 - 环境变量配置异常(如 `$PATH` 包含非法字符) #### 解决方法 ##### 1. 验证实际路径 通过终端确认文件真实路径: ```bash ls -l /home/wzz/shenlan/slambook/ch5/imagebasics ``` 检查输出中是否存在以下情况: - 可执行文件 `imagebasics`(不带横线) - 目录 `imagebasics` 包含可执行文件 - 类似命名的文件(如 `image_basics`) ##### 2. 修正路径格式 根据验证结果调整路径: - 若存在 `imagebasics` 文件 → 修正为: `/home/wzz/shenlan/slambook/ch5/imagebasics/imagebasics` - 若存在子目录 → 修正为: `/home/wzz/shenlan/slambook/ch5/imagebasics/bin/imagebasics` (假设可执行文件在 `bin` 目录) ##### 3. 重建构建缓存(针对编译型项目) 若涉及 CMake 项目(如 SLAM 书籍示例): ```bash cd /home/wzz/shenlan/slambook/ch5/imagebasics rm -rf build # 删除旧构建 mkdir build && cd build cmake .. # 重新成缓存 make # 重新编译 ``` 此操作解决 CMake 缓存与源目录不匹配问题[^3]。 ##### 4. 检查文件权限 确保文件具有可执行权限: ```bash chmod +x /home/wzz/shenlan/slambook/ch5/imagebasics/imagebasics ``` ##### 5. 排查环境变量 检查是否因 `$PATH` 配置导致解析错误: ```bash echo $PATH | grep ":" # 查看路径分隔符 env | grep -i "image" # 检查相关环境变量 ``` #### 典型修复案例 某用户执行 `./-myapp` 报错,实际文件名为 `myapp`。删除横线后成功运行: ```diff - ./-myapp + ./myapp ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值