1.概述
简单说一下ROS中其他项目可工作,但是ROS不能找到可执行文件时的处理办法,希望额给大家提供帮助,同时供自己以后参考.
2.新建工作空间
命令如下
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ~/catkin_ws/
catkin_make
source devel/setup.bash
查看ROS_PACKAGE_PATH,如果没有数据可以重启电脑再试试
~/catkin_slam$ echo $ROS_PACKAGE_PATH
/home/robots/catkin_slam/src:/opt/ros/kinetic/share
更改path的方法
sudo gedit ~/.bashrc
在文件末尾添加export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/工作空间路径/src
3.CMakeLists文件
ROS生成不了可执行文件,先说原因:CMakeLists文件出现问题.
保证CMakeLists文件中内容按照下面的顺序排列
find_package()
catkin_package()
include_directories()
add_executable()
target_link_libraries()
特别注意find_package,catkin_package.
4.错误示例
我出现错误时的CMakeLists文件部分内容为
find_package(catkin REQUIRED COMPONENTS
roscpp
std_msgs
tf
)
include_directories(
${catkin_INCLUDE_DIRS}
)
link_directories(
)
add_executable(tf_test_bin src/mysrc.cpp)
target_link_libraries(tf_test_bin ${catkin_LIBRARIES})
在catkin_make中提示的信息如下,没有link的过程.
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- ~~ traversing 1 packages in topological order:
-- ~~ - tf_test
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- +++ processing catkin package: 'tf_test'
-- ==> add_subdirectory(tf_test)
-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
-- Configuring done
-- Generating done
-- Build files have been written to: /home/robots/catkin_slam/build
####
#### Running command: "make -j6 -l6" in "/home/robots/catkin_slam/build"
####
[100%] Built target tf_test_bin
运行时会报错
~/catkin_slam$ rosrun tf_test tf_test_bin
[rosrun] Couldn't find executable named tf_test_bin below /home/robots/catkin_slam/src/tf_test
5.正确示例
改正后的CMakeLists文件为
find_package(catkin REQUIRED COMPONENTS
roscpp
std_msgs
tf
)
catkin_package(
)
include_directories(
${catkin_INCLUDE_DIRS}
)
link_directories(
)
add_executable(tf_test_bin src/mysrc.cpp)
target_link_libraries(tf_test_bin ${catkin_LIBRARIES})
这个时候的catkin_make提示信息如下,会有一个link过程
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- ~~ traversing 1 packages in topological order:
-- ~~ - tf_test
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- +++ processing catkin package: 'tf_test'
-- ==> add_subdirectory(tf_test)
-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
-- Configuring done
-- Generating done
-- Build files have been written to: /home/robots/catkin_slam/build
####
#### Running command: "make -j6 -l6" in "/home/robots/catkin_slam/build"
####
[ 50%] Linking CXX executable /home/robots/catkin_slam/devel/lib/tf_test/tf_test_bin
[100%] Built target tf_test_bin
然后就可以运行了.
6.总结
CMakeList文件一定要好好写,如果出问题一般是这里的问题.catkin_package
建议使用之前已经通过的CMakeList修改,不然容易出错,哈哈.
7.参考链接
ROS_PACKAGE_PATH
ROS中编译通过但是遇到可执行文件找不到的问题
ros编译出现问题,编译成功无法运行节点
ROS编译成功但无法运行节点的问题及解决
本文介绍了当ROS项目能成功编译但无法运行节点时的解决方法。主要内容包括检查ROS_PACKAGE_PATH、新建工作空间的步骤、CMakeLists文件的正确配置,并通过错误和正确示例对比说明问题所在。总结强调CMakeLists文件的重要性,建议参考已通过的文件进行修改。
3149

被折叠的 条评论
为什么被折叠?



