ROS编译成功 无法运行节点

ROS编译成功但无法运行节点的问题及解决
本文介绍了当ROS项目能成功编译但无法运行节点时的解决方法。主要内容包括检查ROS_PACKAGE_PATH、新建工作空间的步骤、CMakeLists文件的正确配置,并通过错误和正确示例对比说明问题所在。总结强调CMakeLists文件的重要性,建议参考已通过的文件进行修改。

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_packagecatkin_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编译出现问题,编译成功无法运行节点

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值