一、远程启动
可以使用ssh(或类似命令)在远程计算机上启动Webot。然而,只有当Webots能够获得与本地运行的X服务器(在同一台计算机上)的X11连接时,它才能工作。当前无法将Webots图形输出重定向到另一台计算机。
使用SSH命令
以下是从计算机A启动的常用方法,该计算机是将在计算机B上运行的Webots实例:
$ ssh myname@computerB.org
$ export DISPLAY=:0.0
$ webots --mode=fast --no-rendering --stdout --stderr myworld.wbt
第一行登录到计算机B。第二行将DISPLAY变量设置为计算机B的显示器0(和屏幕0)。这将向所有X11应用程序(包括Webot)指示它们需要连接到本地计算机上运行的X服务器:在本例中为计算机B。这个步骤是必要的,因为DISPLAY变量通常不会在ssh会话中设置。
最后一行启动Webots:--mode=fast选项启用快速模拟模式。--mode=fast与--no rendering选项结合使用,可以使模拟在没有图形渲染的情况下尽可能快地运行,这很好,因为图形输出在计算机A上无论如何都不可见。选项--stdout和--stderr用于将Webots的输出重定向到标准流,而不是Webots控制台,否则输出在计算机A。
此时,只有当具有适当授权的X服务器在计算机B上运行时,Webots才会启动。为了确保这一点,最简单的解决方案是在计算机B中打开登录会话,即使用计算机B的登录屏幕登录,而没有注销。除非配置不同,否则ssh登录和屏幕登录会话必须属于同一用户,否则X服务器将拒绝连接。请注意,xhost+命令可用于向另一个用户授予对X服务器的访问权限。出于安全原因,可以锁定计算机B上打开会话的屏幕(例如使用屏幕保护程序):这不会影响正在运行的X服务器。
终止ssh会话
上述方法的一个小问题是,关闭ssh会话将杀死远程作业,包括Webot。幸运的是,通过将Webots作为后台作业启动并将其输出重定向到文件,可以很容易地克服这个问题:
$ ssh myname@computerB.org
$ export DISPLAY=:0.0
$ webots --mode=fast --no-rendering --stdout --stderr myworld.wbt &> out.txt &
$ exit
&>符号将原本会出现在ssh终端中的输出重定向到一个文本文件中。&sign将Webots作为后台作业启动:这样用户就可以安全地退出ssh会话,同时Webots仍在运行。
在这种情况下,终止作业的决定通常是根据模拟特定标准在主管控制器代码中做出的。wb_suprevisor_simulation_quit函数可用于在作业结束时自动终止Webot。
运行外部机器人控制器:https://www.cyberbotics.com/doc/guide/running-extern-robot-controllers?tab-os=linux&tab-language=c