主要内容

与Turtlebot沟通

此示例介绍了TurtleBot®平台以及Matlab®用户可以与之交互的方式。具体而言,该示例中的代码演示了如何将消息发布到TurtleBot(例如速度)以及如何订阅Turtlebot发布(例如odometry)的主题。

Turtlebot必须在这个例子上运行。

先决条件:开始凉亭和模拟的火炬或者开始使用真正的turtlebot

连接到土耳其

火炬必须在运行如果您使用的是真正的turtlebot并遵循硬件设置步骤开始使用真正的turtlebot,机器人正在运行。如果您在模拟中使用了TurtleBot并遵循设置步骤开始凉亭和模拟的火炬,从桌面启动其中一个令人讨厌的世界(凉亭办公室, 例如)。

在主机上的MATLAB实例中,运行以下命令。代替IP地址使用Turtlebot的IP地址。这条线初始化ROS并连接到TurtleBot。

ipaddress =“http://192.168.178.132:11311”;罗斯尼特(ipaddress)
初始化全局节点/ matlab_global_node_00696与nodeuri http:///192.168.178.1:64340/

如果您使用的网络连接到TurtleBot不是您的默认网络适配器,则可以手动指定用于连接机器人的适配器的IP地址。如果使用无线网络,则可能会发生这种情况,但也具有活动以太网连接。代替ip_of_turtlebot.使用Turtlebot的IP地址和ip_of_host_computer.使用用于连接机器人的主机适配器的IP地址:

罗斯尼特(“ip_of_turtlebot”“nodehost”“ip_of_host_computer”);

显示所有可用的ROS主题:

叛逆列表

如果您没有看到任何主题,则网络尚未正确设置网络。有关网络设置步骤,请参阅本文档的开头。

移动机器人

您可以通过发布消息来控制Turtlebot的移动/ cmd_vel.话题。消息必须是类型geometry_msgs / twist.,其中包含指定所需的线性和角速度的数据。Turtlebot的动作可以通过两个不同的值来控制:沿着沿着的线性速度X-axis控制向前和向后运动和周围的角速度Z.-AXIS控制机器人基座的旋转速度。

设置变量速度用于短暂的Turtlebot运动。

速度= 0.1;%米每秒

为此创建一个发布者/ cmd_vel.主题和包含速度值的相应消息。

robotcmd = rospublisher(“/ cmd_vel”);velmsg = rosmessage(robotcmd);

设置前向速度(沿着X基于的机器人的轴)速度变量并将命令发布到机器人。让它移动一下,然后把它带到一站。

velmsg.linear.x =速度;发送(robotcmd,valmsg)暂停(4)velmsg.linear.x = 0;发送(robotcmd,valmsg)

要查看由速度主题发布的消息的类型,请执行以下操作:

叛逆类型/ cmd_vel.
geometry_msgs / twist.

主题期望类型的消息geometry_msgs / twist.,这正是那种类型的类型velmsg.以上创建。

要查看发布和订阅给定主题的哪些节点,请使用命令:叛逆info pointname.。以下命令列出了速度主题的发布者和订阅者。Matlab被列为出版商之一。

叛逆信息/ cmd_vel.
类型:geometry_msgs / twist发布者:* / matlab_global_node_00696(http://192.168.178.1:64340/)订阅者:* /眺望波(http://192.168.178.132:41095/)

接收机器人位置和方向

turtlebot使用了/奥多姆主题发布其当前位置和方向(集体表示为姿势)。由于Turtlebot没有配备GPS系统,因此姿势将相对于机器人第一次打开时的姿势。

为测量消息创建订阅者

OdomSub = Rossubscriber(“/ odom”);

等待订阅者返回数据,然后提取数据并将其分配给变量Xy, 和Z.

Odommsg =接收(OdomSub,3);pose = odommsg.pose.pose;x = pose.position.x;y = pose.position.y;z = pose.position.z;

笔记:如果你看到错误,那么很可能收到命令超时。确保发布了内径测量,并且您的网络已正确设置。

显示Xy, 和Z.价值

[x y z]
ans =.1×3.0.3883 0.0003 -0.0010

turtlebot的方向被储存为四元数方向财产姿势。用Quat2eul.(机器人系统工具箱)转换为欧拉角的更方便的表示。显示当前方向,θ.,机器人以度为单位,执行以下行。

quat = pose.orientation;角度= quat2eul([quat.w quat.x quat.y quat.z]);theta = rad2deg(角度(1))
theta = -0.0274.

接收LIDAR数据

订阅LIDAR主题:

lidarsub = Rossubscriber(“/扫描”);

订阅LIDAR主题后,等待数据,然后用绘图显示它。

scanmsg =接收(lidarsub);图绘图(SCANMSG)

要在机器人转换短时间内,不断显示更新的LIDAR扫描,请使用以下循环:

velmsg.angular.z =速度;发送(robotcmd,valmsg)tic尽管toc <20 scanmsg =接收(lidarsub);绘图(ScanMsg)结尾

velmsg.angular.z = 0;发送(robotcmd,valmsg)

脱离机器人

完成使用时清除发布商,订阅者和其他与ROS相关对象的工作空间。

清除

Rosshutdown.一旦完成了ROS网络。关闭全局节点并断开来自Turtlebot的连接。

Rosshutdown.
使用nodeuri关闭全局节点/ matlab_global_node_00696 http://192.168.178.1:64340/

下一步

请参阅下一个示例:探索Turtlebot的基本行为