Webots学习笔记—距离传感器的介绍和四轮小车的避障
前言
本次项目所用到的四轮小车模型如下
该四轮小车的模型搭建过程请阅读我的上一篇文章:
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学习笔记—距离传感器的介绍和四轮小车的避障相关推荐
- Webots学习笔记(二)---创建四轮小车模型
四轮小车模型 本文将创建如下一个四轮小车模型 模型建立 (一)新建模型 创建新的项目后,增加地板作为大地 在本文建立的四轮底盘中,共有一个车体(body)+四个轮子,所以共五个实体节点 (1)建立车体 ...
- Hadoop学习笔记一 简要介绍
Hadoop学习笔记一 简要介绍 这里先大致介绍一下Hadoop. 本文大部分内容都是从官网Hadoop上来的.其中有一篇介绍HDFS的pdf文档,里面对Hadoop介绍的比较全面了.我的这一 ...
- MongoDB学习笔记(一) MongoDB介绍及安装
系列目录 MongoDB学习笔记(一) MongoDB介绍及安装 MongoDB学习笔记(二) 通过samus驱动实现基本数据操作 MongoDB学习笔记(三) 在MVC模式下通过Jq ...
- Typescript 学习笔记一:介绍、安装、编译
前言 整理了一下 Typescript 的学习笔记,方便后期遗忘某个知识点的时候,快速回忆. 为了避免凌乱,用 gitbook 结合 marketdown 整理的. github地址是:ts-gitb ...
- Ui学习笔记---EasyUI的介绍
Ui学习笔记---EasyUI的介绍 -------------------------- 1.组织: a.EasyUI官方:http://www.jeasyui.com EasyUI是一 ...
- vue.js 2.0 官方文档学习笔记 —— 01. vue 介绍
这是我的vue.js 2.0的学习笔记,采取了将官方文档中的代码集中到一个文件的形式.目的是保存下来,方便自己查阅. !官方文档:https://cn.vuejs.org/v2/guide/ 01. ...
- MeayunDB学习笔记(一) MeayunDB介绍及安装
系列目录 MeayunDB介绍-高性能分布式内存数据库 MeayunDB学习笔记(一)MeayunDB介绍及安装 MeayunDB学习笔记(二)批量导入数据 MeayunDB学习笔记(三)索引应用 一 ...
- Webots学习笔记(四)---舵轮模型
最近在学习webots这个软件,又因为Robocon赛事上舵轮是一大热点,所以想利用webots软件做一下舵轮的简单仿真 舵轮 之前做了四轮小车的模型,对于四个舵轮轮系来看,就是加了四个转向轮,每个轮 ...
- Webots学习笔记 6.轮式机器人建模和简单控制
轮式机器人建模和简单控制 本章目标:建立如下图四轮小车,并进行简易操控 对于Webots,xyz坐标方向如下图: 一.建模 1.分解机器人模型 预备知识: 包含solid node和其派生节点的集合统 ...
- V-rep运动学仿真笔记(二)——固定四轮小车,URDF模型导入
v-rep内提供简单的建模,但是复杂的则需要导入,简单的导入obj等格式这里就略过,这里说一下导入URDF模型,摘录:URDF(Universal Robot Description Format)- ...
最新文章
- Opencv cv2.KalmanFilter 鼠标跟踪
- Ubuntu系统在VMware虚拟机中显示显示过小
- angularjs的ng-repeat回调
- 如何将自定义数据源集成到Apache Spark中
- SSH连接慢与反向解析(转)
- docker中使用git_如何在 Docker 中使用 Docker
- Object -C self -- 笔记
- 采购物联网卡如何选择流量套餐
- dev万能头文件_CSP-J/S考试中是否可以使用万能头文件
- 跨境电商指南:如何处理客户投诉
- 如何解决unity使用vs2017、vs2018、vs2019等 编辑器创建新项目时无法产生.sln文件的一个小办法
- r语言和python的区别-Python与R语言的简要对比
- 洛谷P4234 最小差值生成树 题解
- iOS MVVM + RxSwift 关键词zip 的调用时机问题
- uniapp通过mixin隐藏所有页面右上角分享按钮
- app开发者帐号(个人开发帐号、团队帐号、企业帐号、教育帐号)
- 通用数据打捞工具操作手册
- Java 面向对象与对象的创建过程及变量
- 【Spring】@Import注解详解
- 思科JABBER显示头像配置文件
热门文章
- 【Unity】 HTFramework框架(十四)Audio音频管理器
- 打开本地html加载网页慢,浏览器打开网页很慢怎么回事_浏览器打开网页很慢如何解决...
- mysql设置字符集gb2312_mysq查询语句包含中文以及中文乱码,字符集 GBK、GB2312、UTF8的区别...
- c/s模型和b/s模型
- eact Native开发IDE安装及配置
- vue下个人实现拼图验证码
- 使用 Kotlin 中的 takeIf
- 基于linux的软件测试,基于linux的Web服务器性能测试
- 【地平线旭日X3派试用体验】基于MIPI Camera的目标检测 web 端展示,全流程(第三节)
- CC00088.CloudKubernetes——|KuberNeteskubeadm.V17|5台Server|——|kubernetes验证|dashboard配置|