ROS学习笔记(一)

一、ROS导航

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

例子:

$ rospack find roscpp
/opt/ros/kinetic/share/roscpp
2.roscd = ros + cd,通过节点或包名,可以直接进入到所在的功能包目录
$ roscd roscpp/cmake
$ pwd
YOUR_INSTALL_PATH/share/roscpp/cmake
3.roscd log

运行日志,没有运行过,返回文件不存在

4.rosls = ros + ls,查看功能包文件。
显示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)
//创建文件夹
$ mkdir ~/catkin_ws/src  
//创建beginner_tutorials功能包,
$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp 
4.创建工作空间和安装文件

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

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

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

echo $ROS_PACKAGE_PATH 
4.查看依赖(选看)

显示功能包依赖,运行前保证已经添加到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

显示所有的间接依赖

$ 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文件)

第一个数字是行号

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 <?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项目运行此过程。

# 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=""  //编译所有的包
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值