长望笔记
5.31
今天上午尝试修改opt_utils库,通过添加中间变量的方式成功解决之前的“返回右值”的问题,但对程序实际运行效果的影响未知。
下午尝试编译internal_grid_map包,出现报错:
‘const Matrix {aka const class Eigen::Matrix<float, -1, -1>}’ has no member named ‘minCoeffOfFinites’
经过查询,发现该函数其实存在,存在于include/grid_map_core/eigen_plugins/DenseBasePlugin.hpp中,但是没有被相关头文件包含过,非常奇怪,在查富耕的帮助下,成功定向问题
在github中的源码中,CMakeLists中存在这样一个语句:
include(cmake/${PROJECT_NAME}-extras.cmake)
其中的.cmake文件指定了DenseBasePlugin.hpp作为Eigen库的plugin存在,从而才能将该头文件连接到编译过程之中。
通过将cmake文件夹复制到对应位置,并在CMakeLists中添加相关语句,成功解决该问题。
6.1
在昨天解决Eigen库的plugin链接问题之后,今编译internal_grid_map时还是遇到了问题
error: expected type-specifier operator cv::_InputOutputArray() {
创建测试用工作空间,发现问题出现原因是与opencv库的链接问题,但是在编译过程中,是可以找到opencv4的,而这种报错只会出现在opencv2中,经过检查发现,是由于include_dir中,包含了opencv2的头文件,导致编译时重新定向到了opencv2的头文件中,出现了该错误,删除include文件夹中的opencv2相关文件,成功解决该问题,成功编译internal_grid_map包。
下午编译transform_tools时遇到问题:不能使用tf包,但是需要使用到四元数和欧拉角的转换,可以使用Eigen自带的库完成相关任务。
具体流程可以参考CSDN上的教程:
在slam中经常用到的四种描述机器人orientation的变量,他们之间可以相互转化,使用Eigen库可以很容易的做到这一点,需要特别关注的是:欧拉角与其余量之间的转换关系:
1)首先要明确的是,必须要明确欧拉角的旋转次序,你可以选择RPY、YPR等方式,在相同的orientation下,旋转次序会影响欧拉角三分量的数值,也会影响欧拉角与其他旋转表示的转换关系,但是不会影响转换结果;也就是说,旋转次序是你自己根据习惯选择的,在把欧拉角转换为其他形式时,也要根据选择的次序使用对应的转换关系;
2)欧拉角转换为其他表示,一般使用旋转向量(角轴)作为过渡,即,首先将欧拉角三个分量变成角轴,再将三个角轴乘在一起(乘的顺序要和旋转次序相匹配)得到角轴,使用角轴可以很方便的过渡到旋转矩阵或四元数;
3)其他表示转换为欧拉角,使用的是eulerAngles(0,1,2)方法,其中012表示转换得到的欧拉角向量的旋转次序是XYZ即RPY,如果想得到YPR格式的欧拉角,使用eulerAngles(2,1,0);即可。