一、ROS导航

1.rospack = ros + pack(age),通过cpp文件找功能包。
例子:

$ rospack find roscpp
/opt/ros/kinetic/share/roscpp

2.roscd = ros + cd,通过节点或包名,可以直接进入到所在的功能包目录

1
2
3
$ roscd roscpp/cmake
$ pwd
YOUR_INSTALL_PATH/share/roscpp/cmake

3.roscd log
运行日志,没有运行过,返回文件不存在
4.rosls = ros + ls,查看功能包文件。

1
2
3
显示learning_communication功能包下的文件
$ rosls learning_communication
action CMakeLists.txt include msg package.xml src srv

二、创建工作空间和ROS包

1.工作空间结构
workspace_folder/
  bulid/
  devel/
  src/
     CMakeLists.txt
     package_1/
          CMakeLists.txt
           package.xml
        …
     package_n/
          CMakeLists.txt
           package.xml
ROS包简单结构
my_package/
      CMakeLists.txt
      package.xml
2.创建工作环境(创建名为catkin_ws的工作空间)

mkdir -p ~/catkin_ws/src
cd catkin_ws/src
catkin_init_workspace
cd ..
catkin_make

编译结束后会出现两个文件夹,build文件夹是构建空间的默认位置,并且调用cmake和make来配置和构建软件包。devel文件夹是devel空间的默认位置,这是可执行文件和库在安装软件包之前的位置。

$ ls  
build
devel
src

3.创建功能包(依赖std_msgs rospy roscpp,创建好后文件里有package.xml和CMakeLists.txt)

1
2
3
4
//创建文件夹
$ mkdir ~/catkin_ws/src
//创建beginner_tutorials功能包,
$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

4.创建工作空间和安装文件
添加自己创建的bash文件 source ~/catkin_ws/devel/setup.bash,其他终端也可以用自己新创建的工作空间

1
2
3
vi ~/.bashrc  
source ~/catkin_ws/devel/setup.bash
//添加到最后一行

查看自己的工作空间是否添加到ROS功能包路径里

echo $ROS_PACKAGE_PATH 

5.查看依赖(选看)
显示功能包依赖,运行前保证已经添加到ROS功能包路径

$ rospack depends1 beginner_tutorials  
roscpp
rospy
std_msgs

依赖信息储存在package.xml中

$ roscd beginner_tutorials
$ cat package.xml
<package format="2">
...
  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>roscpp</build_depend>
  <build_depend>rospy</build_depend>
  <build_depend>std_msgs</build_depend>
...
</package>

查看rospy的依赖(间接依赖)

$ rospack depends1 rospy 
genpy
roscpp
rosgraph
rosgraph_msgs
roslib
std_msgs

显示所有的间接依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$ rospack depends beginner_tutorials 
cpp_common
rostime
roscpp_traits
roscpp_serialization
catkin
genmsg
genpy
message_runtime
gencpp
geneus
gennodejs
genlisp
message_generation
rosbuild
rosconsole
std_msgs
rosgraph_msgs
xmlrpcpp
roscpp
rosgraph
ros_environment
rospack
roslib
rospy

6.自定义包(一行一行解释package.xml文件)
第一个数字是行号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
5  <description>The beginner_tutorials package</description>  
//描述标签,说明功能包的名字版本

7 <!-- One maintainer tag required, multiple allowed, one person per tag --> //维护者标签,至少要有一个维护着的联系方式要有
8 <!-- Example: -->
9 <!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->
10 <maintainer email="user@todo.todo">user</maintainer>

12 <!-- One license tag required, multiple allowed, one license per tag --> //许可证标签,您应该选择许可证并在此处填写。
13 <!-- Commonly used license strings: -->
14 <!-- BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->一些常见的开源许可证是BSD,MIT,Boost软件许可证,GPLv2,GPLv3,LGPLv2.1和LGPLv3。您可以在开源倡议中了解其中的几个。对于本教程,我们将使用BSD许可证,因为其余的核心ROS组件已经使用它:
15 <license>TODO</license>
// 对于本教程,我们将使用BSD许可证,因为其余的核心ROS组件已经使用它

27 <!-- The *_depend tags are used to specify dependencies -->
// 依赖标签,下一组标记描述了包的依赖关系。

依赖项分为
build_depend,buildtool_depend,exec_depend,test_depend。
有关这些标记的更详细说明,请参阅有关Catkin依赖关系的文档。
由于我们将std_msgs,roscpp和rospy作为catkin_create_pkg的参数传递,因此依赖关系将如下所示:
28 <!-- Dependencies can be catkin packages or system dependencies -->
29 <!-- Examples: -->
30 <!-- Use build_depend for packages you need at compile time: -->
31 <!-- <build_depend>genmsg</build_depend> -->
32 <!-- Use buildtool_depend for build tool packages: -->
33 <!-- <buildtool_depend>catkin</buildtool_depend> -->
34 <!-- Use exec_depend for packages you need at runtime: -->
35 <!-- <exec_depend>python-yaml</exec_depend> -->
36 <!-- Use test_depend for packages you need only for testing: -->
37 <!-- <test_depend>gtest</test_depend> -->
38 <buildtool_depend>catkin</buildtool_depend>
39 <build_depend>roscpp</build_depend>
40 <build_depend>rospy</build_depend>
41 <build_depend>std_msgs</build_depend>

最终的packageXML文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1 <?xml version="1.0"?>               
2 <package format="2">
3 <name>beginner_tutorials</name>
4 <version>0.1.0</version>
5 <description>The beginner_tutorials package</description>
6
7 <maintainer email="you@yourdomain.tld">Your Name</maintainer>
8 <license>BSD</license>
9 <url type="website">http://wiki.ros.org/beginner_tutorials</url>
10 <author email="you@yourdomain.tld">Jane Doe</author>
11
12 <buildtool_depend>catkin</buildtool_depend>
13
14 <build_depend>roscpp</build_depend>
15 <build_depend>rospy</build_depend>
16 <build_depend>std_msgs</build_depend>
17
18 <exec_depend>roscpp</exec_depend>
19 <exec_depend>rospy</exec_depend>
20 <exec_depend>std_msgs</exec_depend>
21
22 </package>

三、catkin_make解读

CmakeLists.txt,大家应该比较熟悉了,就是我们借助Cmake自动帮我们按照规则生成的makefile文件,来完成工程的编译、链接工作。
catkin_make是将cmake与make的编译方式做了一个封装的指令工具, 规范了工作路径与生成文件路径,而且在新建个工作空间时就帮我们创建了一个顶层的CMakeLists.txt文件,它会递归的寻找到当前工作空间下的所有软件包内的CMakeLists.txt依次来编译每一个软件包。(src的每个包里都有CmakeLists.txt的)
1.cmake介绍
CMake通常如何工作的例子,每个CMake项目运行此过程。

1
2
3
4
5
6
# In a CMake project
$ mkdir build
$ cd build
$ cmake ..
$ make
$ make install # (optionally)

2.catkin_make
下面的命令将构建在src文件夹中找到的任何catkin项目。

# In a catkin workspace
$ catkin_make
$ catkin_make install  # (optionally)

如果源代码位于不同的位置,比如my_src,那么可以像这样调用catkin_make:

# In a catkin workspace
$ catkin_make --source my_src
$ catkin_make install --source my_src  # (optionally)

catkin_make的实际工作过程:

$ cd ~/catkin_ws
$ catkin_make

以下是catkin_make具体的工作

$ cd ~/catkin_ws   
$ cd src
$ catkin_init_workspace
$ cd ..
$ mkdir build
$ cd build
$ cmake ../src 
$ make

catkin_make编译特定的包

$ catkin_make -DCATKIN_WHITELIST_PACKAGES="package1;package2" //编译特定的包
$ catkin_make -DCATKIN_WHITELIST_PACKAGES=""  //编译所有的包

最后更新: 2019年05月13日 22:23

原始链接: http://CQolive.github.io/2019/05/13/ROS学习笔记/

× 请我吃糖~
打赏二维码