[TERMINAL 1] $ wsl_ros restore [TERMINAL 1] $ roslaunch turtlebot3_gazebo turtlebot3_empty_world.launch
可以向任何ROS机器人发出两种速度指令,使其移动:
线速度:机器人在其一个轴上向前或向后移动的速度。
角速度:机器人绕其一个轴旋转的速度。
您需要启动一个新的Windows终端实例,以便可以与终端2并排查看。要执行此操作,请在按下Shift键的同时按下“New Tab”(新标签)按钮。我们称之为WT(B)。将两个窗口并排排列,以便可以同时看到两个窗口中发生的情况。
在WT(B)中输入几次A,使机器人在现场旋转。观察终端2中里程计数据的变化。
现在按S键停止机器人,然后按W几次使机器人向前行驶。
现在按D几次,你的机器人应该开始绕着一个圈移动。
按WT(B)中的S以停止机器人(但保持键盘teleop节点运行)。然后,在终端2中按Ctrl+C关闭喙视回波节点。
接下来,在机器人静止的情况下,使用rosrun运行我们创建的Python节点,以帮助说明里程计数据在机器人的药剂和环境中的方向方面实际代表了什么:
$ rosrun com2009_examples robot_odometry.py
这提供了有关此主题所用消息类型的信息:
$ rostopic info /odom $ rosmsg info nav_msgs/Odometry
这告诉我们nav_msgs/里程计信息包含四个基本元素:
标题;子帧id;姿势;扭曲
pose告诉我们机器人相对于任意参考点的位置和方向(通常是打开时机器人所在的位置)。
姿势由以下各项决定:
来自OpenCR板上惯性测量单元(IMU)的数据,来自左右车轮编码器的数据,估计机器人从其预定义参考点(使用航位推算)行驶的距离。
位置数据对于确定机器人的运动非常重要,从中我们可以估计它在三维空间中的位置。
方向以四元数为单位表示,需要转换为主轴的角度(以度为单位)。幸运的是,ROS-tf库中有一些函数可以为我们做到这一点,我们可以在任何Python节点中使用这些函数,如下所示
from tf.transformations import euler_from_quaternion
(roll, pitch, yaw) = euler_from_quaternion([orientation.x,
orientation.y, orientation.z, orientation.w],
'sxyz')
我们的TurtleBot3机器人只能在二维平面上移动,因此,实际上,它的姿势可以完全用(x,y,θz)表示,其中x和y是机器人在x-y平面上的二维坐标,θz是机器人绕z(偏航)轴的角度。您应该在上面的练习中注意到这一点,其中delta列中的线性_z、θx和θy值都应该为0.000(或变化很小)。twist告诉我们机器人当前的线速度和角速度,这些数据直接来自车轮编码器。
rosrun week2_navigation odom_subscriber.py



