魔力元宝笔记

魔力元宝笔记
Linstars基础配置
新建一个工作空间
工作空间是创建、修改、编译ROS工程的目录。工作空间,直观的形容就是一个仓库,里面装载着ROS的各种项目工程,便于系统组织管理调用。在可视化图形界面里是一个文件夹。我们自己写的ROS代码通常就放在工作空间中,一般一个机器人工程需要一个工作空间。工作空间下包含该机器人工程的所有内容以及功能。
工作空间下的目录文件有:
- build****:存放工程编译的中间文件;
- devel****:存放工程编译生成的可执行代码,编译生成的库文件以及自动生成的头文件等。
- src****:存放该工程的功能包;
- **package:****功能包是ROS工程中的基本单元,一般一个单一机器人功能建立一个功能包。
- 功能包清单(package.xml):每个功能包都包含一个名为Package.xml的功能包清单,用于记录功能包的基本信息,包含作者信息、许可信息、依赖选项、编译标志等。
- CMakeLists.txt****:功能包的编译规则,每个功能包都必须包含一个CMakeLists.txt文件。
- src****:存储功能包源代码;
- include****:存储功能包头文件;
在unbuntu系统中默认还没有工作空间,所以我们需要自行创建,我们要在计算机上创建一个初始的ros_workspace/
路径。
1 | mkdir -p ~/ros_workspace/src |
上面代码在home目录下创建了创建了两个层级的文件夹,第一层为ros_workspace,第二层级为src,这也是我们放ROS软件包的地方。
编译工作空间
对于源代码文件,我们只有编译才能在系统上运行。而Linux下的编译器有gcc、g++,随着源文件的增加,直接用gcc/g++命令的方式显得效率低下,人们开始用Makefile来进行编译。然而随着工程体量的增大,Makefile也不能满足需求,于是便出现了Cmake工具。CMake是对make工具的生成器,是更高层的工具,它简化了编译构建过程,能够管理大型项目,具有良好的扩展性。对于ROS这样大体量的平台来说,就采用的是CMake,并且ROS对CMake进行了扩展,于是便有了Catkin编译系统。
输入以下命令切换到工作空间目录(catkin编译之前需要回到工作空间目录)
1 | cd ~/ros_workspace/ |
输入以下命令编译ros工作空间
1 | catkin_make |
编译后该目录下会有build和devel文件夹
注意: catkin编译之前需要回到工作空间目录, catkin_make 在其他路径下编译不会成功。编译完成后,如果有新的目标文件产生(原来没有),那么一般紧跟着要source刷新配置环境,使得系统能够找到刚才编译生成的ROS可执行文件。这个细节比较容易遗漏,致使后面出现可执行文件无法打开等错误。
输入以下命令刷新环境
1 | source ~/ros_workspace/devel/setup.bash |
‘’如上代码操作刷新配置的环境变量只在当前环境变量中有效。如果想要该环境变量在所有的终端中都有效则可以使用以下方法:
1 | echo "source ~/ros_workspace/devel/setup.bash" >> ~/.bashrc |
输入以下命令使生效:
1 | source ~/.bashrc |
Package功能包
ROS中的package的定义更加具体,它不仅是Linux上的软件包,更是catkin编译的基本单元,我们调用 catkin_make 编译的对象就是一个个ROS的package,也就是说任何ROS程序只有组织成package才能编译。所以package也是ROS源代码存放的地方,任何ROS的代码无论是C++还是Python都要放到package中,这样才能正常的编译和运行。一个package可以编译出来多个目标文件(ROS可执行程序、动态静态库、头文件等等)。
一个package下常见的文件、路径有:
├── CMakeLists.txt #package的编译规则(必须)
├── package.xml #package的描述信息(必须)
├── src/ #源代码文件
├── include/ #C++头文件
├── scripts/ #可执行脚本
├── msg/ #自定义消息
├── srv/ #自定义服务
├── models/ #3D模型文件
├── urdf/ #urdf文件
├── launch/ #launch文件
其中定义package的是 CMakeLists.txt 和 package.xml ,这两个文件是package中必不可少的。catkin编译系统在编译前,首先就要解析这两个文件。这两个文件就定义了一个package。
- CMakeLists.txt: 定义package的包名、依赖、源文件、目标文件等编译规则,是package不可少的成分;
- package.xml: 描述package的包名、版本号、作者、依赖等信息,是package不可少的成分;
- src/: 存放ROS的源代码,包括C++的源码和(.cpp)以及Python的module(.py);
- include/: 存放C++源码对应的头文件;
- scripts/: 存放可执行脚本,例如shell脚本(.sh)、Python脚本(.py);
- msg/: 存放自定义格式的消息(.msg);
- srv/: 存放自定义格式的服务(.srv);
- models/: 存放机器人或仿真场景的3D模型(.sda, .stl, .dae等);
- urdf/: 存放机器人的模型描述(.urdf或.xacro);
- launch/: 存放launch文件(.launch或.xml);
通常ROS文件组织都是按照以上的形式,这是约定俗成的命名习惯,建议遵守。以上路径中,只有 CMakeLists.txt 和 package.xml 是必须的,其余路径根据软件包是否需要来决定。
Package功能包创建
创建一个package需要在 ros_workspace/src
下,用到 catkin_create_pkg
命令,用法是:
1 | catkin_create_pkg package depends |
其中package是包名,depends是依赖的包名,可以依赖多个软件包。
例如,新建一个package叫做 test_pkg ,依赖roscpp
、rospy
、std_msgs
(常用依赖)。
注意:ROS 包的命名遵循一个命名规范,只允许使用小写字母、数字和下划线,而且首字符必须是一个 小写字母。一些 ROS工具,包括 catkin,不支持那些不遵循此命名规范的包。
输入以下命令创建我们的第一个功能包:
1 | cd ~/ros_workspace /src #切到功能包创建目录 |
1 | catkin_create_pkg test_pkg roscpp rospy std_msgs #创建名字为test_pkg 的功能包,依赖了roscpp,rospy,std_msgs |
这样就会在当前路径下新建 test_pkg 软件包,包括:
├── CMakeLists.txt
├── include
│ └── test_pkg
├── package.xml
└── src
catkin_create_pkg 帮你完成了软件包的初始化,填充好了 CMakeLists.txt 和 package.xml的内容 ,并且将依赖项填进了这两个文件中。
Package相关命令
rospack:
rospack是对package管理的工具,命令的用法如下:
rospack命令
rospack命令 | 作用 |
---|---|
rospack help | 显示rospack的用法 |
rospack list | 列出本机所有package |
rospack depends [package] | 显示package的依赖包 |
rospack find [package] | 定位某个package |
rospack profile | 刷新所有package的位置记录 |
roscd:
roscd 命令类似与Linux系统的 cd ,改进之处在于 roscd 可以直接 cd 到ROS的软件包。
roscd命令
roscd命令 | 作用 |
---|---|
roscd [pacakge] | cd到ROS package所在路径 |
rosls:
rosls 也可以视为Linux指令 ls 的改进版,可以直接 ls ROS软件包的内容。
rosls命令
rosls命令 | 作用 |
---|---|
rosls [pacakge] | 列出ROS package下的文件 |
rosdep:
rosdep 是用于管理ROS package依赖项的命令行工具,用法如下:
表2.4 rosdep命令
一个较常使用的命令是 rosdep install –from-paths src –ignore-src –rosdistro=kinetic -y ,用于安装工作空间中 src 路径下所有package的依赖项(由pacakge.xml文件指定)。