【发布时间】:2020-03-30 09:33:16
【问题描述】:
如果我在 Gazebo 中有一个模拟的 Turtlebot3 机器人,我如何链接它并使用自制的 HTML/Bootstrap 网络界面(网站?)控制它的运动我尝试了很多教程,但没有一个有效(可能是因为它们都是几年前的)。希望有任何最近的链接或教程!
【问题讨论】:
标签: html ros robot gazebo-simu
如果我在 Gazebo 中有一个模拟的 Turtlebot3 机器人,我如何链接它并使用自制的 HTML/Bootstrap 网络界面(网站?)控制它的运动我尝试了很多教程,但没有一个有效(可能是因为它们都是几年前的)。希望有任何最近的链接或教程!
【问题讨论】:
标签: html ros robot gazebo-simu
你可以通过安装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
在终端:
启动 Gazebo 模拟器turtlebot3: roslaunch turtlebot3_gazebo turtlebot3_world.launch
在新终端中启动 gzwebserver。在服务器机器上,首先启动gazebo或gzserver,建议以详细模式运行,以便看到调试消息:
gzserver --verbose
启动另一个终端以启动 npm:
npm 开始
在 catkin_ws 目录中运行你的 python turtlebot3 文件:
rosrun name_of_the_package turtlebot3_move_gz.py
打开支持 WebGL 和 websocket 的浏览器(即大多数现代浏览器)并将其指向启动 HTTP 服务器的 IP 地址和端口,例如:
http://localhost:8080
要停止 gzserver 或 GzWeb 服务器,只需在其终端中按 Ctrl+C。
【讨论】:
这不是我以前做过的事情,但是通过快速搜索我发现了一些有用的信息。
您需要使用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 服务器。
【讨论】: