【问题标题】:How to control Turtlebot3 in Gazebo using a web interface?如何使用 Web 界面控制 Gazebo 中的 Turtlebot3?
【发布时间】:2020-03-30 09:33:16
【问题描述】:

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

【问题讨论】:

    标签: html ros robot gazebo-simu


    【解决方案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。

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      来自this 教程的示例摘录(未测试):

      <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 服务器。

      【讨论】:

        猜你喜欢
        • 2018-08-10
        • 1970-01-01
        • 2017-04-06
        • 1970-01-01
        • 1970-01-01
        • 2020-11-04
        • 1970-01-01
        • 2013-02-15
        • 1970-01-01
        相关资源
        最近更新 更多