前言:
为了帮助大家快速入坑ROS,这边随手写一个快速入门的开发基础和快速入门,一方面是对以前的ROS相关的学习经验的总结和回顾。另一方面是对以后开展的基于ROS的开发项目教程的提供基础教程。如果有用的话还请各位靓仔靓女点赞收藏加关注,你的和支持是笔者的动力。话不多说,靓仔靓女们请参阅。
目录
1、ros系统的简介
机器人操作系统(Robot Operating System,ROS),因为其点对点设计、语言支持范围广、集成度高、兼容性好、工具包丰富、免费且开源的特点、已经广泛运用于各种机器人开发当中。
2、ros的节点(node)
(1)节点(node)
节点(node)是ROS中的最小进程单元,可以使用不同的客户端(Client Libraries),如(roscpp,rospy)来进行通讯,不同语言编写的节点之间可以进行相互通讯,从程序的角度来讲,节点是不同语言编写的一个个执行文件,执行文件之间可以通过话题(topic)、服务(service)、参数(parameter)进行通讯。
(2)节点管理器(node Master)
节点管理器(ROS Master)是管理系统众多节点的控制器,当任意节点想要节点想要接入ROS系统时,该节点需要现在节点管理器 上进行注册和命名,之后节点管理器会将该节点接入整个ROS系统中,因此节点管理器存储着ROS系统正在运行着的所有节点的信息,当节点内的信息出现变化时,节点管理器将更新变化的信息并将更新后的节点信息与其他的节点通讯。
3、与节点有关的指令
(1)ros-tutorial安装
首先在Ubuntu(Ubuntu20.04)系统中打开终端(快捷方法:Ctrl+Alt+T)。
在终端中输入:
sudo apt-get install ros-<distro>-ros-tutorials
注意:将<distro>换成你的ros安装版本如(melodic、indigo、jade、kinetic、noetic、hydro、groovy),关于安装好ros后如何查看ros安装版本,在新的终端使用roscore可以查看相关ros安装的版本信息。
(2)roscore命令
打开一个新的终端(Ctrl+Alt+T),输入如下命令:
roscore
运行结果如下所示
如上图运行结果所, 其中:
ros_comm version和 * /rosversion: 显示的是版本号 1.16.0。
* /rosdistro:显示的是当前安装的ROS系统版本 noetic。
在运行ros系统前必须先执行roscore来启动节点管理器(node master)该命令执行后rosout节点和parameters server框架会一起启动,rosout节点是所有工作节点都自带的一个节点,用于收集和记录节点调试和输出信息,而parameters server则不是节点,是方便分布式并行程序编写的编程框架,用于系统的参数配置。
如果roscore初始化失败,则可能是网络配置出现异常导致的,可以通过修改文件权限来解决这一问题。命令如下,其中<your_username>是你的用户名。
sudo chown -R <your_username> -/.ros
(3)rosrun命令
节点是ros系统中最基础的执行单元,我们可以使用rosrun来运行我们的节点,其输入的命令格式如下:
rosrun [package_name] [node_name]
其中[package_name]是节点所在的功能包的名字,[node_name]是节点的名称。以ros自带的小海龟为节点为例,输入以下命令,可以按Tab键快速补全命令。
rosrun turtlesim turtlesim_node
运行结果如下:
由上图运行的结果可见,小海龟的形象是随机生成的,每个人生成的小海龟形象会有所差异。
现在我们试着用键盘控制小海龟的移动,步骤如下:
1、打开终端输入roscore,如上讲解。
roscore
2、打开新终端,开启海龟节点,如上讲解。
rosrun turtlesim turtlesim_node
3、打开新终端,开启海龟控制节点。
rosrun turtlesim turtle_teleop_key
运行结果如下:
(4)rosnode命令
ros系统的功能都是由一个个节点组合组合构成的,ros系统中的节点有关命令如下表所示。
(5) node节点的相关命令的使用和讲解
1、rosnode list 命令
在上述教程中我们完成了小乌龟示例,在此案例上我们新开一个终端查看所有正在运行的节点。
rosnode list
运行结果如下图所示。
在以上的运行结果中,/rosout、/teleop_turtle、/turtlesim,分别代表着 rosout节点、键盘控制海龟节点、海龟运行节点。
与我们用rosrun运行时的节点名称有差异,原因是rosnode list 显示的是该节点(node)向节点管理器注册的节点名称。以键盘控制海龟节点名"/teleop_turtle"注册代码为例。
ros::init(argc,argv,"teleop_turtle")
其中该节点向节点管理器(node master)注册的节点名称为teleop_turtle。
当然我们可以在节点启动的同时通过以下指令来修改ros系统中的世界节点名称,命令如下:
rosrun [package(包名)] [node_name(节点名称)] __name = [new_name(新节点名称)]
“teleop_turtle”节点名称为例输入如下命令:
rosrun turtlesim turtle_teleop_key __name:=control
再次输入rosnode list 命令查看所有运行节点列表:
rosnode list
运行结果如下:
可以看到我们将“/teleop_turtle”节点名称替换成了“/control”
2、rosnode ping 命令
rosnode ping可以测试指定节点是否正常运行,以刚修改的"/control"节点为例,以下命令:
rosnode ping /control
运行结果如下为节点运行正常:
3、rosnode info 命令
rosnode info 命令可以了解指定节点的详细信息和在整个系统中的具体作用,以“/turtlesim”海龟节点为例。在终端中输入以下命令:
rosnode info /turtlesim
运行结果如下:
如上图所示,我们会得到该节点的详细信息,其中
Publications显示其发布话题名称和路径。
Subscriptions显示其订阅的话题名称及路径。
Services显示其包括的服务内容。
Connections显示其的通信机制。
4、rosnode mechine 命令
rosnode mechine 命令其实是 rosnode list命令的延展,该命令不仅可以查看本机上运行的节点,也可以显示与其相连接其他PC(电脑)上运行的节点。命令格式如下
rosnode mechine [IP adress(地址)/PC name(名称)]
输入如下指令,查看本机运行节点:
rosnode machine qizerone-virtual-machine
运行结果如下:
5、rosnode kill 命令
rosnode kill命令可以终止指定的正在运行的节点,在终端中输入(Ctrl + C)都可以终止正在运行的节点。以"/turtlesim"节点为例。
命令 rosnode kill:
rosnode kill /turtlesim
运行结果如下:
快捷键(Ctrl + C):
6、rosnode cleanup 命令
在ros系统运行过程中,我们总会由于一些特别的原因导致节点的异常终止,此时我们可以用该命令来删除系统异常运行而终止的节点。该命令最直观的好处是当一些具体的节点异常导致整体异常时,我们要先删除这些节点的注册信息并重新运行该节点即可,而不用重新运行roscore和一堆节点,该节点的输入格式如下。
rosnode clearnup
至此,笔者后续会继续更新相关ros入门相关总结和经验,如果觉得有用的话可以点个赞和收藏。如果对文章内容有什么问题可以在评论区留言或者私信笔者。最后希望与大家共勉进步。