zoukankan      html  css  js  c++  java
  • ROS之tf II

    有个如下的launch:

    <launch>

      <arg name="laser_enabled" default="true"/>
      <arg name="ur5_enabled" default="false"/>
      <arg name="kinect_enabled" default="false"/>

      <!-- We resume the logic in empty_world.launch, changing only the name of the world to be launched -->
      <include file="$(find husky_gazebo)/launch/husky_empty_world.launch">
        <arg name="world_name" value="/usr/share/gazebo-2.2/worlds/robocup14_spl_field.world"/>
        <arg name="laser_enabled" value="$(arg laser_enabled)"/>
        <arg name="ur5_enabled" value="$(arg ur5_enabled)"/>
        <arg name="kinect_enabled" value="$(arg kinect_enabled)"/>
      </include>
        <node name="control_vel" pkg="teleop_twist_keyboard" type="teleop_twist_keyboard.py"  output="screen"/>

    </launch>

    首先引入husky_gazebo的husky_empty_world.launch, 载入一个robcup14_xxx_.world, 接着再起一个node, 用于控制.

    <launch>
    
      <arg name="world_name" default="worlds/empty.world"/>
    
      <arg name="laser_enabled" default="true"/>
      <arg name="ur5_enabled" default="false"/>
      <arg name="kinect_enabled" default="false"/>
    
      <include file="$(find gazebo_ros)/launch/empty_world.launch">
        <arg name="world_name" value="$(arg world_name)"/> <!-- world_name is wrt GAZEBO_RESOURCE_PATH environment variable -->
        <arg name="paused" value="false"/>
        <arg name="use_sim_time" value="true"/>
        <arg name="gui" value="true"/>
        <arg name="headless" value="false"/>
        <arg name="debug" value="false"/>
      </include>
    
      <include file="$(find husky_gazebo)/launch/spawn_husky.launch">
        <arg name="laser_enabled" value="$(arg laser_enabled)"/>
        <arg name="ur5_enabled" value="$(arg ur5_enabled)"/>
        <arg name="kinect_enabled" value="$(arg kinect_enabled)"/>
      </include>
    
    </launch>

    topic的图如下:

    显示出的gazebo:

    在launch的窗口, 用uiojklm,. 就可以控制小车了.

    1. 发出的控制命令, 如topic截图, 是control_vel节点(launch文件里面定义的node名字), topic是/cmd_vel, 监听结果是:

    每按一次:

    linear:
      x: 0.5
      y: 0.0
      z: 0.0
    angular:
      x: 0.0
      y: 0.0
      z: 0.0
    ---
    即, linear(线速度), x: 0.5, 英文不好真要命, vel就是velocity, 速度....

    这个gazebo牛逼的地方就是可以模拟物理世界的运动规矩, 如果你猛按一个0.5, 小车会往前一冲, 意思是你加速太快了...如果持续的按"i"键, 会发现, 速度(twist)会真的去到0.5

    然后gazebo会模拟一个odom信息, 如果echo这个odom的topic, 就会看到两个值, 一个post, 一个是twist, 分别是位置跟姿势, 放一块叫位姿.

    rostopiccho /husky_velocity_controller/odom

    ---
    header:
      seq: 58109
      stamp:
        secs: 1163
        nsecs:  49000000
      frame_id: odom
    child_frame_id: base_link
    pose:
      pose:
        position:
          x: 0.454022761909
          y: -0.21866274101
          z: 0.0
        orientation:
          x: 0.0
          y: 0.0
          z: 0.0678085464174
          w: 0.997698351724
      covariance: [0.001, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.03]
    twist:
      twist:
        linear:
          x: 1.70889380575e-06
          y: 0.0
          z: 0.0
        angular:
          x: 0.0
          y: 0.0
          z: -7.06600815379e-11
      covariance: [0.001, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.03]
    ---
    速度也同时有线速度跟角速度. 当前的速度都是为一个很小的数, 线速度真的达到0.5的时候如下图:

    聪明的我不仅想问, 这个odom, 跟tf里面的odom数据, 有啥关系或者说是否完全一致呢?

    通过跟踪从odom到base_link(或者反过来, 我搞不清谁相对谁)的

    rosrun tf tf_echo  odom base_link
    :

    At time 940.170
    - Translation: [1.088, -1.183, 0.000]
    - Rotation: in Quaternion [0.000, 0.000, -0.566, 0.825]
                in RPY (radian) [0.000, 0.000, -1.203]
                in RPY (degree) [0.000, 0.000, -68.921]

    同样有两个数值, 一个是相对唯一跟相对角度, 它的x值, 其实跟odom里面的pose的x值存在一定的差异, 不过相差不远.也就是说, 由ekf, 扩展科尔曼过滤定位发布.

  • 相关阅读:
    Vxlan基础理解
    ODPS基础
    关系型和非关系型数据库的区别?
    交换机的互连技术
    MYSQL 查看最大连接数和修改最大连接数
    Ceph添加/删除Mon(ceph.conf)
    java 线程的几个注解
    UML建模之类图
    单例模式的N种写法
    java工具jar包—Lombok
  • 原文地址:https://www.cnblogs.com/Montauk/p/7002739.html
Copyright © 2011-2022 走看看