您的位置:首页 > 编程语言 > C语言/C++

cmake,ros,c++和opencv经常出现的问题总结

2016-07-14 14:55 756 查看
本篇博客目的是介绍一些比较容易犯错或是比较重要的知识点。即帮助博主自己梳理,也共享给遇到同样问题的人。

这篇博客会一直更新下去。

一:opencv

(1)inv()求逆、t()求转置、determinant()求行列式、norm()求范数、cross()求两个向量的叉乘、dot()求两个向量的点乘。

二:cmake

(1) 如何生成.so库文件

在CMakeLists.txt里面填入

ADD_LIBRARY( keyop_core keyop_core.cpp )

TARGET_LINK_LIBRARIES( keyop_core

${catkin_LIBRARIES} )

就会把keyop_core.cpp生成一个libkeyop_core.so库。以后直接调用就可以了。

(2)如何调用.so库文件

<1>在CMakeLists.txt里面填入

set(LIBS

${OpenCV_LIBS}

${EIGEN3_LIBS}

${Pangolin_LIBRARIES}

${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so

${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so

${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so

${PROJECT_SOURCE_DIR}/../../../lib/libkeyop_core.so

)

以上类似${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libkeyop_core.so就是.so 文件的路径

<2>或是

在CMakeLists.txt里面填入

ADD_EXECUTABLE( visualOdometry visualOdometry.cpp)

TARGET_LINK_LIBRARIES( visualOdometry

keyop_core #重点在这

${OpenCV_LIBS}

${PCL_LIBRARIES} )

(2)ros 编译的路径问题

《1》rosrun的意义

rosrun 可执行二进制所在包名 可执行二进制名

.basher文件里面可以更改rosrun的路径例如:

source /opt/ros/indigo/setup.bash

source ~/catkin_ws/devel/setup.bash

以上是你ros工作空间的路径,那么你rosrun的起点就在catkin_ws/devel下,devel里面都是你catkin_make生成的可执行二进制包

若果你想在工作空间外运行rosrun或是roslaunch那么你要更改路径:

例如:export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/liqingfeng/ORB_SLAM2/Examples/ROS

那么你rosrun的就是在/home/liqingfeng/ORB_SLAM2/Examples/ROS路径下开始运行了。

(3)

如何把catkin_make里的CMakLists.txt文件改成cmake .. make能够编译的CMakLists.txt文件

在catkin_make的CMakLists.txt同文件夹下有个.xml文件,这里面的依赖项一定要放到你cmake ..的CMakLists.txt文件下,下面是例子:

add_library(${PROJECT_NAME} SHARED

src/System.cc

src/Tracking.cc

src/LocalMapping.cc

src/LoopClosing.cc

src/ORBextractor.cc

src/ORBmatcher.cc

src/FrameDrawer.cc

src/Converter.cc

src/MapPoint.cc

src/KeyFrame.cc

src/Map.cc

src/MapDrawer.cc

src/Optimizer.cc

src/PnPsolver.cc

src/Frame.cc

src/KeyFrameDatabase.cc

src/Sim3Solver.cc

src/Initializer.cc

src/Viewer.cc

src/keyop_core.cpp //我添加的一个基于ros的程序

)

add_dependencies(ORB_SLAM2 kobuki_msgs_gencpp roscpp tf sensor_msgs image_transport cv_bridge)//这个是src/keyop_core.cpp.xml里面的依赖项

#TARGET_LINK_LIBRARIES( keyop_core

# ${catkin_LIBRARIES} )

target_link_libraries(${PROJECT_NAME}

${OpenCV_LIBS}

${EIGEN3_LIBS}

${PROJECT_SOURCE_DIR}/Thirdparty/DBoW2/lib/libDBoW2.so

${Pangolin_LIBRARIES}

${PROJECT_SOURCE_DIR}/Thirdparty/g2o/lib/libg2o.so

${Boost_LIBRARIES}

${catkin_LIBRARIES}

)

三:ubuntu常用知识点

(1):如何修改ect或usr里面的文档

例如改写/etc/profile,则:

打开你的terminal,输入sudo gedit /etc/profile

四:C++

(1)核心已转储问题

:空地址

:实参变量和形参变量不一致

:没有初始化就判断它的语句(bool a if(a==true))

:在.h里定义数组并初始化

:vector使用时没有限定范围

vector<vector<int>> maze;

for(size_t i=0;i<20;i++)

{

for(size_t j=0;j<20;j++)

{

maze[i][j]= obstacle_grid[i][j];

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: