前言

本次项目所用到的四轮小车模型如下
该四轮小车的模型搭建过程请阅读我的上一篇文章:
https://blog.csdn.net/cyj972628089/article/details/107009528(Webots学习笔记—四轮小车的模型搭建和简单控制)

距离传感器的介绍

本项目用到的是Base nodes下的DistanceSensor节点,关于这个节点的详细介绍请大家自行查阅文档Reference Manual,这里我们只做一个与本项目有关的简单介绍。

首先我们查阅官方文档,看看DistanceSensor是什么

可见通过修改节点的相关属性,可以模拟通用传感器、红外传感器、声纳传感器或激光测距仪四种。本项目中我们使用的是最简单的通用传感器。通过这个表格可以看出,通用传感器可以计算出射线的平均距离。
于是我们就可以根据通用传感器返回的值,来判断小车和障碍物之间的距离。传感器发射的射线最长对应的值为1000,当射线长度减小时返回值也开始减小(即小车离障碍越来越近),于是我们可以设置一个阈值当传感器的返回值小于某个值时,让小车转弯。

添加距离传感器

在Robots节点下的children属性中添加一个DistanceSensor节点

在DistanceSensor节点下的children属性中添加一个Shape节点,设置geometry为Box,大小为0.01×0.01×0.01。修改Shape名字为ds_right,并添加碰撞属性和物理系数

修改这个DistanceSensor的名字为ds_right,并且修改它的translation和rotation

修改translation是为了修改传感器的位置,修改rotation是为了使传感器的x轴也就是红色轴指向前方,这样才能实现距离测量

这样我们第一个距离传感器就添加完成了,复制这个DistanceSensor,修改translation的值,并将新的传感器命名为ds_left。至此,我们的距离传感器就添加完毕了

小车避障代码实现

/** 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>
#include <webots/distance_sensor.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");*/int i=0;int avoid_obstacle_counter = 0;WbDeviceTag ds[2];char ds_names[2][10] = {"ds_left", "ds_right"};for (i = 0; i < 2; i++) {ds[i] = wb_robot_get_device(ds_names[i]);wb_distance_sensor_enable(ds[i], TIME_STEP);}WbDeviceTag motors[4];char motors_names[4][8] = {"wheel1", "wheel2", "wheel3", "wheel4"};for (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 */if (avoid_obstacle_counter > 0) {avoid_obstacle_counter--;left_speed = 1.0;right_speed = -1.0;} else {// read sensors outputsdouble ds_values[2];for (i = 0; i < 2; i++)ds_values[i] = wb_distance_sensor_get_value(ds[i]);// increase counter in case of obstacleif (ds_values[0] < 1000.0 || ds_values[1] < 1000.0)avoid_obstacle_counter = 100;}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;
}

添加这段代码到控制器,再在小车前方随便放置一个物体,点击运行,就会发现小车在靠近障碍一段距离后开始转弯。至此,我们就实现了四轮小车避障!

(我不知道如何制作gif,于是我找了一个别人做的给大家看看效果,我们最终也是实现这个效果)

写在最后

这次我们简单介绍了距离传感器并且实现了四轮小车的避障,下次我将给大家讲解如何使用键盘控制小车的前进、后退、转弯等!希望大家多多支持!

Webots学习笔记—距离传感器的介绍和四轮小车的避障相关推荐

  1. Webots学习笔记(二)---创建四轮小车模型

    四轮小车模型 本文将创建如下一个四轮小车模型 模型建立 (一)新建模型 创建新的项目后,增加地板作为大地 在本文建立的四轮底盘中,共有一个车体(body)+四个轮子,所以共五个实体节点 (1)建立车体 ...

  2. Hadoop学习笔记一 简要介绍

    Hadoop学习笔记一 简要介绍 这里先大致介绍一下Hadoop.     本文大部分内容都是从官网Hadoop上来的.其中有一篇介绍HDFS的pdf文档,里面对Hadoop介绍的比较全面了.我的这一 ...

  3. MongoDB学习笔记(一) MongoDB介绍及安装

    系列目录 MongoDB学习笔记(一) MongoDB介绍及安装     MongoDB学习笔记(二) 通过samus驱动实现基本数据操作     MongoDB学习笔记(三) 在MVC模式下通过Jq ...

  4. Typescript 学习笔记一:介绍、安装、编译

    前言 整理了一下 Typescript 的学习笔记,方便后期遗忘某个知识点的时候,快速回忆. 为了避免凌乱,用 gitbook 结合 marketdown 整理的. github地址是:ts-gitb ...

  5. Ui学习笔记---EasyUI的介绍

    Ui学习笔记---EasyUI的介绍 -------------------------- 1.组织:   a.EasyUI官方:http://www.jeasyui.com     EasyUI是一 ...

  6. vue.js 2.0 官方文档学习笔记 —— 01. vue 介绍

    这是我的vue.js 2.0的学习笔记,采取了将官方文档中的代码集中到一个文件的形式.目的是保存下来,方便自己查阅. !官方文档:https://cn.vuejs.org/v2/guide/ 01. ...

  7. MeayunDB学习笔记(一) MeayunDB介绍及安装

    系列目录 MeayunDB介绍-高性能分布式内存数据库 MeayunDB学习笔记(一)MeayunDB介绍及安装 MeayunDB学习笔记(二)批量导入数据 MeayunDB学习笔记(三)索引应用 一 ...

  8. Webots学习笔记(四)---舵轮模型

    最近在学习webots这个软件,又因为Robocon赛事上舵轮是一大热点,所以想利用webots软件做一下舵轮的简单仿真 舵轮 之前做了四轮小车的模型,对于四个舵轮轮系来看,就是加了四个转向轮,每个轮 ...

  9. Webots学习笔记 6.轮式机器人建模和简单控制

    轮式机器人建模和简单控制 本章目标:建立如下图四轮小车,并进行简易操控 对于Webots,xyz坐标方向如下图: 一.建模 1.分解机器人模型 预备知识: 包含solid node和其派生节点的集合统 ...

  10. V-rep运动学仿真笔记(二)——固定四轮小车,URDF模型导入

    v-rep内提供简单的建模,但是复杂的则需要导入,简单的导入obj等格式这里就略过,这里说一下导入URDF模型,摘录:URDF(Universal Robot Description Format)- ...

最新文章

  1. Opencv cv2.KalmanFilter 鼠标跟踪
  2. Ubuntu系统在VMware虚拟机中显示显示过小
  3. angularjs的ng-repeat回调
  4. 如何将自定义数据源集成到Apache Spark中
  5. SSH连接慢与反向解析(转)
  6. docker中使用git_如何在 Docker 中使用 Docker
  7. Object -C self -- 笔记
  8. 采购物联网卡如何选择流量套餐
  9. dev万能头文件_CSP-J/S考试中是否可以使用万能头文件
  10. 跨境电商指南:如何处理客户投诉
  11. 如何解决unity使用vs2017、vs2018、vs2019等 编辑器创建新项目时无法产生.sln文件的一个小办法
  12. r语言和python的区别-Python与R语言的简要对比
  13. 洛谷P4234 最小差值生成树 题解
  14. iOS MVVM + RxSwift 关键词zip 的调用时机问题
  15. uniapp通过mixin隐藏所有页面右上角分享按钮
  16. app开发者帐号(个人开发帐号、团队帐号、企业帐号、教育帐号)
  17. 通用数据打捞工具操作手册
  18. Java 面向对象与对象的创建过程及变量
  19. 【Spring】@Import注解详解
  20. 思科JABBER显示头像配置文件

热门文章

  1. 【Unity】 HTFramework框架(十四)Audio音频管理器
  2. 打开本地html加载网页慢,浏览器打开网页很慢怎么回事_浏览器打开网页很慢如何解决...
  3. mysql设置字符集gb2312_mysq查询语句包含中文以及中文乱码,字符集 GBK、GB2312、UTF8的区别...
  4. c/s模型和b/s模型
  5. eact Native开发IDE安装及配置
  6. vue下个人实现拼图验证码
  7. 使用 Kotlin 中的 takeIf
  8. 基于linux的软件测试,基于linux的Web服务器性能测试
  9. 【地平线旭日X3派试用体验】基于MIPI Camera的目标检测 web 端展示,全流程(第三节)
  10. CC00088.CloudKubernetes——|KuberNeteskubeadm.V17|5台Server|——|kubernetes验证|dashboard配置|