为什么编译好的ros功能包运行终端tab检索不到/ Error: package ‘***‘ not found这一问题理解(保姆级教程)

项目场景:

        ??????????当你新建一个ROS功能包后,打开终端运行这个功能包,rosrun/roslaunch等命令,终端显示找不到文件/过程无法自动补全???????


问题基础

1. bashrc文件作用理解(位于根目录下  ~/.bashrc)

转载:Linux 的.bashrc 文件详解_冠切云之崔嵬的博客-CSDN博客_linux bashrc


linux下的export和source命令_awhuter的博客-CSDN博客_export命令1、source命令source ~/.../../filesource命令作用:source是bash shell的内置命令,在当前shell下读取并执行“file中的命令”通常用于重新执行刚修改完的初始化文档。如在linux中修改了./bashrc启动初始化文件,这时可以用source命令重新执行,使得修改生效而不用注销再次登录。与./直接执行脚本不同,直接执行是在子shell运行的,结果并没有反映到父shell中。source是直接在本shell中运行的,不会启动一个新的shell,所以脚https://blog.csdn.net/qq_41253960/article/details/120286745?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166865380516782390518360%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166865380516782390518360&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-1-120286745-null-null.142%5Ev63%5Econtrol,201%5Ev3%5Econtrol_2,213%5Ev2%5Et3_esquery_v1&utm_term=source%E5%91%BD%E4%BB%A4&spm=1018.2226.3001.4187source命令和export命令的作用和理解)

重点:

        bash 是一个能解释你输入进终端程序的东西,并且基于你的输入来运行命令一定程度上支持命令定制。(因此它有相关的书写格式和命令,看看上面的链接2)

        bashrc文件在每次启动终端时都会加载文件内的内容,里面存储并且每次打开终端都会加载一次bashrc文件内你的终端配置和环境变量

        (如果该终端有改动bashrc文件,就可通过一下命令重新载入环境变量等!!!!!)

source ~/.bashrc

2. ROS的基础设置

        在安装ROS过程中,就需要我们在bashrc文件内写入

source /opt/ROS......(具体命令忘了)

        这样在打开终端运行一些ros的相关命令,如:roscore等命令时,就可以自动补全,因为ROS相关的程序执行文件已经被检索到了。


原因分析:

        假设我们现在创建了一个ROS功能包,名字叫 test !

        根据上面对bashrc文件及ROS安装一些步骤理解,终端内无法找到我们新建的功能包,说明功能包没有加载进环境变量中,那么我们就可以通过编译完成的功能包下 test/devel/setup.bash文件把功能包加载进环境变量。

即:(在你编译成功后的功能包内)

source devel/setup.bash

但这只会在当前的终端内生效,只能在当前的终端内检索到,新建一个终端就没有啦!


解决方案:

对于常用的ros功能包,不可能每次都去敲这个命令吧?

因此就可以将上面这个命令直接写入 ~/.bashrc下的这个文件中,使其每次打开终端后都会自动载入bahsrc文件的内容,自然就可以做到每次打开bashrc文件都能自动识别到你的ROS功能包在哪儿啦!

        更加详细写入bashrc文件的过程可以参考:

以下为详细截图:

 上述图片转载自:问题解决-----解决ROS程序注册(source devel/setup.bash)只在当前终端生效的问题_陈一月的编程岁月的博客-CSDN博客_ros如何实现自动注册在进行ROS的嵌入式编程的时候,每次程序编写完成,都需要进行编译,这是ROS嵌入式开发的必要步骤,但还有一步,比较繁琐,觉得可以省略,就是对程序的注册,一个编写的程序,在ROS环境下,只有通过注册才能对程序进行运行,这样就很繁琐那么、有没有办法可以让我们不去操作这一步呢?让每次打开终端,系统就对我们程序进行注册,本次博客,林君学长就带大家解决程序注册的问题一、问题描述1、新建终端,没有进行程...https://blog.csdn.net/qq_42451251/article/details/105046317?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166865398816782425117100%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=166865398816782425117100&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-105046317-null-null.142%5Ev63%5Econtrol,201%5Ev3%5Econtrol_2,213%5Ev2%5Et3_esquery_v1&utm_term=devel%2Fsetup.bash&spm=1018.2226.3001.4187

新问题:为什么在~/.bashrc文件中,添加了source命令还是不能检索到,还是不能添加到环境变量中?

        原因:source是有顺序要求的!!!

        如果在 `~/.bashrc` 文件中存在其他 `source` 命令,那么这些命令可能会定义一些环境变量或别名,或者执行其他必要的初始化操作。如果你在这些 `source` 命令之前添加了新的 `source` 命令,那么在新的 `source` 命令执行之前,这些环境变量、别名或初始化操作可能还没有生效。

例如,假设你的 `~/.bashrc` 文件包含以下两个 `source` 命令:

```bash
source /opt/ros/melodic/setup.bash
source /path/to/some/other/file
```

如果你在这两个命令之间添加了一个新的 `source` 命令:

```bash
source /path/to/my/file
```

那么在新的 `source` 命令执行之前,ROS环境变量可能还没有设置,别名可能还没有定义,或者其他必要的初始化操作可能还没有完成。这可能会导致ROS功能包无法正确地启动或运行。因此,为了确保所有的ROS功能包都能正确地运行,你应该将新的 `source` 命令添加到其他 `source` 命令的下面,以确保它们都能够正确地生效。

例如,你应该将新的 `source` 命令添加到其他 `source` 命令的下面,以确保所有ROS功能包都能够正确地访问ROS环境变量:

```bash
source /opt/ros/melodic/setup.bash
source /path/to/some/other/file
source /path/to/my/file
```

这样,所有必要的ROS环境变量和其他初始化操作都可以在新的 `source` 命令执行之前完成,从而确保所有的ROS功能包都能够正确地运行。

请注意,如果你在 `~/.bashrc` 文件中有多个 `source` 命令,你应该按照正确的顺序添加它们,以确保所有必要的初始化操作都可以正确地完成。通常情况下,ROS功能包的 `setup.bash` 或 `setup.zsh` 文件应该是第一个被source的文件,因为它们定义了必要的ROS环境变量和其他初始化操作。其他 `source` 命令应该按照它们的依赖性顺序添加,以确保它们都能够正确地生效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值