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_Tutorials 和 learning_tf 的ROS 相关教程。
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 Way:z轴角速度的值比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 消息的更多相关文章
- ROS Learning-025 (提高篇-003 A Mobile Base-01) 控制移动平台
ROS 提高篇 A Mobile Base-01 - 控制移动平台 - 基本知识 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 ...
- ROS Learning-031 (提高篇-009 A Mobile Base-07) 控制移动平台 --- (操作)人机交互
ROS 提高篇 之 A Mobile Base-07 - 控制移动平台 - (操作)人机交互 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14 ...
- ROS Learning-030 (提高篇-008 A Mobile Base-06) 控制移动平台 --- (Python)odom导航的例子:移动一个方块路径
ROS 提高篇 之 A Mobile Base-06 - 控制移动平台 - (Python)再次使用odom导航的一个例子:移动一个方块路径 我使用的虚拟机软件:VMware Workstation ...
- ROS Learning-029 (提高篇-007 A Mobile Base-05) 控制移动平台 --- (Python编程)控制虚拟机器人的移动(精确的制定目标位置)
ROS 提高篇 之 A Mobile Base-05 - 控制移动平台 - (Python编程)控制虚拟机器人的移动(精确的制定目标位置) 使用 odometry 消息类型 重写 out_and_ba ...
- ROS Learning-028 (提高篇-006 A Mobile Base-04) 控制移动平台 --- (Python编程)控制虚拟机器人的移动(不精确的制定目标位置)
ROS 提高篇 之 A Mobile Base-04 - 控制移动平台 - (Python编程)控制虚拟机器人的移动(不精确的制定目标位置) 我使用的虚拟机软件:VMware Workstation ...
- ROS Learning-026 (提高篇-004 A Mobile Base-02) 控制移动平台 --- “分封制”
ROS 提高篇 之 A Mobile Base-02 - 控制移动平台 - "分封制" 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ub ...
- ROS Learning-032 (提高篇-010 Launch)Launch 深入研究 --- (启动文件编程)ROS 的 XML语法简介
ROS 提高篇 之 Launch 深入研究 - 01 - 启动文件的编程 - ROS 的 XML语法简介 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubu ...
- ROS Learning-024 (提高篇-002) rviz的安装和使用
ROS 提高篇-002 - rviz 的安装和使用 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LTS ROS 版本:ROS ...
- ROS Learning-023 (提高篇-001) 准备工作 --- 安装一些必要的软件包
ROS 提高篇-001 - 准备工作 - 安装一些必要的软件 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LTS ROS 版本 ...
随机推荐
- SpringTask定时任务实例讲解【Java获取微信公众平台accessToken及jsapiTicket】
项目中调用微信公众平台的接口时,因为获取到的accessToken及jsapiTicket有效时长只有两个小时,需要不断更新. 所以做了个定时任务,记录一下. .SpringTask实现有两种方式,一 ...
- 练习json读取中文
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 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 ...
- 《ASP.NET夜话》 - 书摘精要
(P14) 如果客户端启用了Cookie,那么客户端与服务器之间通过Cookie来传递SessionID的值:如果客户端没有启用Cookie,就会通过URL来传递SessionID的值: (P15) ...
- CodeForces-831A-Unimodal Array (水题)
题目链接 /* Name: Copyright: Author: Date: 2018/5/6 19:34:23 Description: */ #include <iostream> # ...
- 剑指Offer-翻转单词顺序
题目描述: 输入一个英文句子,翻转句子中单词的顺序,但单词内字符串的顺序不变.例如输入字符串:"I am a student",则输出"student a am I&qu ...
- Codeforces Round #276 (Div. 2)A. Factory(数论)
这道题可以暴力的一直按要求的方法去做,做1000000次还不能整除m就认为永远不能整除m了(m不超过100000,循环1000000次比较安全了已经).这种方法可以AC. 下面深入的分析一下到底循环多 ...
- UVALive - 3211 Now or later (二分+2SAT)
题目链接 题意:有n架飞机,每架飞机有两个着陆时间点可以选,要求任意两架飞机的着陆时间之差不超过k,求k的最大值. 解法:由于每架飞机都有两个选择,并且必选且只能选其中一个,时间冲突也是发生在两架飞机 ...
- Angular 隨記
Windows下更新Node 和NPM方法 管理員模式打開powershell 執行以下命令: Set-ExecutionPolicy Unrestricted -Scope CurrentUser ...
- java流类共享篇
总结: package com.aini; import java.io.*; import java.util.StringBuffere; public class tyt { public st ...