如果我在 Gazebo 中有一个模拟的 Turtlebot3 机器人,我如何链接它并使用自制的 HTML/Bootstrap 网络界面(网站?)控制它的运动我尝试了很多教程,但没有一个有效(可能是因为它们是都是几年前的事)。将不胜感激任何最近的链接或教程!
2 回答
你可以通过安装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
and 在特定的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
服务器。