Robot Operating System(ROS)

ROS

http://wiki.ros.org/cn

https://download.csdn.net/download/qccz123456/10567714

Packages: 软件包,是ROS应用程序代码的组织单元,每个软件包都可以包含程序库、可执行文件、脚本或者其它手动创建的东西。

rospack允许你获取软件包的有关信息。

            rospack find[包名称]:返回软件包的路径信息

roscd [本地包名称[/子目录]]:直接切换工作目录到某个软件包或者软件包

            echo$ROS_PACKAGE_PATH

            roscd log切换到ROS保存日记文件的目录下

rosls [本地包名称[/子目录]]:罗列目录

 

 

一个程序包要想称为catkin程序包必须符合以下要求:

(1)该程序包必须包含catkin compliant package.xml文件,这个package.xml文件提供有关程序包的元信息。

(2)程序包必须包含一个catkin 版本的CMakeLists.txt文件,而Catkin metapackages中必须包含一个对CMakeList.txt文件的引用。

(3)每个目录下只能有一个程序包。这意味着在同一个目录下不能有嵌套的或者多个程序包存在。

 

catkin_create_pkg [depend1] [depend2]:创建一个新的catkin程序包

            cd~/catkin_ws/src

            catkin_create_pkgbeginner_tutorials std_msgs rospy roscpp

            .~/catkin_ws/devel/setup.bash: 添加生成文件的路径到环境变量中

            rospackdepends1 beginner_tutorials:查看一级依赖包

            rospackdepends beginner_tutorials:递归检测,并查看所有间接的依赖包

            package.xml文件描述文件的组成部分

 

catkin_make[make_targets] [-DCMAKE_VARIABLES=…]

            cd~/catkin_ws/

            catkin_make--source my_src zihding mubiaoyuan

            catkin_makeinstall --source my_src  # (optionally)

            catkin_make:编译所有catkin工程

            catkin_makeinstall  # (可选)

            编译生成build和devel: build目录是build space的默认所在位置,同时cmake和 make也是在这里被调用来配置并编译你的程序包。devel目录是devel space的默认所在位置, 同时也是在你安装程序包之前存放可执行文件和库文件的地方。

 

rosrun[package_name] [node_name]:使用包名直接运行一个包内的节点

roslaunch[package] [filename.launch]:用来启动定义在launch文件中的多个节点

 

ROS 图(graph)概念

Nodes:节点,一个节点即为一个可执行文件,它可以通过ROS与其它节点进行通信。

            rosnodelist:显示当前运行的ROS节点信息

            rosnode info/rosout:命令返回的是关于一个特定节点的信息

            rosrun[package_name] [node_name]:使用包名直接运行一个包内的节点

Messages:消息,消息是一种ROS数据类型,用于订阅或发布到一个话题。

Topics:话题,节点可以发布消息到话题,也可以订阅话题以接收消息,节点之间互相通信。

            rostopic -h:获取有关ROS话题的信息

                        rostopicecho [topic]:显示在某个话题上发布的数据

                        rostopiclist:列出所有当前订阅和发布的话题

                        rostopictype [topic]:查看所发布话题的消息类型

                                    rosmsgshow [message]:查看消息的详细情况

                        rostopicpub [topic] [msg_type] [args]:数据发布到当前某个正在广播的话题上

                        rostopichz [topic]:查看数据发布的频率

            rosrunrqt_graph rqt_graph:显示当前系统运行情况的动态图形(节点,话题dengguanxi)

            rosrunrqt_plot rqt_plot:实时显示一个发布到某个话题上的数据变化图形

Master:节点管理器,ROS名称服务(比如帮助节点找到彼此)。

rosout:ROS中相当于stdout/stderr。

roscore:主机+ rosout + 参数服务器(参数服务器会在后面介绍)。

 

ROS 服务和参数

services是节点之间通讯的另一种方式,允许节点发送请求request并获得一个响应response

            rosservice list         输出可用服务的信息

            rosservicecall [service] [args]          调用带参数的服务

            rosservicetype [service]        输出服务类型

         rosservicefind         依据类型寻找服务findservices by service type

         rosserviceuri          输出服务的ROSRPCuri

rosparam能够存储并操作ROS 参数服务器(ParameterServer)上的数据

            rosparamlist           列出参数名

            rosparam set[param_name]            设置参数

                        rosservicecall clear               清除服务使得修改后的参数

            rosparamget [param_name]            获取参数

                        rosparamget /                                     显示参数服务器上的所有内容

            rosparamload [file_name] [namespace]          从文件读取参数

            rosparamdump [file_name]          向文件中写入参数

            rosparamdelete         删除参数

 

rqt_console属于ROS日志框架(loggingframework)的一部分,用来显示节点的输出信息。

            rosrunrqt_console rqt_console

rqt_logger_level允许我们修改节点运行时输出信息的日志等级(logger levels)(包括DEBUG、WARN、INFO和ERROR)。

            rosrunrqt_logger_level rqt_logger_level

            日志等级:Fatal,Error,Warn,Info,Debug.Fatal是最高优先级,Debug是最低优先级。通过设置日志等级你可以获取该等级及其以上优先等级的所有日志消息。比如,将日志等级设为Warn时,你会得到Warn、Error和Fatal这三个等级的所有日志消息。

 

rosed[package_name] [filename]:通过package名获取到待编辑的文件,无需指定文件的存储路径

 

如何创建并编译ROS消息和服务

            msg文件存放在package的msg目录下,srv文件则存放在package的srv目录下。

            消息(msg):msg文件是描述ROS中所使用消息类型的简单文本,被用来生成不同语言的源代码。

                        (1)在package里定义新的消息,实际上就是每行声明一个数据类型和变量名:

                                    roscdbeginner_tutorials

                                    mkdirmsg

                                    vimmsg/Num.msg

                                                Headerheader

                                                stringchild_frame_id

                                               geometry_msgs/PoseWithCovariancepose

                                               geometry_msgs/TwistWithCovariancetwist

                        (2)添加package.xml:

                                    message_generation

                                    message_runtime

                        (3)在CMakeLists.txt文件中,利用find_packag函数增加对message_generation依赖:

            find_package(catkinREQUIRED COMPONENTS roscpp rospy std_msgs message_generation)

                        (4)设置了运行依赖:

                                    catkin_package(

                                    ...

                                    CATKIN_DEPENDSmessage_runtime ...

                                    ...)

                        (5)手动添加.msg文件:用你的.msg文件替代Message*.msg

                        (6)确保添加消息生成源代码:generate_messages()

                        (7)检查ROS是否能够识消息:rosmsg show[message type]:

                                    rosmsg showbeginner_tutorials/Num

            服务(srv):一个srv文件描述一项服务。它包含两个部分:请求和响应,由'---'分隔。

                        (1)从其他的package中复制一个服务:

                                    roscdbeginner_tutorials

                                    mkdirsrv

                                    roscp[package_name] [file_to_copy_path] [copy_path]

                                                roscprospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv

                        (2)tongshang 2,3,4

                        (3)手动添加srv文件:用你的.srv文件替代Service*.srv

                        (4)检查ROS是否能够识该服务:rossrv show

                                    rossrv showbeginner_tutorials/AddTwoInts

            重新编译我们的package:

                        cd ~/catkin_ws

                        catkin_make

 

录制与回放数据

mkdir~/bagfiles

cd ~/bagfiles

rosbag record -a : 录制所有发布的话题消息

rosbag info : 检查bag内容

rosbag play : 回放bag文件以再现系统运行过程

rosbag record -O subset /turtle1/command_velocity/turtle1/pose : 录制数据子集

 

roswtf : 检查你的ROS系统he一些运行时,并尝试发现问题

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(ROS)