• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

【webots教程】编写你的第一个控制器

人工智能 我是。 2973次浏览 0个评论

介绍

 

现在,我们将编程一个简单的控制器,该控制器将使机器人向前移动。  
控制器是一个程序,限定了机器人的行为。Webots控制器可以用以下编程语言编写:C,C ++,Java,Python,MATLAB,ROS等。C,C ++和Java控制器必须先进行编译,然后才能作为机器人控制器运行。Python和MATLAB控制器是解释性语言,因此它们无需编译即可运行。在本教程中,我们将使用C作为参考语言,但是所有代码段也都可以在C ++,Java,Python和MATLAB中获得。  
机器人的controller节点指定当前与机器人关联的控制器。  

请注意,同一台控制器可以由多个机器人使用,但一个机器人一次只能使用一个控制器。每个控制器在通常由Webots产生的单独的子进程中执行。因为它们是独立的进程,所以控制器不共享相同的地址空间,并且可以在不同的处理器内核上运行。

  在开始本篇的教程之前,请确保按照上一篇【webots教程】你在webots搭建的第一个仿真环境中的步骤搭建好一个仿真场景  

 

一、创建一个新的控制器

  依次点击菜单栏中的 向导 -> 新机器人控制器,会出现以下弹窗:  
在这里插入图片描述   点击下一步选择控制器所使用的语言(这里我们使用c++):  
在这里插入图片描述   选择IDE,我们这里使用webots自带的ide进行程序编写:  
在这里插入图片描述  

填写好控制器名字之后会有提示将创建相关文件,随后点击完成即可:  
在这里插入图片描述

此时控制器的源文件会自动在webots的文本编辑器中打开,此时的带码没有实际作用,因为我们还没添加相关的api对机器人进行控制:

在这里插入图片描述

二、编辑控制器源文件

 

1、链接控制器与机器人

  在场景树视图中,展开E-puck节点选中controller,下方Select...按钮选择控制器。  
在这里插入图片描述   在此我们选中之前填写的控制器名称(此处选中默认名称my_controller),点击确定:  
在这里插入图片描述   完成上述步骤之后,控制器就会与机器人关联起来,习惯性地点一下保存世界以防出现“意外”。  

2、对轮子进行位置控制

 

现在我们可以开始编辑控制器的源文件了。  
  • 头文件:#include <webots/motor.h>
  • 获取电机信息:WbDeviceTag motor = wb_robot_get_device("motor_name");
  • 控制电机位置命令:wb_motor_set_position(motor, 10);
  完整代码如下:   #include <webots/Robot.hpp> #include <webots/Motor.hpp> #define TIME_STEP 64 // All the webots classes are defined in the "webots" namespace using namespace webots; int main(int argc, char **argv) { // create the Robot instance. Robot *robot = new Robot(); // 读取电机设备 Motor *leftMotor = robot->getMotor("left wheel motor"); Motor *rightMotor = robot->getMotor("right wheel motor"); // 设定电机目标位置 leftMotor->setPosition(10.0); rightMotor->setPosition(10.0); while (robot->step(TIME_STEP) != -1) { };   保存修改后的源码,点击Build/build进行编译  
在这里插入图片描述

  重新启动模拟,如果一切正常,机器人应向前移动。机器人将以其最大速度移动一会儿,然后在轮子旋转10弧度后停止。如下所示:  
在这里插入图片描述

3、拓展至车轮的速度控制

 

机器人的轮子通常是通过速度控制的,而不是像前面的示例那样通过位置控制的。为了控制车轮的电动机的速度,您需要将目标位置设置为无穷大并设置所需的速度,对程序作以下改动:   #include <webots/Robot.hpp> // Added a new include file #include <webots/Motor.hpp> #define TIME_STEP 64 #define MAX_SPEED 6.28 // All the webots classes are defined in the "webots" namespace using namespace webots; int main(int argc, char **argv) { Robot *robot = new Robot(); // 获取设备 Motor *leftMotor = robot->getMotor("left wheel motor"); Motor *rightMotor = robot->getMotor("right wheel motor"); leftMotor->setPosition(INFINITY); rightMotor->setPosition(INFINITY); //设定电机转速为最大转速的30% leftMotor->setVelocity(0.3 * MAX_SPEED); rightMotor->setVelocity(0.3 * MAX_SPEED); while (robot->step(TIME_STEP) != -1); delete robot; return 0; }

delete robot; return 0; }

  重新编译源文件并重置世界,点击开始模拟之后会看到机器人将会缓慢向前移动(移动速度取决于转速)  

在这里插入图片描述  


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明【webots教程】编写你的第一个控制器
喜欢 (0)

您必须 登录 才能发表评论!

加载中……