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 版本 ...
随机推荐
- js抛物线
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Java_脚本引擎_01_用法入门
一.前言 最近有个需求,需要在js中调用java,这样能避免更新java,从而实现代码的热更新. 于是想到用 Nashorn JavaScript 引擎. 二.概述 通过 JDK 8 的 Nashor ...
- java学习笔记 --- IO流小结
IO流 |--字节流 |--字节输入流 InputStream int read():一次读取一个字节 int read(byte[] bys):一次读取一个字节数 ...
- windows下安装 redis并开机自启动
1,redis官方下载地址:https://redis.io/download,redis 64位下载地址:https://github.com/ServiceStack/redis-windows, ...
- nyoj-451-光棍节的快乐(错排公式)
题目链接 /* Name:nyoj-451-光棍节的快乐 Copyright: Author: Date: 2018/4/25 16:44:47 Description:D(n)=(n-1)*(D( ...
- php是如何工作的
a:前提条件: apache服务器启动正常工作 b:客户端浏览器在地址栏输入一个程序地栏 按回车发送请求 {请求}http://127.0.0.1/day03/1.php c:apache接收请求,并 ...
- BZOJ5118:Fib数列2(O1快速模)
题意:输入N,输出fib(2^N)%1125899839733759.(P=1125899839733759是素数) 思路:欧拉降幂,因为可以表示为矩阵乘法,2^N在幂的位置,矩阵乘法也可以降幂,所以 ...
- @Override重写
package com.wisezone.f; //父类 public class Person { //姓名 private String name; //年龄 private int age; / ...
- 最终还是选择了markdownpad2
markdownpad2使用 最终 哈哈,最后还是选择了markdownpad2,经过探索才知道这个玩意多么好用. 点击,下载. 碰到的问题 1.win10出现HTML无法渲染得对话框 结果是,官网有 ...
- BZOJ1370:[Baltic2003]团伙
浅谈并查集:https://www.cnblogs.com/AKMer/p/10360090.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php? ...