此示例介绍了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”);
等待订阅者返回数据,然后提取数据并将其分配给变量X
那y
, 和Z.
:
Odommsg =接收(OdomSub,3);pose = odommsg.pose.pose;x = pose.position.x;y = pose.position.y;z = pose.position.z;
笔记:如果你看到错误,那么很可能收到
命令超时。确保发布了内径测量,并且您的网络已正确设置。
显示X那y, 和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主题:
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的基本行为