使用情况:在一个已经存在的ROS项目中添加Rosbag的图像读取:
操作:按照之前的使用方法,分别在package.xml中以及CMakeList.txt的catkin_package() 中添加了对应的包,但是编译时还是出现了未定义的引用;
解决:
这里主要说一下解决的方法:
首先对于cv_bridge中函数的具体使用方法,大家可以参考博客:CV_Bridge的使用,这里对使用该博客后出现的问题做一个补充;
首先在使用Ros时,如果需要用到新的package,则需要在两个地方添加,1.在该工程对应的package.xml中添加
以cv_bridge为例:
<buildtool_depend>catkin</buildtool_depend>
<build_depend>cmake_modules</build_depend>
<build_depend>roscpp</build_depend>
<build_depend>sensor_msgs</build_depend>
<build_depend>std_msgs</build_depend>
<build_depend>cv_bridge</build_depend>
<build_depend>image_transport</build_depend>
<run_depend>cmake_modules</run_depend>
<run_depend>roscpp</run_depend>
<run_depend>cv_bridge</run_depend>
<run_depend>sensor_msgs</run_depend>
<run_depend>std_msgs</run_depend>
<run_depend>image_transport</run_depend>
后面四个package都是新添加的,个人理解,这一步的添加和在CMakeLists.txt中的catkin_package()中添加是一个意思,都是方便catkin在编译时能够找到对应的package;同时如果我们使用的是rosbuild,甚至这里不需要catkin_package();
但如果我们使用的时不同的build方法(区分的方式就是在建立可执行文件的时候,用的是rosbuild_add_executable还是add_executable),这时还需要第二步的添加:也就是在findpackage()中将这几个package的名字添加进去,如:
find_package(catkin REQUIRED COMPONENTS
cmake_modules
roscpp
cv_bridge
sensor_msgs
image_transport
std_msgs
)
这样才能编译通过;