5、开发环境-转移到自己的机器人上

发布时间 2023-07-27 12:33:00作者: gary_123

一、转移到自己的机器人上

在移动机器人模拟中,将结果传递到真实的移动机器人上通常是有用的。Webots在设计时就考虑到了这种传输能力。仿真尽可能逼真,编程接口可以移植或连接到现有的真实机器人。Webots已经包括许多现有机器人的传输系统,包括e-puckTM、DARwIn OPTM、KheperaTM和HemisonTM。本节介绍如何开发自己的传输系统到自己的移动机器人。
由于模拟只是真实机器人物理的近似,因此在为真实机器人开发传递机构时,总是需要进行一些调整。这种调整将影响模拟模型,使其更好地匹配真实机器人的行为。

远程控制

概览

通常,将控制程序转移到真实机器人上的最简单方法是开发远程控制系统。在这种情况下,控制程序在计算机上运行,但它不是向模拟机器人发送命令和读取传感器数据,而是向真实机器人发送命令并读取传感器数据。通过将Webots API函数的自己实现作为一个小库编写,可以以非常简单的方式开发这样的远程控制系统。例如,您可能需要实现wb_motor_set_evelocity函数,以将车轮速度作为参数向实际机器人发送特定命令。该命令可以通过PC的串行端口或您拥有的任何其他PC机器人接口发送到真实的机器人。你可能需要进行一些单位转换,因为你的机器人可能使用的测量单位与Webots中使用的不同。这同样适用于从真实机器人读取传感器值。

开发远程控制插件

Webots已经提供了一些实现远程控制库的工具,特别是可以将其开发为控制器插件。一旦在Robot节点的相应字段中设置,该远程控制插件将在运行控制器时自动执行。本节介绍了实现细节。https://www.cyberbotics.com/doc/guide/controller-plugin?tab-os=linux&tab-language=c#remote-control-plugin

具体的函数

wb_robot_init函数必须是第一个被调用的函数。它执行控制器库的初始化。
wb_robot_step函数应该被重复调用(通常在无限循环中)。它请求模拟器执行ms毫秒的模拟步骤;即将模拟提前该时间量。
wb_robot_cleanup函数应该在程序结束时调用,以便使控制器保持干净。

运行真实的机器人

一旦与您自己的远程控制插件链接,您就可以通过在Webots中运行模拟来控制您的真实机器人。还可以添加一个机器人窗口(请参阅本节),以图形方式显示特定的传感器值、电机命令或停止按钮。
如本节所述,这样的远程控制系统被设计为在C/C++中实现;然而,它也可以通过创建包装器在其他编程语言中实现。

交叉编译

概览

开发一个交叉编译系统将允许您为自己的真实机器人的嵌入式处理器重新编译Webots控制器。因此,您为Webots模拟编写的源代码将在真实的机器人上执行,不需要像远程控制系统那样与机器人建立永久的PC连接。只有当机器人上的处理器可以分别用C、C++、Java或Python编程时,这才有可能实现。对于一个只能用汇编程序或其他特定语言编程的处理器来说,这是不可能的。Webots包含了e-puck和Hemisson机器人的交叉编译系统的源代码。示例位于“WEBOTS_HOME/projects/robots”目录中。

开发自定义库

与远程控制系统不同,交叉编译系统需要使用您自己的机器人特有的交叉编译工具重新编译Webots控制器的源代码。您还需要重写Webot-include文件,使其特定于您自己的机器人。在简单的情况下,您只需重写Webot-include文件即可,如“hemisson”示例中所示。在更复杂的情况下,您还需要编写一些C源文件,作为Webots“Controller”库的替代品,但要在真正的robot上运行。然后,您应该使用robot交叉编译系统重新编译Webots控制器,并将其与robot库链接。生成的文件应该上传到真正的机器人上进行本地执行

例子

Webots支持几种现有商业机器人的交叉编译。对于e-puckTM机器人,该系统完全集成在Webots中,无需修改代码。对于HemissonTM机器人,此系统需要几个包含文件来替换Webots API包含文件。对于KheperaTM机器人,除了特定的包含文件外,还使用了特定的C库。

解释语言

在某些情况下,实现解释语言系统可能会更好。如果你的真实机器人已经使用了解释语言,比如Basic或基于图形的控制语言,这很有用。在这种情况下,传输非常容易,因为你可以直接将程序的代码传输给真正的机器人。最困难的部分可能是用C或Java开发一个语言解释器,供Webots控制器用于控制模拟机器人。这种解释语言系统是为HemisonTM机器人与BotStudioTM系统开发的。