【番外篇】【ROS第一讲】一、创建工作空间

本文介绍了ROS工作空间的结构,包括src、build、devel和install目录的用途。详细阐述了如何创建工作空间,包括编译、配置环境变量,特别是source命令的使用。此外,还讲解了创建功能包的步骤,强调了catkin_create_pkg命令的用法以及环境变量持久化的方法。最后,提到了工作空间的覆盖机制和查找功能包的顺序。
摘要由CSDN通过智能技术生成

一、工作空间

1.src:

放置所有功能包源码的空间

2.build:

所有在编译过程中产生的中间文件(使用的较少)

3.devel:

存放的所有编译完的可执行文件,环境变量的配置脚本(常用)

4.install:

和devel有点重复,存放的都是编译完成的可执行文件,ros2中把install和devel合并为同一个文件夹了.
一个常见的工作空间结构如下:

workspace_folder/
|—— src/
    |—— CMakeLists.txt
    |—— package_1/
        |—— CMakeLists.txt
        |—— package.xml
        |—— ......
    |—— package_2/
        |—— CMakeLists.txt
        |—— package.xml
        |—— ......
|—— devel/  
    |—— setup.bash
    |—— ......
|—— build/
    |—— ......
|—— install/

二、创建工作空间

1.工作空间的编译

依赖于catkin_make工具,他的底层也是基于cmake的,只不过是基于cmake做了一点封装。
新建的工作空间内进行编译,并不会编译任何的代码(因为还没有写代码),只是会生成一些固定的文件:
在这里插入图片描述

2.配置环境变量:

当编译完成你自己创建的工作空间之后,工作空间的根目录里会自动产生build和devel两个文件夹及其中的文件,在devel文件夹会产成几个setuo.*sh形式的环境变量设置脚本。为了使工作空间中的环境变量脚本生效,故我们需要用source命令来运行这些脚本文件;输入source devel/setup.bash,来把该工作空间的setup.bash文件添加到ros的环境中去,这样ros就知道你在操作该工作空间,之后ros就会从该工作空间找需要的包依赖之类的。
配置ROS功能包的路径,使得ROS能够找到相应的环境包在什么位置。
可以用source devel/setup.bash这句来配置环境变量。在当前中断下,输入该指令,就可以告诉ros系统相应的功能包在改catkin_ws工作空间中。
但是该指令仅在当前终端生效,另外开辟一个终端的时候就会失效。
所以推荐把该命令放在终端的配置文件中即可不用每次打开都运行一遍这个命令,配置文件的位置是在home的根目录下,是一个名为.bashrc的文件脚本。
运用以下命令:vi
打开该脚本,在最后一行增加以下命令(即环境变量,功能包的路径名称): source ~/catkin_ws/devel/setup.bash
保存之后,运行命令:source ~/.bashrc即可让刚才的配置在终端生效。

  • 可以用echo命令来打印出当前ros系统中的环境变量:echo $ROS_PACKAGE_PATH

在这里插入图片描述
可以看到当前有两个环境变量路径,一个是刚刚添加的,一个是安装ros系统之后添加的,终端要寻找ros相应的命令方法或者文件需要到第二个路径去找,因为第二个路径是ros系统安装的位置。

三、创建功能包

功能包中可以具体的写相关的代码,也要有各种包的依赖才行。创建功能包的时候可以写出这些具体的依赖包。
在catkin_ws\src目录下新建功能包:
可以看到在src目录下已经有了刚才创建的功能包:
在这里插入图片描述
点击进去之后可以看到已经初始化了该功能包:
在这里插入图片描述
这些都是默认会帮我们生成好的文件。CMakeLists文件和package文件这两个是很重要的。
CMakeLists文件会放置该功能包的一些编译选项。
package会放置描述功能包的一些具体信息,比如版本号,该功能包具体依赖哪些其他的功能包等等。
然后可以回到该工作空间的根目录,重新编译该工作空间,就可以看到编译反馈的信息已经找到了该包。
在这里插入图片描述

同一工作空间下,不可以有同名的功能包, 不同工作空间下可以有同名的功能包。
但是如果真的在不同工作空间下放着同名的功能包,ros 在运行某个功能包的时候,同名功能包运行的顺序是什么?这就要用到ros的overlaying机制了。即工作空间的覆盖。
可以用env命令来查找该系统中所有的环境变量。用env|grep ros来查找所有与ros相关的环境变量。
在这里插入图片描述
其中:ROS_PACKAGE_PATH=/home/geroge/catkin_ws/src:/opt/ros/melodic/share显示的就是ros在查找功能包的时候会去查找的两个路径。ros要查找功能包的时候会从这两个路径中依次开始查找,比如刚才建立的learning_ros功能包,如果他在第一个路径home/geroge/catkin_ws/src里面找到了这个功能包,就可以结束查找,运行该功能包中的相应节点了。
工作空间的路径依次在ROS PACKAGE PATH环境变量中记录
新设置的路径在ROS PACKAGE PATH中会自动放置在最前端
运行时,ROS会优先查找最前端的工作空间中是否存在指定的功能包
如果不存在,就顺序向后查找其他工作空间

【例】
先安装一个roscpp-turtorial包,然后我们看一下他怎么找到这个包:

sudo apt-get install ros-melodic-roscpp-tutorials

然后我们开始找这个包:

 rospack find roscpp_tutorials 

在这里插入图片描述
可以看到他已经在第二个路径中找到了该功能包。

四、完整的创建工作空间以及功能包的步骤如下:

1.创建工作空间

mkdir -p ~/catkin_ws/src        #使用系统命令创建工作空间目录
cd ~/catkin_ws/src
catkin_init_workspace           # ROS的工作空间初始化命令

创建完成后,在工作空间的根目录下使用catkin_make命令编译整个工作空间:

cd ~/catkin_ws                  # 回到工作空间的根目录
catkin_make                     # 编译整个工作空间

编译中,工作空间的根目录会自动产生devel和build两个文件夹即其中的文件。

编译完成后,在devel文件夹中已经产生几个setuo.*sh形式的环境变量设置脚本,使用source命令运行这些脚本,可以使工作空间中的环境变量生效。

source devel/setup.bash

检查环境变量是否生效:

echo $ROS_PACKAGE_PATH

如果打印的路径中包含当前工作空间中的路径,则说明环境变量设置成功。

注意:source命令设置的环境变量只能在当前终端生效,如果希望在所有终端生效,需要在终端配置文件中加入环境变量设置:echo
“source /home/xxx/catkin_ws/devel/setup.bash” >> ~/.bashrc

2.创建功能包

ROS不允许功能包的嵌套,多个功能包必须平行放置在代码空间(src)中。
ROS直接创建功能包的命令catkin_create_pkg,用法:

catkin_create_pkg <package_name> [depend1] [depend2] [depend3]

即需要输入功能包名称和所依赖的其它功能包。

进入代码空间,创建功能包:

cd ~/catkin_ws/src
catkin_create_pkg leraning_communication std_msgs rospy roscpp

回到工作空间根目录进行编译,设置环境变量:

cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash

一个功能包就这样创建完成了。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兜兜里有好多糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值