在Ubuntu18.04系统上,Ros项目编译后,可执行文件找不到

问题描述:

  在学习Ros系统的过程中,使用c++语言编写项目之后需要对项目进行编译才能运行。有时候会出现这种情况:使用source指令导入环境变量,但执行rosrun指令运行就报错

zg@zg-virtual-machine:~/Project/Receive_lidar$ source ./devel/setup.bash 
zg@zg-virtual-machine:~/Project/Receive_lidar$ rosrun lidar_test lidarTest_node
[rosrun] Couldn't find executable named lidarTest_node below /home/zg/Project/Receive_lidar/src/lidar_test

原因分析:

  这是由于项目编译之后,可执行文件不在devel/lib/your_project_name路径下,我们可以来到devel目录下,使用查找功能查找对应的可执行文件名,我的项目编译完后,可执行文件落在了build路径下(大多数都是这种情况吧)
在这里插入图片描述


解决方案:

  查阅过相关问题的解决办法,有的说是包下面的CMakeLists.txt文件需要加上catkin_package()就可以,有的说需要将catkin_package()放在add_executable之前,我试过了都没效果
  最终的解决办法是,设定生成路径,在CMakeLists.txt文件里添加以下指令即可,位置任意:

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CATKIN_DEVEL_PREFIX}/lib/${PROJECT_NAME})

  最终我的CMakeLists.txt内容如下,可供参考:

cmake_minimum_required(VERSION 3.0.2)
project(lidar_test)

find_package(catkin REQUIRED COMPONENTS
roscpp
std_msgs
)
find_package(PCL 1.9.1 REQUIRED)
 
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
# target_link_libraries(lidarTest_node ${PCL_LIBRARIES})

# 指定可执行文件生成在devel目录下
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CATKIN_DEVEL_PREFIX}/lib/${PROJECT_NAME})
catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES lidar_test
#  CATKIN_DEPENDS roscpp std_msgs
#  DEPENDS system_lib
)
add_executable(lidarTest_node src/lidarTest_node.cpp)
# 如果依赖多个库,需按照以下格式,将多个库并列排开,如${catkin_LIBRARIES} ${PCL_LIBRARIES}
# 若分成多句target_link_libraries,如:target_link_libraries(lidarTest_node ${catkin_LIBRARIES})
# target_link_libraries(lidarTest_node ${PCL_LIBRARIES})会报错
target_link_libraries(lidarTest_node ${catkin_LIBRARIES} ${PCL_LIBRARIES})


###########
## Build ##
###########

## Specify additional locations of header files
## Your package locations should be listed before other locations
include_directories(
# include
  ${catkin_INCLUDE_DIRS}
)

  执行编译,在对应目录下可查看到对应的可执行文件,完结撒花。
在这里插入图片描述

zg@zg-virtual-machine:~/Project/Receive_lidar$ rosrun lidar_test lidarTest_node  

  因为没有连接雷达,没有订阅到相关话题,所以看不到数据输出

### VINS-Fusion在Ubuntu 18.04上的安装与配置 #### ROS环境搭建 为了使VINS-Fusion正常运作,在Ubuntu 18.04环境中需先部署ROS(Robot Operating System)。这一步骤至关重要,因为VINS-Fusion依赖于ROS框架来处理传感器数据以及实现多线程计算等功能[^1]。 当遇到`sudo rosdep init`命令执行失败的情况时,可能是由于网络连接不稳定或者GitHub服务器暂时不可访问所引起的。此时可以尝试更换DNS设置为公共DNS服务提供商如Google DNS (8.8.8.8),或是等待一段时间后再试一次该操作[^3]。 #### 创建ROS工作区并初始化 建立个人的工作空间有助于管理项目文件,并简化后续编译流程。具体做法如下: ```bash mkdir -p ~/catkfu_ws/src cd ~/catkfu_ws/src catkin_init_workspace ``` 上述指令会在用户的家目录下创建名为`catkfu_ws`的工作空间,并对其进行初始化以便能够容纳更多软件包[^5]。 #### 获取源码及编译 通过Git工具克隆官方仓库至本地计算机中: ```bash git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git ``` 接着切换回上级目录进行编译过程: ```bash cd .. catkin_make source ~/catkfu_ws/devel/setup.bash ``` 这里使用Catkin构建系统来进行C++代码的编译链接等工作;最后一条语句则是为了让当前终端会话识别新生成的目标程序路径。 #### 修改Bash配置文件 为了避免每次启动新的Shell都要手动加载环境变量,可将上面提到过的`sourcing setup.bash`加入到`.bashrc`脚本里去自动执行它: ```bash echo "source ~/catkfu_ws/devel/setup.bash" >> ~/.bashrc ``` 这样无论何时开启一个新的终端窗口都会自动应用这些更改。 #### 下载测试数据集 对于希望验证算法效果的研究人员来说,获取适当的数据样本是非常必要的。可以从网上到公开可用的数据集比如EuRoC MAV Dataset用于实验目的。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值