1

如果我在 Gazebo 中有一个模拟的 Turtlebot3 机器人,我如何链接它并使用自制的 HTML/Bootstrap 网络界面(网站?)控制它的运动我尝试了很多教程,但没有一个有效(可能是因为它们是都是几年前的事)。将不胜感激任何最近的链接或教程!

4

2 回答 2

1

你可以通过安装gazebo、gzweb、turtlebot3 包来实现。什么是gzweb?

GzWeb 通常安装在 Ubuntu 服务器上。Gzweb 是运行在网络浏览器上的 Gazebo 客户端。服务器设置并运行后,客户端只需在 Web 浏览器上访问服务器的 URL 即可与模拟进行交互。

对于凉亭和 gzweb 安装如下:http ://gazebosim.org/tutorials?tut=gzweb_install&cat=gzweb

使用 catkin 创建包后,创建 python 文件 turtlebot3_move_gz.py 并将以下代码添加到 python 脚本:

#!/usr/bin/env python3

import rospy
from geometry_msgs.msg import Twist    

def talker():
  rospy.init_node('vel_publisher')
  pub = rospy.Publisher('/cmd_vel', Twist, queue_size=10)
  rate = rospy.Rate(2)
  move = Twist() # defining the way we can allocate the values
  move.linear.x = 0.5 # allocating the values in x direction - linear
  move.angular.z = 0.0  # allocating the values in z direction - angular

while not rospy.is_shutdown():
  pub.publish(move)
  rate.sleep()

if __name__ == '__main__':
  try:
      talker()
  except rospy.ROSInterruptException:
      pass

保存文件

下一步

在终端:

  1. 启动 Gazebo 模拟器 turtlebot3: roslaunch turtlebot3_gazebo turtlebot3_world.launch

  2. 在新终端中启动 gzwebserver。在服务器机器上,首先启动gazebo或gzserver,建议以详细模式运行,以便看到调试消息:

    gzserver --verbose

  3. 启动另一个终端以启动 npm:

    npm 开始

  4. 在 catkin_ws 目录中运行你的 python turtlebot3 文件:

    rosrun name_of_the_package turtlebot3_move_gz.py

  5. 打开支持 WebGL 和 websocket 的浏览器(即大多数现代浏览器)并将其指向启动 HTTP 服务器的 IP 地址和端口,例如:

    http://localhost:8080

  6. 要停止 gzserver 或 GzWeb 服务器,只需在其终端中按 Ctrl+C。

于 2021-05-02T15:55:57.887 回答
0

这不是我以前做过的事情,但通过快速搜索,我发现了一些有用的信息。

您需要使用rosbridge_suiteand 在特定的rosbridge_server. 后者在 Web 浏览器和服务器之间提供低延迟的双向通信层。这允许网站使用 rosbridge 协议与 ROS 对话。

因此,您需要安装此套件,然后您可以使用它Twist从网站(基于网站 UI 控件)向 Turtlebot 的命令主题发布消息。

不要在这个等式中考虑 Gazebo。Gazebo 是模拟器,它使用引擎盖下的 ROS 主题和服务来模拟机器人。您真正需要关注的是如何让您的网站与 ROS 对话,并将 Twist 消息发布到适当的 ROS 主题。

我还从 ROS 中找到了一个 JavaScript 库,称为roslibjs实现rosbridge协议规范。因此,您可以使用 JavaScript 与 ROS 通信并将机器人速度发布到 TurtleBot。

教程的示例摘录(未经测试):

<script type="text/javascript" type="text/javascript">
  var cmdVel = new ROSLIB.Topic({
    ros : ros,
    name : '/cmd_vel',
    messageType : 'geometry_msgs/Twist'
  });

  var twist = new ROSLIB.Message({
    linear : {
      x : 0.1,
      y : 0.2,
      z : 0.3
    },
    angular : {
      x : -0.1,
      y : -0.2,
      z : -0.3
    }
  });

  cmdVel.publish(twist);
</script>

正如您在上面看到的,JavaScript 代码创建了一个具有线性和角机器人速度的 Twist 消息实例,然后将此消息发布到 ROS 的/cmd_vel主题。您需要做的是将其集成到您的网站中,根据网站 UI 控件使此代码中的速度动态变化并启动rosbridge服务器。

于 2020-03-30T18:07:09.233 回答