ROS基础学习笔记(二)

服务与属性:
服务:
  服务允许节点发送请求并接收回应(request、response)
1.主要指令:
    rosservice list         print information about active services
    rosservice call         call the service with the provided args
    rosservice type         print service type
    rosservice find         find services by service type
    rosservice uri          print service ROSRPC uri
2.命令介绍:
    $ rosservice list
  一般可以看到:
    /clear
    /kill
    /reset
    /rosout/get_loggers
    /rosout/set_logger_level
    /spawn
    /teleop_turtle/get_loggers
    /teleop_turtle/set_logger_level
    /turtle1/set_pen
    /turtle1/teleport_absolute
    /turtle1/teleport_relative
    /turtlesim/get_loggers
    /turtlesim/set_logger_level
  查看clear服务的类型:
     $ rosservice type clear
  得到:
    std_srvs/Empty
  启用某个服务:
    $ rosservice call /clear
  就会发现之前乌龟的轨迹都消失了。
  下面这条语句是综合语句:
    $ rosservice type spawn| rossrv show
  得到:
    float32 x
    float32 y
    float32 theta
    string name
    ---
    string name
  会发现有俩部分,上部分是请求数据格式,下部是回应数据格式。
  下面这条语句会在界面中新创建一个乌龟
      $ rosservice call spawn 2 2 0.2 ""


属性:
    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
1.查看列表:
    $ rosparam list
  获得:
    /background_b
    /background_g
    /background_r
    /roslaunch/uris/aqy:51932
    /run_id
2.修改属性值:
    rosparam set [param_name]
    rosparam get [param_name]
  举例:
    $ rosparam set background_r 150
  然后执行以下语句就可以改变背景颜色了:
    $ rosservice call clear
  当然,可以使用以下语句直接全部显示:
    $ rosparam get /
  得到:
    background_b: 255
    background_g: 86
    background_r: 150
    roslaunch:
      uris: {'aqy:51932': 'http://aqy:51932/'}
    run_id: e07ea71e-98df-11de-8875-001b21201aa8
3.保存
  上述改变只是暂时的,如果你想保存的话可以使用:
    rosparam dump [file_name] [namespace]
    rosparam load [file_name] [namespace]
  这里我们保存下:
    $ rosparam dump params.yaml
  当我们再次使用时:
    $ rosparam load params.yaml copy
    $ rosparam get copy/background_b
  得到:
    255







使用rqt_console和roslaunch
1.rqt_console:
  以下是使用本节的主要源文件:
    $ sudo apt-get install ros-<distro>-rqt ros-<distro>-rqt-common-plugins ros-<distro>-turtlesim
  然后我们知道rqt_concle是显示控制台,rqt_logger_level是显示节点当前状态,学习之前先打开控制台:
    $ rosrun rqt_console rqt_console
    $ rosrun rqt_logger_level rqt_logger_level
  接下来我们正式运行程序:
    $ rosrun turtlesim turtlesim_node
  我们将logger_level中rosout/的状态改为warn,这样在控制台就会显示warn信息
  很简单,我们发布一个信息,让乌龟走出界,这样就会收到warn信息在console上,提示我们乌龟越界:
    rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}'
2.roslaunch:
  我们知道程序是有很多步骤组成,这里节点也是,单一节点没有意义,我们将节点组合起来放入launch文件中,统一一次性全部启动:
    $ roslaunch [package] [filename.launch]
  这里我们举例说明:
     切换目录:
    $ roscd beginner_tutorials
     如果发现无法成功,说明该路径未包含在搜寻路径中,我们执行:
    $ cd ~/catkin_ws
    $ source devel/setup.bash
    $ roscd beginner_tutorials
     创建launch文件夹并进入:
    $ mkdir launch
    $ cd launch
     创建turtlemimic.launch文件:
       1 <launch>
       2
       3   <group ns="turtlesim1">
       4     <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
       5   </group>
       6
       7   <group ns="turtlesim2">
       8     <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
       9   </group>
      10
      11   <node pkg="turtlesim" name="mimic" type="mimic">
      12     <remap from="input" to="turtlesim1/turtle1"/>
      13     <remap from="output" to="turtlesim2/turtle1"/>
      14   </node>
      15
      16 </launch>
     然后执行:
    $ roslaunch beginner_tutorials turtlemimic.launch
     会发现有两个界面两个乌龟出现,此时执行下面这个发布:
    $ rostopic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'
     会看到两只乌龟在绕圈。
     此时我们查看节点关系图:
    $ rqt    或者    $ rqt_graph




rosed编辑语句:
    $ rosed [package_name] [filename]
  比如可以直接:
    $ rosed roscpp Logger.msg
 


创建消息和服务
1.msg消息文件只是保存消息样式的文件,而srv服务主要有两部分组成:request和response
  msg文件保存于msg/,srv文件保存于srv/。
  msg文件里的格式使用有:
    int8, int16, int32, int64 (plus uint*)
    float32, float64
    string
    time, duration
    other msg files
    variable-length array[] and fixed-length array[C]
  并且我们会看到一个很常见的Header在msg文件头,这个header保存有时间戳和规格化坐标信息。
  常见的msg如下:
    Header header
    string child_frame_id
    geometry_msgs/PoseWithCovariance pose
    geometry_msgs/TwistWithCovariance twist
  对比srv文件有两部分,上部分request下部分response:
    int64 A
    int64 B
    ---
    int64 Sum
2.msg的使用:
  首先让我们创建一个新的消息:
    $ cd ~/catkin_ws/src/beginner_tutorials
    $ mkdir msg
    $ echo "int64 num" > msg/Num.msg
  当然上式中我们只写了一条,你也可以自己加好多:
    string first_name
    string last_name
    uint8 age
    uint32 score
  另外要保证你的消息能够被转换成代码,必须要把package.xml中如下代码开启:
    <build_depend>message_generation</build_depend>
    <run_depend>message_runtime</run_depend>
  必须保证CMakeLists.txt中:
    [1]# Do not just add this to your CMakeLists.txt, modify the existing text to add message_generation before the closing parenthesis
       find_package(catkin REQUIRED COMPONENTS
        roscpp
        rospy
        std_msgs
        message_generation
       )
    [2]add_message_files(
              FILES
                Num.msg    //自己修改的,因为我自己的msg是这个
           )
    [3]generate_messages(
              DEPENDENCIES
              std_msgs
       )
  通过以上步骤,保证在运用时能够找到你的msg文件。
  接下来就是使用msg了:
  [1]首先让我们看下msg里面的内容:
    $ rosmsg show [message type]
        $ rosmsg show beginner_tutorials/Num
     显示结果:
    int64 num
  [2]当然,如果msg名称唯一,可以不用加包名:
    $ rosmsg show Num
     显示:
    [beginner_tutorials/Num]:
    int64 num





使用服务:
1.同样先创建对应文件夹:
    $ roscd beginner_tutorials
    $ mkdir srv
  当然我们也可以复制别的包的文件过来:
    $ roscp [package_name] [file_to_copy_path] [copy_path]
    $ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv
  同理,要使用服务变为代码,需要修改配置文件package.xml:
    <build_depend>message_generation</build_depend>
    <run_depend>message_runtime</run_depend>
  CMakeLists.txt文件修改:
        [1]# Do not just add this line to your CMakeLists.txt, modify the existing line
    find_package(catkin REQUIRED COMPONENTS
      roscpp
      rospy
      std_msgs
     message_generation
    )
        [2]移除#号:
     # add_service_files(
    #   FILES
    #   Service1.srv
    #   Service2.srv
    # )
    add_service_files(
          FILES
           AddTwoInts.srv
    )
2.使用rossrv:
  查看:
    $ rossrv show <service type>
    $ rossrv show beginner_tutorials/AddTwoInts
  显示:
    int64 a
    int64 b
    ---
    int64 sum
  同理,最简洁形式查看所有信息:
    $ rossrv show AddTwoInts
    [beginner_tutorials/AddTwoInts]:
    int64 a
    int64 b
    ---
    int64 sum

    [rospy_tutorials/AddTwoInts]:
    int64 a
    int64 b
    ---
    int64 sum



不论你使用消息或者服务,必须要做的是:
  改变打开CMakeLists.txt:
    # generate_messages(
    #   DEPENDENCIES
    # #  std_msgs  # Or other packages containing msgs
    # )
  在上面中需要什么msg就填写即可。
 

  重新编译系统文件:
    # In your catkin workspace
    $ cd ../..
    $ catkin_make install
    $ cd -
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值