找回密码
 注册
关于网站域名变更的通知
查看: 574|回复: 2
打印 上一主题 下一主题

ROS基础

[复制链接]
  • TA的每日心情
    开心
    2019-11-19 16:54
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2020-3-11 09:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    本帖最后由 harry-IoT 于 2020-3-11 09:16 编辑

    一、ROS框架
    二、ROS基本命令和工具
    三、Launch文件
    一、ROS框架
    • 文件系统级
    ROS文件系统级指的是可以在硬盘上查看的ROS源代码,包括以下几种形式:
    Packages: 软件包,是ROS应用程序代码的组织单元,每个软件包都可以包含程序库、可执行文件、脚本或者其它手动创建的东西
    Manifest (package.xml): 清单,是对于'软件包'相关信息的描述,用于定义软件包相关元信息之间的依赖关系,这些信息包括版本、维护者和许可协议等
    Message:消息的描述,定义ROS中发送的消息的数据结构,储存在mypackage_name/msg/message_type.msg下
    Service:服务的描述,定义ROS中需求和响应的数据结构,储存在mypackage_name/srv/service_type.srv下

    二、ROS基本命令和工具
    • 节点
    节点都是各自独立的可执行文件,节点能够通过主题,服务或参数服务器与其他节点通信,ROS通过节点将代码和功能解耦,提高了系统的容错能力和可维护性。
    roscore 是你在运行所有ROS程序前首先要运行的命令,为了保证节点能通讯,至少要有一个roscore在运行,roscore定义为master+parameter server+rosout
    rosnode:
            rosnode ping        test connectivity to node
            rosnode list        list active nodes
            rosnode info        print information about node
            rosnode machine        list nodes running on a particular machine or list machines
            rosnode kill        kill a running node
            rosnode cleanup        purge registration information of unreachable nodes
    rosrun
                    rosrun [--prefix cmd] [--debug] PACKAGE EXECUTABLE [ARGS]

    • 主题
    rqt_graph能够创建一个显示当前系统运行情况的动态图形,我们借助它来学习主题和节点之间的关系,执行
    rosrun rqt_graph rqt_graph
    rostopic:
            rostopic bw        display bandwidth used by topic
            rostopic delay        display delay of topic from timestamp in header
            rostopic echo        print messages to screen
            rostopic find        find topics by type
            rostopic hz        display publishing rate of topic   
            rostopic info        print information about active topic
            rostopic list        list active topics
            rostopic pub        publish data to topic
            rostopic type        print topic type
    获取帮助:rostopic command -h

    • 消息和服务
    msg文件存放在package的msg目录下,srv文件则存放在srv目录下,实际上就是每行声明一个数据类型和变量名。可以使用的数据类型如下:
    int8, int16, int32, int64 (plus uint*)
    float32, float64
    string
    time, duration
    other msg files(header)
    variable-length array[] and fixed-length array[C]
    创建和使用msg srv
    rossrv/rosmsg:
            rossrv/rosmsg  show        Show service/message  description
            rossrv/rosmsg  list        List all services/messages
            rossrv/rosmsg  md5        Display service/message  md5sum
            rossrv/rosmsg  package        List services/messages  in a package
            rossrv/rosmsg  packages        List packages that contain services/messages

    • 服务
    服务是节点之间通讯的另一种方式。服务允许节点发送请求(request) 并获得一个响应(response)
    rosservice:
            rosservice args        print service arguments
            rosservice call        call the service with the provided args
            rosservice find        find services by service type
            rosservice info        print information about service
            rosservice list        list active services
            rosservice type        print service type
            rosservice uri        print service ROSRPC uri
    获取帮助:rosserverice command -h
    与rossrv区别:provides information related to ROS service definitions

    • 参数服务器
    参数服务器能够存储整型、浮点、布尔、字符串、字典和列表等数据类型。rosparam使用YAML标记语言的
    rosparam:
            rosparam set        set parameter
            rosparam get        get parameter
            rosparam load        load parameters from file
            rosparam dump        dump parameters to file
            rosparam delete        delete parameter
            rosparam list        list parameter names
    获取帮助:rosparam command -h

    三、Launch文件
    • launch
    在ROS应用中,每个节点通常有许多参数需要设置,为了方便高效操作多个节点,可以编写launch文件,然后用roslaunch命令运行
    roslaunch: roslaunch [options] [package] <filename> [arg_name:=value...]
                        roslaunch [options] <filename> [<filename>...] [arg_name:=value...]
    • launch文件的一般格式,参数:
    <launch>
            <node .../>
            <rosparam ..../>
            <param .../>
            <include .../>
            <env .../>
            <remap .../>
            <arg.../>
    </launch>
    • 参数说明
    <node >要启动的node参数
            pkg=''mypackage''
            type=''nodetype''
            name=''nodename''
            arg=''arg1 ....''(可选)
            respawn=''ture''(可选)如果节点停止,自动重启节点
            ns=''foo''(可选)在foo命名空间启动节点
            output=''log|screen''(可选)
    <rosparam>操作yaml文件参数
            command=''load|dump|delete''(默认load)
            file=''$(find pkg-name)/path/foo.yaml''(load或dump命令)yaml文件的名字
            param=''param-name''参数名
    <param>定义一个设置在参数服务器的参数,它可以添加到<node>中
            name=''namespace/name''
            value=''value''(可选)如果省略这个参数,则应指定一个文件(binfile/textfile)或命令
            type=''str|int|double|boot''(可选)指定参数的类型
            textfile=''$(find pkg-name)/path/file''(可选)        
    binfile=''$(find pkg-name)/path/file''()
            command=''(find pkg-name)/exe '$(find pkg-name)/arg.txt' ''(可选)exe是可执行文件(cpp、py),arg.txt是参                数文件
    <include>在当前launch文件中调用另一个launch文件
            file=''$(find pkg-name)/path/launch-file.launch''        
    <env>设置节点的环境变量
            name=''environment-variable-name''
            value=''environment-variable-value''        
    <remap>将一个参数名映射为另一个名字
            from=''original-name''
            to=''new-name''        
    <arg>定义一个局部参数,该参数只能在一个launch文件中使用
            <arg name=''foo''/>声明一个参数foo,后面需要给它赋值
            <arg name=''foo'' default=''1''/>声明一个参数foo,如不赋值取默认值
            <arg name=''foo'' value=''bar''/>声明一常量foo,它的值不能修改


    该用户从未签到

    3#
    发表于 2020-4-3 08:48 | 只看该作者
    扫盲,谢谢分享
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-6-8 21:24 , Processed in 0.093750 second(s), 24 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表