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];
}
}
这篇博客会一直更新下去。
一: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];
}
}
相关文章推荐
- C++异常 异常机制
- [LeetCode] 8. String to Integer (atoi)
- Cpp环境【NOIP201307】货车运输
- Power of Three
- NOIP 2013 - Day 1 货车运输 重庆一中高2018级竞赛班第二次测试 2016.7.13 Problem 4
- c/c++二位数组malloc和free
- fgets在循环中使用出错?!
- C++输入输出流
- C++异常 返回错误码
- USACO 月赛 劣质的草 (重庆一中高2018级信息学竞赛测验2) 解题报告
- c语言==字符串的键入,遍历,输出(6)
- 虚函数和纯虚函数的区别
- Power of Four
- C++异常 调用abort()
- C++的四种强制类型转换
- Cpp环境【Usaco 2008】劣草岛屿
- C++模板中的嵌套
- 结构体在c和C++中的区别
- ubuntu升级C++11编写多线程程序
- Reverse Vowels of a String