zoukankan      html  css  js  c++  java
  • ROS Learning-027 (提高篇-005 A Mobile Base-03) 控制移动平台 --- Twist 消息

    ROS 提高篇 之 A Mobile Base-03 — 控制移动平台 — Twist 消息


    我使用的虚拟机软件:VMware Workstation 11
    使用的Ubuntu系统:Ubuntu 14.04.4 LTS
    ROS 版本:ROS Indigo


    注意:
    1 . ROS 提高篇这个专栏的教学有门槛。
    2 . 如果你没有学习前面的教程,请想学习前面的 beginner_Tutorialslearning_tfROS 相关教程。


    Twist消息 :

    ROS使用geometry_msgs/Twist消息类型 来发布运动命令。控制命令会被base controller节点使用。话题 /cmd_vel 全名” command velocities “。base controller节点订阅 /cmd_vel 话题,并将里面的运动命令(Twist 消息)通过 PID 控制算法转换成电机信号(就是转动轮子)。

    执行下面的命令,可以查看 Twist 消息里有哪些组件:

    $ rosmsg show geometry_msgs/Twist

    会出现下面的输出:

    geometry_msgs/Vector3 linear
      float64 x
      float64 y
      float64 z
    geometry_msgs/Vector3 angular
      float64 x
      float64 y
      float64 z

    线速度指定 m/s ;角速度指定 rad/s 。(6弧度相当于一个整圆)

    一个轮式机器人是在一个2维平台内操作的(比如地板)我们只需要 Twist 消息中的 x轴 线速度和 z轴 角速度。这是因为这种类型的机器人只会在 x轴 上前进和后退,只会绕着 z轴 旋转。换句话说:y和z轴 的线速度永远是0,并且机器人不会再其他的轴上旋转。

    但是,一个全方向机器人,比如飞行机器人或水下机器人就可以使用 Twist 消息里面所有的6个组件。


    使用实际的例子介绍Twist消息:

    假设我们想要机器人以速度 0.1m/s 直线前进。如果我们在终端的命令行中发布 Twist 消息的话题,消息部分就写成下面的形式:(如果你还不清楚 “发布话题” 的意思,请看这一节的教程)

    '[0.1, 0.0, 0.0]' '[0.0, 0.0, 0.0]' 
    或者
    '{linear: {x: 0.1, y: 0, z: 0}, angular: {x: 0, y: 0, z: 0}}'

    正如我们所看到的,Twist 消息将会被发送给机器人,并被其他 ROS 节点使用。

    假设我们想要机器人以 1.0rad/s 的角速度逆时针旋转。(如果你忘记了:ROS 系统坐标系统是使用右手定义的,请看这一节的教程。)

    '[0.0, 0.0, 0.0]' '[0.0, 0.0, 1.0]'
    或者
    '{linear: {x: 0.0, y: 0, z: 0}, angular: {x: 0, y: 0, z: 1.0}}'

    如果你想合并上面两个消息,那么 Twist 消息就会变成下面这个样子:

    '[0.1, 0.0, 0.0]' '[0.0, 0.0, 1.0]' 
    或者
    '{linear: {x: 0.1, y: 0, z: 0}, angular: {x: 0, y: 0, z: 1.0}}'

    By The Wayz轴角速度的值比x轴线速度的值越大,就越紧急转弯。


    使用 Rviz 监控机器人运动 :

    这里写图片描述


    如果你想要机器人从旋转的状态停下来,你可以再发布话题的终端按 Ctrl+C, 或者新来一个终端,执行下面的命令:

    $ rostopic pub -1 /cmd_vel geometry_msgs/Twist '{}'

    我突然想到一件事情,我必须记录下来:

    我曾经非常认真的思考过:我为了什么而活着,活着的意义:

    • 享受这个世界,这个你脚底下踩着的世界。
    • 你可以选择怎样去死。人必然要死,那就要看你选择鸿毛还是泰山。

    现在让我们来运行第一个例子。

    运行这个例子前,需要先启动 虚拟机器人 和 Rviz 软件。打开两个终端分别执行先的命令:

    $ roslaunch rbx1_bringup fake_turtlebot.launch     #或者 roslaunch rbx1_bringup fake_pi_robot.launch
    $ rosrun rviz rviz -d `rospack find rbx1_nav`/sim.rviz #注意:这条指令中的'`'是键盘左上角'Esc'键下面的那个键

    Rviz中,我们先点击Reset按钮来清屏,去掉odometry箭头。下面的命令将会让机器人向前前进3秒钟( -1 表示”仅发布一次”),然后继续无限的逆时针圆周运动。

     $ rostopic pub -1 /cmd_vel geometry_msgs/Twist '{linear: {x: 0.2, y: 0, z: 0}, angular: {x: 0, y: 0, z: 0}}'; rostopic pub -r 10 /cmd_vel  geometry_msgs/Twist '{linear: {x: 0.2, y: 0, z: 0}, angular: {x: 0, y: 0, z: 0.5}}'

    这里写图片描述

    如果你想要机器人从旋转的状态停下来,你可以再发布话题的终端按 Ctrl+C, 或者新来一个终端,执行下面的命令:

    $ rostopic pub -1 /cmd_vel geometry_msgs/Twist '{}'


    总结:
    如果你现在迫不及待的想给真实的机器人发布 Twist 消息控制它移动的话,并且你手头有一个真实的机器人,请学习这一章的教程。但是我不建议你现在就学习。我希望你将 ROS 教程提高篇的教程全部学完,再去学习ROS教程实战篇,实战篇的教程全都是以真实机器人为对象进行学习的,所以你不用着急。如果你说,我说上没有真实的机器人,没有关系,ROS教程实战篇的开始就是教你如何制作一个价钱适中的机器人。所以,你完全可以放心的学习,用你最轻松的状态去学习我们这个ROS教程,这是我最希望的事情。O(∩_∩)O~

    这一讲,我们都是在终端命令行中发布带有 Twist 消息的控制话题.
    下一节,我们将学习如何编写程序(一个节点程序)来发布带有Twist消息的控制话题。(我们在ROS教程beginner_Tutorials篇,已经学习过,如何编写发布器,但那只是个入门级的。)

  • 相关阅读:
    Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
    ps中的中英文对照
    2019.6.27 oracle复习 表空间
    pthon学习笔记 2020/4/6
    运维岗位发展方向
    sql server复习重点
    linux的shell script
    linux知识扫盲
    Android Studio 三、软件学习教程-知识点
    Android Studio 二、github项目下载 2019.8.23
  • 原文地址:https://www.cnblogs.com/aobosir/p/5928548.html
Copyright © 2011-2022 走看看