》》点赞,收藏+关注,理财&技术不迷路《《
创建一个工作空间:
xiangliu@xiangliu-virtual-machine:~$ mkdir -p catkin_ws/src
这里加 -p是因为:
mkdir [-p] dirName
参数说明:
-p 确保目录名称存在,不存在的就建一个
在工作目录下,建立一个名为 AAA 的子目录 :
mkdir AAA
在工作目录下的 BBB 目录中,建立一个名为 Test 的子目录。 若 BBB 目录原本不存在,则建立一个。(注:本例若不加 -p,且原本 BBB目录不存在,则产生错误。)
mkdir -p BBB/Test
Catkin_make 初始化目录:
可以用tree查看整个目录树。 也可以tree -L 数字。 查看第几级目录
我们主战场:src,开发只和src打交道
此时src目录下只有一个文件:
xiangliu@xiangliu-virtual-machine:~/catkin_ws/src$ ls
CMakeLists.txt
在src中创建package:
catkin_creat_pkg test1 指令
没有依赖没有通信等等的最简单的package(空的):
xiangliu@xiangliu-virtual-machine:~/catkin_ws/src$ catkin_create_pkg test1
Created file test1/package.xml
Created file test1/CMakeLists.txt
Successfully created files in /home/xiangliu/catkin_ws/src/test1. Please adjust the values in package.xml.
xiangliu@xiangliu-virtual-machine:~/catkin_ws/src$ tree
.
├── CMakeLists.txt -> /opt/ros/kinetic/share/catkin/cmake/toplevel.cmake
└── test1
├── CMakeLists.txt
└── package.xml
完整带有各种工具的package:
xiangliu@xiangliu-virtual-machine:~/catkin_ws/src$ catkin_create_pkg test2 roscpp rospy std_msgs nav_msgs
/// roscpp —— 这是ros里面c++编程的API standard_masseges —— 通信
nav_masseges —— 导航
Created file test2/package.xml
Created file test2/CMakeLists.txt
Created folder test2/include/test2
Created folder test2/src
Successfully created files in /home/xiangliu/catkin_ws/src/test2. Please adjust the values in package.xml.
xiangliu@xiangliu-virtual-machine:~/catkin_ws/src$ tree
.
├── CMakeLists.txt -> /opt/ros/kinetic/share/catkin/cmake/toplevel.cmake
├── test1
│ ├── CMakeLists.txt
│ └── package.xml
└── test2
├── CMakeLists.txt /// 在这里面会自动加上依赖
├── include /// 存放头文件
│ └── test2
├── package.xml /// 在这里面会自动加上依赖
└── src # 这里多一个src包,但是是空的
5 directories, 5 files
从GitHub中导入教学demo:
因为整个教学文档我们作为一个package,所以存放在src下面:
xiangliu@xiangliu-virtual-machine:~/catkin_ws/src$ git clone https://github.com/DroidAITech/ROS-Academy-for-Beginners.git
安装相应的依赖:
有些依赖电脑上可能没有装,所以要加上依赖,回到工作空间,rosdep-install安装时每个package需要的依赖。
!!!!rosdep怎么知道每个包需要哪些依赖,依赖什么呢?————因为定义在每个package下面的package.xml文件里面,通常我们只需要改build denpend和run depend两个标签。这两个标签告诉rosdep编译和运行的时候一定要有这些依赖项,所以rosdep就知道要先装好哪些包。
$ cd ~/catkin_ws
$ rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y
Source
我们先来试一下要是安装完依赖后没有source,我们直接来看看rospack list 查看文件。
这些路径并没有在我们的catkin workspace下面。
继续详细分析输出结果:
xiangliu@xiangliu-virtual-machine:~/catkin_ws$ rospack list | grep catkin_ws
xiangliu@xiangliu-virtual-machine:~/catkin_ws$
对输出结果进行管道操作,关键字就写 catkin_ws,结果发现没有输出结果,说明工作空间里面没有ros 的package。所以上面显示的package都是安装时的默认路径,都存在opt/ros/kinetic/----- 里面了。所以让系统寻找他就只找到了安装时的一些默认路径的package,并没有找到我们自己工作空间的package。
要想找到我们自己的package,就要用到 source:xiangliu@xiangliu-virtual-machine:~/catkin_ws$ source ~/catkin_ws/devel/setup.bash
xiangliu@xiangliu-virtual-machine:~/catkin_ws$ rospack list | grep catkin_ws
现在我们会发现,有了我们自己的package。
因为source这个语句生命力不强,只在该terminal里面有效,打开新的terminal就需要输入新的source语句,很麻烦,所以我们更改一下source以提高其效率。
xiangliu@xiangliu-virtual-machine:~$ echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc (这样的话只要打开terminal就能找到source文件了)
vi ./bashrc
查看./bashrc这个文件:我们会发现他已经是一个文件程序代码,每次运行terminal都会自动运行的。
可以看到最后source。第一个是系统安装ros时的默认安装路径。下面都是我们自己调试的路径。