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站上也有几个入门教程视频,大家可以跟着学习一下。

四轮小车模型搭建

在这里插入图片描述
我们将按照以下这个框图来搭建一个四轮小车
在这里插入图片描述

1. 插入背景

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

2. 添加车身

还是点击那个+号,点击BASE nodes→Robots
在这里插入图片描述
设置Robots的translation为0 0.1 0(修改坐标原点位置)
在这里插入图片描述

在机器人变量模型中的children属性中添加一个Shape节点(在Base nodes里),并设置该shape节点的 appearance 属性(修改外观)和 geometry属性,其中geometry属性设置为box
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
设置box的长宽高为0.1×0.05×0.2
在这里插入图片描述

就出现一个这样的立方体
在这里插入图片描述
点击children下面的Shape,更改名字为body在这里插入图片描述
在Shape下面找到这两个结点,分别添加它的碰撞属性和物理参数在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
至此车身就构建完成了,记得随手保存,点击运行,车身就会掉下来落到地面(如果车身掉下去不见了,就是碰撞属性没有设置好),再点击复位。

3. 添加车轮

在之前的children下再添加一个HingeJoint节点在这里插入图片描述
在jointParameters节点和device节点下添加铰链属性和电机在这里插入图片描述
在这里插入图片描述
在endPoints属性中添加一个solid节点, 在solid下的children属性中添加一个Shape节点,设置外观和几何属性(几何属性为圆柱体 Cylinder),高度为0.02,半径为0.04。设置完以后更改Shape的名字为wheel,然后同样方法设置碰撞属性和物理系数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后设置endPoint Solid节点下的translation和rotation,修改轮子的坐标和旋转角
在这里插入图片描述
在device中更改电机的名字为wheel1
在这里插入图片描述
至此,我们一个轮子就建成了在这里插入图片描述
复制这个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,为了程序能够识别电机并控制
在这里插入图片描述
在这里插入图片描述
最后我们需要设置四个轮子的转轴在四个轮子的圆心处,在第一个HingeJoint下的jointParameters下修改anchor的值,让他处于第一个轮子的圆心位置处在这里插入图片描述
同样的方法修改第二个轮子的anchor值为-0.06 0 0.06,第三个为0.06 0 -0.05,第四个为-0.06 0 -0.05。ctrl+F5可以查看旋转轴,为黑线在这里插入图片描述
至此,我们的四轮小车的模型就搭建完毕了(记得保存)。此时,我们点击运行按钮,小车应该能稳稳的停在地面上
在这里插入图片描述

简单控制

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

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

/*
 * You may need to add include files like <webots/distance_sensor.h> or
 * <webots/motor.h>, etc.
 */
#include <webots/robot.h>
#include <webots/motor.h>

/*
 * 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→discard在这里插入图片描述
在这里插入图片描述
在左边Robot节点下我们找到controller,选择我们写好的go_forward文件
在这里插入图片描述
在这里插入图片描述
点击运行,就会看到我们的小车开始往前行走,修改代码中的left_speed和right_speed的值可以改变小车的行进速度,最大不能超过10。至此,我们第一个项目到此就圆满完成啦!

写在最后

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

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

  • 23
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
在使用STM32F103C8T6蓝牙控制智能小车,我们可以使用Keil5作为开发工具。下面是关于如何进行学习并使用Keil5来开发的学习笔记。 1. 准备工作: - 下载并安装Keil5开发工具 - 配置好STM32F103C8T6开发板的硬件环境 2. 创建新的项目: - 在Keil5中选择“Project”->“New Project”菜单,选择合适的项目目录和名称 - 选择“Target”->“STM32F1 Series”->“STM32F103C8T6”作为目标设备 - 在“Manage”选项卡下,选择我们需要的库文件,比如蓝牙库文件 - 点击“Add”将库文件添加到项目中,然后点击“OK”完成项目创建 3. 编写代码: - 在Keil5的项目窗口中,找到我们创建的主要源文件,例如“main.c” - 在这个文件中,我们可以使用C语言来编写控制智能小车代码,利用蓝牙模块进行通信和控制 - 通过蓝牙模块接收控制指令,并根据指令进行相应的运动控制 4. 编译和烧录: - 在Keil5的工具栏中,点击“Build”按钮进行编译,确保代码没有错误 - 将开发板连接到计算机,并在Keil5的工具栏中点击“Flash”按钮进行烧录程序到开发板 5. 测试与调试: - 在Keil5的工具栏中选择“Debug”->“Start/Stop Debug Session”,进入调试模式 - 可以使用调试功能来观察程序的运行状态,查找和修复错误 - 使用蓝牙设备(例如手机或电脑)来连接蓝牙模块,并发送控制指令,观察智能小车的运动情况 以上是关于如何使用Keil5来开发STM32F103C8T6蓝牙控制智能小车学习笔记。希望这些信息可以帮助你开始学习和开发该项目。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值