ROS 提高篇 之 A Mobile Base-05 — 控制移动平台 — (Python编程)控制虚拟机器人的移动(精确的制定目标位置)
使用 odometry
消息类型 重写 out_and_back
程序。
我使用的虚拟机软件:VMware Workstation 11
使用的Ubuntu系统:Ubuntu 14.04.4 LTS
ROS 版本:ROS Indigo
注意:
1 . ROS 提高篇这个专栏的教学有门槛。
2 . 如果你没有学习前面的教程,请想学习前面的 beginner_Tutorials 和 learning_tf 的ROS 相关教程。
一 . 前言:
我们上一节编写的程序是通过 在前进1米的这段时间控制命令更新的次数 的方式,来让机器人移动指定的距离和转动指定的角度。
这种方式不是很好,还记得我们之前介绍的 odometry 消息类型吗?这一节,我们将使用 odometry 消息类型,重新上一节的程序。
二 . 运行程序,看看效果:
在查看代码之前,我们先来启动这个节点,看看运行效果:
新开一个终端,执行下面的命令,启动一个虚拟的 TurtleBot 机器人:
$ roslaunch rbx1_bringup fake_turtlebot.launch
再开一个终端,启动 RViz :
$ rosrun rviz rviz -d `rospack find rbx1_nav`/sim.rviz
最后开一个终端,运行 odom_out_and_back.py
节点:
$ rosrun rbx1_nav odom_out_and_back.py
当你将这句命令执行完,在 RVIz模拟器 中,你就可以看到下面图片里的运行效果。(运行效果和上一节,一模一样)
三 . 代码如下: odom_out_and_back.py
#!/usr/bin/env python
import rospy
from geometry_msgs.msg import Twist, Point, Quaternion
import tf
from rbx1_nav.transform_utils import quat_to_angle, normalize_angle
from math import radians, copysign, sqrt, pow, pi
class OutAndBack():
def __init__(self):
# 给出节点的名字
rospy.init_node('out_and_back', anonymous=False)
# 设置rospy在程序退出时执行的关机函数
rospy.on_shutdown(self.shutdown)
# Publisher(发布器):发布机器人运动的速度
self.cmd_vel = rospy.Publisher('/cmd_vel', Twist, queue_size=5)
# 我们将用多快的速度更新控制机器人运动的命令?
rate = 20
# 设定相同