01 ROS的运行架构——环境变量和工作空间
说明:ROS的运行架构是很容易让人产生疑惑的,始终感觉在机械模仿,本篇内容是建立在对ROS组织架构重新的审视和理解基础之上的。
01.整体组织架构说明
a. 安装包架构(包括5个文件夹),ubantu系统安装,默认在“计算机/opt/ros/版本号(kinetic/melodic)”目录下
001 bin文件夹
主要保存一些可执行的程序和命令(多数在ROS的终端界面可以直接运行)
002 include文件夹
主要存放命令行/终端安装的功能包代脉的头文件(借此建立各个功能包间的依赖关系,即头文件隶属于某功能包,且每个功能包均具有头文件,从而方便彼此之间进行调用)
003 lib文件夹
主要存放通过终端安装的功能包的节点(以.so
结尾的可执行程序)
004 etc文件夹
主要存放ros和catkin配置的文件
005 share文件夹
功能包接口的具体的信息(话题、服务、action)
b. 环境变量( ※)
为什么要配置
ROS是依赖于某种组合空间的概念,而这种概念就是通过配置脚本环境来实现的,即可以从源获取更多的ROS功能包,因此,运行前需要source多个setup.*sh文件中的某一个或将其添加至启动脚本环境里。
查找配置环境路径的命令
export | grep ROS
若发现调用功能包未进行有效配置,需要source某些setup.*sh文件
配置方法
如果你是通过ubuntu上的 apt 工具来安装ROS的,那么你将会在'/opt/ros/<distro>/'目录中看到setup.*sh文件,然后你可以执行下面的source命令:
source /opt/ros/kinetic/setup.bash //每次打开终端时,都需要先运行上面这条命令后才能运行ros相关的命令,注意橘色部分是ros版本号,应作调整
为避免繁琐,可以事先在.bashrc文件(初学者请注意:该文件是在当前系统用户的home目录下。)中添加上述命令,当每次登录后系统已经自动执行这些命令配置好环境。
显示如下:
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc //echo写入,把source 这条命令写入.bashrc这个文件里;
source的意思是立即运行,
这个bash文件
source ~/.bashrc //.bashrc文件是电脑用户打开就会加载的文件,所以相当于一种永久性配置。在这里面,你可以写“命令简写”等方便,也可以加载一些软件配置。不source话,会下次生效。
所以一般会source一下,立即运行
工作空间创建及环境配置流程
a. 创建
mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src catkin_init_workspace //catkin_init_worksapce命令和catkin_ws的名称无关,固定写法,但工作空间名字可以改,src这个文件夹的名字不能改
b. 回到主目录,source一下新生成的setup.*sh文件
cd ~/catkin_ws/
catkin_make
source devel/setup.bash
运行成功,提示
Creating symlink "/home/jpy/catkin_ws/src/CMakeLists.txt" pointing to "/opt/ros/melodic/share/catkin/cmake/toplevel.cmake"
c. 配置情况检查
echo $ROS_PACKAGE_PATH
d. 设置环境变量自动配置
echo "source /catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
workspace创建的各文件夹
a. build
build是编译过程当中产生的中间文件,一些二进制文件,我们基本上用不到,不用操心
b. devel
devel是开发空间,里面存放开发过程中产生的一些可执行文件,包括一些库,devel与install的一些功能是类似的,只不过一个是开发中,一个是开发结束之后发布给客户使用的可执行文件/结果文件
c. install
install是安装空间,里面存放编译生成的可执行文件
d. src
src文件夹存放之后功能包的源码
代码创建
创建代码一定要创建功能包,功能包是ROS里面源码的最小单元,所有源码都必须放到功能包里面,不能直接放到src下面去编译,这是不被允许的。必须要创建功能包。
02. 运行架构
工作空间(work space)是ROS中非常重要的一个概念,可以把工作空间理解为一个大的工厂,里面的分成几个大的生产车间(package),每一个生产车间中会有若干个具有不同技能的工人(node)。当工厂运转时,每个车间中的工人node同时工作,他们通过话题(topic)进行信息沟通。各个大的车间之间也存在这互相依赖的关系,共同组成一个有机的整体。
a. 层次架构
b. 文件系统级别及概念
文件系统级——综合功能包——功能包(功能包清单/消息/服务/代码/其它)
功能包清单:
含义:是一个文件名为package.xml的XML文件,文件中必须包括与任何兼容包的根文件夹。
功能:文件定义了有关包的属性,例如包名称,版本号,作者,维护者以及其他catkin包的依赖关系。
具体细节及构建方法,可参考博客 https://junjun.blog.csdn.net/article/details/82084707(感谢原文作者的详细总结)
03 . 常用命令语句
1、rqt_graph:系统中的主要资源以计算图的形式可视化的展示出来
2、rosnode list:系统中所有节点
3、rosnode info /turtlesim:查看节点的所有信息
4、rostopic list:系统中所有发布或订阅的话题
5、rostopic info /turtel/cmd_vel:话题信息的具体内容
6、rostopic echo /turtlel/cmd_vel:监听信息的具体内容
7、rosservice list:系统中的所有服务
8、rosservice info /spawn:查看服务的具体内容
9、rosservice call /spawn "":发布服务
10、rqt_plot:将数据通过曲线的形式绘制出来
————————————————
说明:仅记录供学习使用,侵权请联系删除,参考原文链接:
1/ https://blog.csdn.net/qq_40817117/article/details/108579043
2/ https://blog.csdn.net/cliukai/article/details/90448874
3/ https://blog.csdn.net/qq_28306361/article/details/85142192
4/https://blog.csdn.net/qq_43569735/article/details/108038384