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篇,已经学习过,如何编写发布器,但那只是个入门级的。)

ROS Learning-027 (提高篇-005 A Mobile Base-03) 控制移动平台 --- Twist 消息的更多相关文章

  1. ROS Learning-025 (提高篇-003 A Mobile Base-01) 控制移动平台

    ROS 提高篇 A Mobile Base-01 - 控制移动平台 - 基本知识 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 ...

  2. ROS Learning-031 (提高篇-009 A Mobile Base-07) 控制移动平台 --- (操作)人机交互

    ROS 提高篇 之 A Mobile Base-07 - 控制移动平台 - (操作)人机交互 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14 ...

  3. ROS Learning-030 (提高篇-008 A Mobile Base-06) 控制移动平台 --- (Python)odom导航的例子:移动一个方块路径

    ROS 提高篇 之 A Mobile Base-06 - 控制移动平台 - (Python)再次使用odom导航的一个例子:移动一个方块路径 我使用的虚拟机软件:VMware Workstation ...

  4. ROS Learning-029 (提高篇-007 A Mobile Base-05) 控制移动平台 --- (Python编程)控制虚拟机器人的移动(精确的制定目标位置)

    ROS 提高篇 之 A Mobile Base-05 - 控制移动平台 - (Python编程)控制虚拟机器人的移动(精确的制定目标位置) 使用 odometry 消息类型 重写 out_and_ba ...

  5. ROS Learning-028 (提高篇-006 A Mobile Base-04) 控制移动平台 --- (Python编程)控制虚拟机器人的移动(不精确的制定目标位置)

    ROS 提高篇 之 A Mobile Base-04 - 控制移动平台 - (Python编程)控制虚拟机器人的移动(不精确的制定目标位置) 我使用的虚拟机软件:VMware Workstation ...

  6. ROS Learning-026 (提高篇-004 A Mobile Base-02) 控制移动平台 --- “分封制”

    ROS 提高篇 之 A Mobile Base-02 - 控制移动平台 - "分封制" 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ub ...

  7. ROS Learning-032 (提高篇-010 Launch)Launch 深入研究 --- (启动文件编程)ROS 的 XML语法简介

    ROS 提高篇 之 Launch 深入研究 - 01 - 启动文件的编程 - ROS 的 XML语法简介 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubu ...

  8. ROS Learning-024 (提高篇-002) rviz的安装和使用

    ROS 提高篇-002 - rviz 的安装和使用 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LTS ROS 版本:ROS ...

  9. ROS Learning-023 (提高篇-001) 准备工作 --- 安装一些必要的软件包

    ROS 提高篇-001 - 准备工作 - 安装一些必要的软件 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LTS ROS 版本 ...

随机推荐

  1. SpringTask定时任务实例讲解【Java获取微信公众平台accessToken及jsapiTicket】

    项目中调用微信公众平台的接口时,因为获取到的accessToken及jsapiTicket有效时长只有两个小时,需要不断更新. 所以做了个定时任务,记录一下. .SpringTask实现有两种方式,一 ...

  2. 练习json读取中文

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  3. LeetCode OJ:Minimum Path Sum(最小路径和)

    Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which ...

  4. 《ASP.NET夜话》 - 书摘精要

    (P14) 如果客户端启用了Cookie,那么客户端与服务器之间通过Cookie来传递SessionID的值:如果客户端没有启用Cookie,就会通过URL来传递SessionID的值: (P15) ...

  5. CodeForces-831A-Unimodal Array (水题)

    题目链接 /* Name: Copyright: Author: Date: 2018/5/6 19:34:23 Description: */ #include <iostream> # ...

  6. 剑指Offer-翻转单词顺序

    题目描述: 输入一个英文句子,翻转句子中单词的顺序,但单词内字符串的顺序不变.例如输入字符串:"I am a student",则输出"student a am I&qu ...

  7. Codeforces Round #276 (Div. 2)A. Factory(数论)

    这道题可以暴力的一直按要求的方法去做,做1000000次还不能整除m就认为永远不能整除m了(m不超过100000,循环1000000次比较安全了已经).这种方法可以AC. 下面深入的分析一下到底循环多 ...

  8. UVALive - 3211 Now or later (二分+2SAT)

    题目链接 题意:有n架飞机,每架飞机有两个着陆时间点可以选,要求任意两架飞机的着陆时间之差不超过k,求k的最大值. 解法:由于每架飞机都有两个选择,并且必选且只能选其中一个,时间冲突也是发生在两架飞机 ...

  9. Angular 隨記

    Windows下更新Node 和NPM方法 管理員模式打開powershell 執行以下命令: Set-ExecutionPolicy Unrestricted -Scope CurrentUser ...

  10. java流类共享篇

    总结: package com.aini; import java.io.*; import java.util.StringBuffere; public class tyt { public st ...