ROS 创建工作空间和软件包

1 背景知识

1.1 工作空间是什么

存放ROS文件的地方,工作空间可以放多个软件包。

1.2 软件包是什么

软件包是ROS代码的软件组织单元,每个软件包都可以包含程序库、可执行文件、脚本或其他构件。工作空间和软件包的关系类比公司和部门。

1.3 软件包的构成

  1. 符合catkin规范的package.xml文件:提供有关该软件包的信息,包括作者信息,版权,依赖关系等。
  2. catkin版本的CMakeLists.txt文件:描述Package的各种编译规则, 需要的源文件、库文件、搜索路径等。
  3. 必须有自己的独立目录,不能有嵌套的或者多个软件包存在

2 创建软件包的过程

创建catkin工作空间 → 创建并编译catkin软件包 → 安装软件包

2.1 创建catkin工作空间

2.1.1 创建工作空间并编译
打开一个终端,输入指令

$ mkdir -p ~/catkin_ws/src           
$ cd ~/catkin_ws/
$ catkin_make               

mkdir:新建一个目录
参数 -p:递归建立目录
~:当前用户所在的主文件夹
catkin_w:工作空间名,自定义
src:存放软件包

catkin_make : 是一种在工作空间中构建代码的便捷工具。catkin_make将编译src目录下所有的package。
catkin编译工作流程如下:

  1. 先在工作空间catkin_ws/src/下,递归地查找其中每一个ROS package
  2. catkin(cmake)编译系统依据CMakeLists.txt文件,生成makefiles(放在catkin_ws/build/ 目录下)
  3. 然后make根据makefiles文件,编译生成可执行文件(放在catkin_ws/devel/ 目录下)

2.1.2 激活环境变量
激活环境变量是为了让ROS识别到当前空间:

$  source devel/setup.bash   

source:实现将 workspace 的信息载入系统环境变量。

查看是否激活环境变量

$ echo $ROS_PACKAGE_PATH
/home/<username>/catkin_ws/src:/opt/ros/<distro>/share

在catkin_make 命令后,工作空间catkin_ws下有3个子目录 :

  1. devel: 存放编译之后的目标文件和可执行文件。此目录下的特殊文件setup.*sh。
  2. build: 存放cmake & catkin 缓存和中间文件。
  3. src:存放软件包
    3.1 CMakeLists.txt文件: 生成makefiles

2.2 创建并编译软件包

2.2.1 创建软件包
进入src目录,创建软件包:

$ cd ~/catkin_ws/src
$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
Created file beginner_tutorials/package.xml
Created file beginner_tutorials/CMakeLists.txt
Created folder beginner_tutorials/include/beginner_tutorials
Created folder beginner_tutorials/src
Successfully created files in /home/gyc/catkin_ws/src/beginner_tutorials. Please adjust the values in package.xml.

catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
[depend1] [depend2] [depend3] 是软件包的依赖,将填写进package.xml文件和CMakeLists.txt 文件中

在catkin_create_pkg 命令后,src目录下,有与软件包相对应的文件夹:

  1. devel
  2. build
  3. src
    3.1 CMakeLists.txt文件
    3.2 beginner_tutorials文件夹
      3.2.1 include 文件夹 :头文件
      3.2.2 src 文件夹 :源文件
      3.2.3 package.xml文件 :说明包信息
      3.2.3 CMakeLists.txt 文件:包的编译规则

2.2.2 编译软件包
在工作空间编译后,重新source环境变量:

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

source devel/setup.bash 指令只能让“当前”终端终端能够找到软件包,新终端中无效。
一劳永逸的法子:
echo “source ~/catkin_ws/devel/setup.bash” >> ~/.bashrc

2.3 安装软件包

$ catkin_make install

验证软件包是否安装成功的三种方式:

 $ rosls beginner_tutorials/
 CMakeLists.txt  include  package.xml  src

 $ rospack find beginner_tutorials
 /home/用户名/catkin_ws/src/beginner_tutorials
 
 $ rospack  depends1 beginner_tutorials
 roscpp
 rospy
 std_msgs

3 总结梳理

3.1 创建工作空间和软件包的过程

  1. 创建工作空间
    1.1 mkdir -p ~/catkin_ws/src
    1.2 cd catkin_ws
    1.3 catkin_make
    1.4 source devel/setup.bash
  2. 创建软件包
    2.1 cd /src
    2.2 catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
    2.3 cd ~/catkin_ws
    2.3 source devel/setup.bash
  3. 安装软件包
    catkin_make install

3.2 catkin_ws 文件夹下的目录结构
在这里插入图片描述


3.3 指令总结

rospack 用于对软件包的操作
> rospack find <package name> 返回软件包的所在路径
> rospack list 列出所有软件包
> rospack depends1 <package name> 查看软件包的一级依赖
> rospack depends <package name> 查看软件包的所有依赖

rosls <package name> 列举软件包下的文件信息

catkin
> catkin_make 编译当前文件夹下所有软件包
> catkin_create_pkg <package name> [depends] 创建软件包


4 可能会出现的问题

问题1. cannot find the package ‘beginner_tutorials’

创建软件包后,打开新终端,找不到新建的软件包。

原因:编译后的工作空间没有在ros框架的工作路径中

彻底解决方法:

$ vim ~/.bashrc

在.bashrc文件中添加: source ~/工作空间/devel/setup.bash 后,退出对文件的编辑。

$ source ~/.bashrc

问题2. the rosdep view is empty:call ‘sudo rosdep init’ and ‘rosdep update’

报错如下:

$ rospack depend beginner_tutorials
[rospack] Error :the rosdep view is empty:call 'sudo rosdep init' and 'rosdep update'

$sudo rosdep init
Error :cannot download default source list form:
..................

解决办法:
本文之后,世上再无rosdep更新失败问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值