ROS学习笔记(二)

    xiaoxiao2021-03-25  150

    Node(节点)

    图表概念 & roscore

    这节我们介绍ROS图表概念(Graph Conceptes)并讨论roscore,rosnode和rosrun命令的用法,会用到一个轻量级的模拟器,让我们先来安装他:

    $ sudo apt-get install ros-<distro>-ros-tutorials <distro>换成indigo,jade,kinetic,etc...

    ok,接下来我们来快速的浏览下图表概念:

    Nodes(节点):一个节点就是一个文件/进程,通过ROS的机制可以和别的节点通信Message(消息):用于主题订阅或发布的ROS数据类型(int,double,float,etc,甚至数组和类似C语言中struct的嵌套结构都可以)Topics(主题):节点能够向主题订阅或发布消息Service(服务):上面三个概念明显形成了一种消息传递机制,但是节点之间不能够直接通信吗?设计者为节点之间的直接通信创建了服务的概念,来帮助节点们互相通信,而能够找到对方则是归功于Master,一个控制器,所有节点都必须在Master上注册,这样才能够找到对方进行通信。rosout:ROS控制台报告日志机制,会订阅标准的/rosout topic,记录他们的消息作为一个日志文本文件,然后在/rosout_agg上广播消息。

    roscore:Master+rosout+parameter server,上面我们说有节点到节点的通信,也有节点到主题再广播到节点的通信,所以加起来我理解就是ROS整个通信机制。(parameter server后面再说)

    接下来,让我们run ros吧

    $ roscore 返回如下: ... logging to /home/anton/.ros/log/c4671502-0498-11e7-bef4-24fd52401f9b/roslaunch-anton-Lenovo-IdeaPad-Y400-1514.log Checking log directory for disk usage. This may take awhile. Press Ctrl-C to interrupt Done checking log file disk usage. Usage is <1GB. started roslaunch server http://anton-Lenovo-IdeaPad-Y400:33281/ ros_comm version 1.12.6 SUMMARY ======== PARAMETERS * /rosdistro: kinetic * /rosversion: 1.12.6 NODES auto-starting new master process[master]: started with pid [1525] ROS_MASTER_URI=http://anton-Lenovo-IdeaPad-Y400:11311/ setting /run_id to c4671502-0498-11e7-bef4-24fd52401f9b process[rosout-1]: started with pid [1540] started core service [/rosout]

    如果没有返回或者返回出错请查阅官网 (http://wiki.ros.org/ROS/Tutorials/UnderstandingNodes) 如果是没有权限的话请输出下面的命令:

    $ sudo chown -R <your_username> ~/.ros

    rosnode

    打开一个新的terminal,rosnode命令会显示目前正在运行的ROS节点的信息。在terminal中输出rosnod会显示所有与其有关的命令,这里先介绍下面两条:

    rosnode list能够列出所有活跃节点 $ rosnode list 返回如下: /rosout

    上面的结果表明目前只有一个rosout节点在运行,而且这个节点是一直运行的,因为他一直在将所有节点的debugging output采集成日志。

    rosnode info能够打印出所指节点的信息 $ rosnode info /rosout 返回如下: Node [/rosout] Publications: * /rosout_agg [rosgraph_msgs/Log] Subscriptions: * /rosout [unknown type] Services: * /rosout/set_logger_level * /rosout/get_loggers contacting node http://anton-Lenovo-IdeaPad-Y400:43419/ ... Pid: 1540

    rosrun

    rosrun命令可以直接用package的名字运行他,不需要知道package的路径。用法如下:

    $ rosrun [package_name] [node_name] eg: $ rosrun turtlesim turtlesim_node

    运行上面命令之后是不是出现了小乌龟,这里面有很多种,每次都可能不一样哦!现在可以再试试rosnode list命令,一定会多了一个节点turtlesim。 我们还可以通过重映射参数来修改节点名字:

    $ rosrun turtlesim turtlesim_node __name:=my_turtle $ rosnode list 返回如下: /rosout /my_turtle

    我们发现/turtlesim –> /my_turtle,其实所有节点都是可以通过重映射来重命名的,只要他在命令行启动了。这是ROS一个非常强大的功能,能够将任意节点重命名(现在还不知道有什么用)。如果你发现你的返回还包括/turtlesim那么说明你是用ctrl-c来结束小乌龟的,而不是关闭窗口,这时你需要清理一下list:

    $ rosnode cleanup

    我们还可以去ping重命名的节点,当然没有重命名也是可以的:

    $ rosnode ping my_turtle 返回如下: rosnode: node is [/my_turtle] pinging /my_turtle with a timeout of 3.0s xmlrpc reply from http://aqy:42235/ time=1.152992ms xmlrpc reply from http://aqy:42235/ time=1.120090ms xmlrpc reply from http://aqy:42235/ time=1.700878ms xmlrpc reply from http://aqy:42235/ time=1.127958ms
    转载请注明原文地址: https://ju.6miu.com/read-11950.html

    最新回复(0)