Webots学习笔记—四轮小车的模型搭建和简单控制

前言

Webots是一款开源的多平台机器人仿真软件,为机器人的建模、编程和仿真提供了完整的开发环境(具体有关Webots的功能请咨询度娘),总之就是一个很牛逼的仿真软件。

软件可以在官网上免费安装:http://www.cyberbotics.com/
或者这个网盘里有最新版Webots的安装包:https://pan.baidu.com/s/1z8sv032KUfKygL3iQxP02g 提取码:1dyc

现在网络上Webots相关的中文资料较少,但是Webots官方提供了非常齐全的用户手册和参考指南(可以在官网上找到),但是是全英的,阅读起来可能会有点吃力,建议大家可以善用网页翻译功能。这里给大家官方参考文档的pdf:https://pan.baidu.com/s/1-_seuT8FSkb5m-iBLgLwUg 提取码:hmew

官方给的User Guaid里面有入门教程tutorial,B站上也有几个入门教程视频,大家可以跟着学习一下。

四轮小车模型搭建

Webots学习笔记—四轮小车的模型搭建和简单控制_第1张图片
我们将按照以下这个框图来搭建一个四轮小车
Webots学习笔记—四轮小车的模型搭建和简单控制_第2张图片

1. 插入背景

点击导航栏的向导→新项目目录,然后一直点击下一步最后完成就行了,注意文件名尽量不要用中文。
然后我们就有这四个节点:
Webots学习笔记—四轮小车的模型搭建和简单控制_第3张图片
点击上方的+号
在这里插入图片描述
选择电机PROTO nodes→objects→floors然后自己选一个地板,我用的是UnevenTerrain,然后左边就会出现出现这个节点,设置地板的大小为5 0 5。Webots学习笔记—四轮小车的模型搭建和简单控制_第4张图片
至此,背景的添加就完成了
Webots学习笔记—四轮小车的模型搭建和简单控制_第5张图片
这个可以调整视图:在这里插入图片描述
鼠标右键可以平移,滚轮可以缩放,左键可以旋转。

2. 添加车身

还是点击那个+号,点击BASE nodes→Robots
Webots学习笔记—四轮小车的模型搭建和简单控制_第6张图片
设置Robots的translation为0 0.1 0(修改坐标原点位置)
Webots学习笔记—四轮小车的模型搭建和简单控制_第7张图片

在机器人变量模型中的children属性中添加一个Shape节点(在Base nodes里),并设置该shape节点的 appearance 属性(修改外观)和 geometry属性,其中geometry属性设置为box
Webots学习笔记—四轮小车的模型搭建和简单控制_第8张图片
Webots学习笔记—四轮小车的模型搭建和简单控制_第9张图片
Webots学习笔记—四轮小车的模型搭建和简单控制_第10张图片
Webots学习笔记—四轮小车的模型搭建和简单控制_第11张图片
设置box的长宽高为0.1×0.05×0.2
Webots学习笔记—四轮小车的模型搭建和简单控制_第12张图片

就出现一个这样的立方体
Webots学习笔记—四轮小车的模型搭建和简单控制_第13张图片
点击children下面的Shape,更改名字为bodyWebots学习笔记—四轮小车的模型搭建和简单控制_第14张图片
在Shape下面找到这两个结点,分别添加它的碰撞属性和物理参数在这里插入图片描述
Webots学习笔记—四轮小车的模型搭建和简单控制_第15张图片
Webots学习笔记—四轮小车的模型搭建和简单控制_第16张图片
至此车身就构建完成了,记得随手保存,点击运行,车身就会掉下来落到地面(如果车身掉下去不见了,就是碰撞属性没有设置好),再点击复位。

3. 添加车轮

在之前的children下再添加一个HingeJoint节点Webots学习笔记—四轮小车的模型搭建和简单控制_第17张图片
在jointParameters节点和device节点下添加铰链属性和电机Webots学习笔记—四轮小车的模型搭建和简单控制_第18张图片
Webots学习笔记—四轮小车的模型搭建和简单控制_第19张图片
在endPoints属性中添加一个solid节点, 在solid下的children属性中添加一个Shape节点,设置外观和几何属性(几何属性为圆柱体 Cylinder),高度为0.02,半径为0.04。设置完以后更改Shape的名字为wheel,然后同样方法设置碰撞属性和物理系数
Webots学习笔记—四轮小车的模型搭建和简单控制_第20张图片
Webots学习笔记—四轮小车的模型搭建和简单控制_第21张图片
Webots学习笔记—四轮小车的模型搭建和简单控制_第22张图片
Webots学习笔记—四轮小车的模型搭建和简单控制_第23张图片
Webots学习笔记—四轮小车的模型搭建和简单控制_第24张图片
然后设置endPoint Solid节点下的translation和rotation,修改轮子的坐标和旋转角
Webots学习笔记—四轮小车的模型搭建和简单控制_第25张图片
在device中更改电机的名字为wheel1
Webots学习笔记—四轮小车的模型搭建和简单控制_第26张图片
至此,我们一个轮子就建成了Webots学习笔记—四轮小车的模型搭建和简单控制_第27张图片
复制这个HingeJoint节点,复制三次,再更改一下坐标,就可以得到另外三个车轮(车轮2是车轮1对面那个,车轮3是车轮1旁边那个)。四个轮子的坐标分别为(0.06 0 0.06)、(-0.06 0 0.06)、(0.06 0 -0.05)、(-0.06 0 -0.05)这里注意其他三个轮子device下的名字要分别修改成wheel2,wheel3和wheel4,为了程序能够识别电机并控制
Webots学习笔记—四轮小车的模型搭建和简单控制_第28张图片
Webots学习笔记—四轮小车的模型搭建和简单控制_第29张图片
最后我们需要设置四个轮子的转轴在四个轮子的圆心处,在第一个HingeJoint下的jointParameters下修改anchor的值,让他处于第一个轮子的圆心位置处Webots学习笔记—四轮小车的模型搭建和简单控制_第30张图片
同样的方法修改第二个轮子的anchor值为-0.06 0 0.06,第三个为0.06 0 -0.05,第四个为-0.06 0 -0.05。ctrl+F5可以查看旋转轴,为黑线Webots学习笔记—四轮小车的模型搭建和简单控制_第31张图片
至此,我们的四轮小车的模型就搭建完毕了(记得保存)。此时,我们点击运行按钮,小车应该能稳稳的停在地面上
Webots学习笔记—四轮小车的模型搭建和简单控制_第32张图片

简单控制

点击向导→新机器人控制器,选择C语言,选择Webots,文件名自己定,我这里是go_forward,点击完成。此时,右边会出现一个代码编辑区

输出下面这个代码

/*
 * File:          control.c
 * Date:
 * Description:
 * Author:
 * Modifications:
 */

/*
 * You may need to add include files like  or
 * , etc.
 */
#include 
#include 

/*
 * You may want to add macros here.
 */
#define TIME_STEP 64

/*
 * This is the main program.
 * The arguments of the main function can be specified by the
 * "controllerArgs" field of the Robot node
 */
 
int main(int argc, char **argv) {
  /* necessary to initialize webots stuff */
  wb_robot_init();
  /*
   * You should declare here WbDeviceTag variables for storing
   * robot devices like this:
   *  WbDeviceTag my_sensor = wb_robot_get_device("my_sensor");
   *  WbDeviceTag my_actuator = wb_robot_get_device("my_actuator");
   */
   
     WbDeviceTag motors[4];
  char motors_names[4][8] = {"wheel1", "wheel2", "wheel3", "wheel4"};
  for (int i = 0; i < 4; i++) {
    motors[i] = wb_robot_get_device(motors_names[i]);
    wb_motor_set_position(motors[i], INFINITY);
    wb_motor_set_velocity(motors[i],0);
  }

  /* main loop
   * Perform simulation steps of TIME_STEP milliseconds
   * and leave the loop when the simulation is over
   */
  while (wb_robot_step(TIME_STEP) != -1) {
    /*
     * Read the sensors :
     * Enter here functions to read sensor data, like:
     *  double val = wb_distance_sensor_get_value(my_sensor);
     */
    double left_speed = 2.0;
    double right_speed = 2.0;
    /* Process sensor data here */
    wb_motor_set_velocity(motors[0],left_speed);
    wb_motor_set_velocity(motors[1],right_speed);
    wb_motor_set_velocity(motors[2],left_speed);
    wb_motor_set_velocity(motors[3],right_speed);
    /*
     * Enter here functions to send actuator commands, like:
     * wb_motor_set_position(my_actuator, 10.0);
     */
  };

  /* Enter your cleanup code here */

  /* This is necessary to cleanup webots resources */
  wb_robot_cleanup();

  return 0;
}

点击右上角的在这里插入图片描述
完成编译(代码亲测没有错误,如果出错可能是电机名称设置有误),如果有错误则修改到没有错误为止。编译完成后弹出窗口点击reload→discardWebots学习笔记—四轮小车的模型搭建和简单控制_第33张图片
Webots学习笔记—四轮小车的模型搭建和简单控制_第34张图片
在左边Robot节点下我们找到controller,选择我们写好的go_forward文件

Webots学习笔记—四轮小车的模型搭建和简单控制_第35张图片
点击运行,就会看到我们的小车开始往前行走,修改代码中的left_speed和right_speed的值可以改变小车的行进速度,最大不能超过10。至此,我们第一个项目到此就圆满完成啦!

写在最后

这次我们学习了四轮小车的模型搭建和简单的控制,下次我将给大家介绍距离传感器并且实现小车的避障。

由于我也是刚刚入门Webots的小白,可能有一些地方写的不太准确,欢迎大佬批评指正。如果大家有什么不懂的也可以在评论区写下或者私聊我!

你可能感兴趣的:(Webots学习笔记,经验分享)