ROS学习(一)

ROS工程的文件系统

工作空间:一般一个机器人工程需要一个工作空间。工作空间下包含该机器人工程的所有内容以及功能。 build:存放工程编译的中间文件; devel:存放工程编译生成的可执行代码,编译生成的库文件以及自动生成的头文件等。 src:存放该工程的功能包; package:功能包是ROS工程中的基本单元,一般一个单一机器人功能建立一个功能包。 功能包清单(package.xml):每个功能包都包含一个名为Package.xml的功能包清单,用于记录功能包的基本信息,包含作者信息、许可信息、依赖选项、编译标志等。 CMakeLists.txt:功能包的编译规则,每个功能包都必须包含一个CMakeLists.txt文件。 src:存储功能包源代码; include:存储功能包头文件;

2.1新建一个工作空间(刷新环境变量)

我们要在计算机上创建一个初始的 ros_workspace/ 路径,这也是工作空间结构的最高层级。输入下列指令,完成初始创建。

$ mkdir -p ~/ros_workspace/src

上面代码在home目录下创建了创建了两个层级的文件夹,第一层为ros_workspace,第二层级为src,这也是我们放ROS软件包的地方。

输入以下命令切换到工作空间目录

$ cd ~/ros_workspace/

输入以下命令编译ros工作空间

$ catkin_make

输入以下命令刷新环境

$ source ~/ros_workspace/devel/setup.bash

如上代码操作刷新配置的环境变量只在当前环境变量中有效。如果想要该环境变量在所有的终端中都有效则可以使用以下方法:

$ echo "source ~/ros_workspace/devel/setup.bash" >> ~/.bashrc

输入以下命令使生效:

$ source ~/.bashrc 

2.2 Package功能包

ROS中的package的定义更加具体,它不仅是Linux上的软件包,更是catkin编译的基本单元,我们调用 catkin_make 编译的对象就是一个个ROS的package,也就是说任何ROS程序只有组织成package才能编译。所以package也是ROS源代码存放的地方,任何ROS的代码无论是C++还是Python都要放到package中,这样才能正常的编译和运行。一个package可以编译出来多个目标文件(ROS可执行程序、动态静态库、头文件等等)。

2.2.1 Package结构:

一个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。

2.2.2 Package功能包创建

创建一个package需要在 ros_workspace/src 下,用到 catkin_create_pkg 命令,用法是:

catkin_create_pkg package depends

其中package是包名,depends是依赖的包名,可以依赖多个软件包。

例如,新建一个package叫做 test_pkg ,依赖roscpp、rospy、std_msgs(常用依赖)。

注意:ROS 包的命名遵循一个命名规范,只允许使用小写字母、数字和下划线,而且首字符必须是一个 小写字母。一些 ROS工具,包括 catkin,不支持那些不遵循此命名规范的包。

输入以下命令创建我们的第一个功能包:

 

$ cd ~/ros_workspace/src #切到功能包创建目录
$ 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 ,并且将依赖项填进了这两个文件中。

2.2.3 Package相关命令

rospack

rospack是对package管理的工具,命令的用法如下:

表2.1 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的软件包。

表2.2 roscd命令

roscd命令作用
roscd [pacakge]cd到ROS package所在路径

rosls:

rosls 也可以视为Linux指令 ls 的改进版,可以直接 ls ROS软件包的内容。

表2.3 rosls命令

rosls命令作用
rosls [pacakge]列出ROS package下的文件

rosdep 是用于管理ROS package依赖项的命令行工具,用法如下:

表2.4 rosdep命令

image-20240801223249905

一个较常使用的命令是

rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y 

,用于安装工作空间中 src 路径下所有package的依赖项(由pacakge.xml文件指定)。

  • 17
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值