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

系列文章目录

【webots教程】简介与软硬件要求

【webots教程】安装

【webots教程】关于webots的超详细介绍

【webots教程】你在webots搭建的第一个仿真环境

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

【webots教程】简单的避障机器人

介绍

现在,我们将编程一个简单的控制器,该控制器将使机器人向前移动。

控制器是一个程序,限定了机器人的行为。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) {
 
  };


  delete robot;
  return 0;
}

保存修改后的源码,点击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;
}

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

在这里插入图片描述


如果觉得ok,点个赞,点个关注,也欢迎给个打赏支持一下编者的工作
  • 22
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值