轮式机器人建模和简单控制

本章目标:建立如下图四轮小车,并进行简易操控

对于Webots,xyz坐标方向如下图:

一.建模

1.分解机器人模型

预备知识:
包含solid node和其派生节点的集合统称为solid node

机器人模型由树状solid node组成,根节点为robot node。不同的solid node由joint node连结。device node应该是robot node或者joint node的子节点。

joint node 被用来在它的父&子节点间添加自由度(DOF),这里的父&子节点均为solid node。

joint node 派生的节点可以在被连结的节点音添加不同的约束。比如机器人中常用的 HingeJoint 来约束其它可旋转的电机包括轮子。

可以通过添加一个对应的 PositionSensor node或者motor node来检测或者驱动joint node。

所以:
1.判断需要创建solid node的部分,比如轮式机器人,躯体+4个轮子一共需要5个solid node。
根据建模预期适当减少DOF对于获取有效仿真很重要。比如仿真一个脚轮需要2个DOF,如果对于仿真来说精度是不需要的,可以将其模拟为一个球体,跟地面摩擦系数为0。
2.选择合适的robot node(通常为对称中心,便于计算)

$ 新建solid,选中->右键->Transform to -> robot(作为机器人节点) 这里把车体作为robot node
$ 插入相关节点,如下图,box 尺寸为(0.1,0.05,0.2)

2.HingeJoints 铰链关节设置


轮子的初始位置由translation和rotation决定(solid node)
旋转方向(anchor)和旋转轴由HingeJoint node的HingeJointParameters决定

对于第一个轮子,Solid translation设置为(0.06,0,0.05),以便让车轮与车身有相对间隙。HingeJointParameters anchor设置为(0.06,0,0.05),定义相对于车身的旋转原点。最后HingeJointParameters axis 定义旋转轴,设置为x轴,即(1,0,0)

为什么要用Transform来放Cylinder?
因为Cylinder被定义旋转轴为y轴,故这里用Transfrom来封装Shape,以达到沿x轴的目的。

$旋转 Transform node (0,0,1,Pi/2),设置Cylinder的半径为0.04,高度为0.02,颜色为绿色。
$添加4个HingeJoint(在Robot child节点下面),使用预定义的DEF Transform node。(四个车轮的相对位置在end Point Solid的translation设置。)
$为了控制车轮,分别给4个HingeJoint下添加RotationalMotor,并添加名字(不是DEF)从wheel1到wheel4。

3.传感器

可以直接在Robot node的children下面添加DistanceSensor node。注意距离传感器仅能获取+x的数据,需要调整传感器安装方向。
$ 添加两个距离传感器,随便找个Shape装上即可。

二、控制器实现代码


#include <webots/robot.h>
#include <webots/motor.h>#define TIME_STEP 64int main(int argc, char **argv) {wb_robot_init();WbDeviceTag wheels[4];char wheels_names[4][8] = {"wheel1", "wheel2", "wheel3", "wheel4"};int i;for (i=0; i<4 ; i++)wheels[i] = wb_robot_get_device(wheels_names[i]);double speed = 1.5; // [rad/s]for (i=0; i<4 ; i++){wb_motor_set_position(wheels[i], INFINITY);wb_motor_set_velocity(wheels[i], speed);}/* 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);*//* Process sensor data here *//** 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;
}

三、实现效果


Webots学习笔记 6.轮式机器人建模和简单控制相关推荐

  1. Ext.Net学习笔记19:Ext.Net FormPanel 简单用法

    Ext.Net学习笔记19:Ext.Net FormPanel 简单用法 FormPanel是一个常用的控件,Ext.Net中的FormPanel控件同样具有非常丰富的功能,在接下来的笔记中我们将一起 ...

  2. 一、css清除浮动方法学习笔记总结(超详细,简单易懂)

    ** css清除浮动方法学习笔记总结(超详细,简单易懂) ** 问题: 上图中,由于container(父级元素)未设置高度,其内部子元素设置了float浮动,导致与container同级(也就是co ...

  3. Python数据挖掘学习笔记】九.回归模型LinearRegression简单分析氧化物数据

    #2018-03-23 16:26:20 March Friday the 12 week, the 082 day SZ SSMR [Python数据挖掘学习笔记]九.回归模型LinearRegre ...

  4. 51单片机学习笔记5 流水灯实现及蜂鸣器控制

    51单片机学习笔记5 流水灯实现及蜂鸣器控制 一.流水灯 1. 硬件电路 2. 代码实现 (1) 点亮一个LED的基本操作 (2) 使用算术左移实现流水灯 (3) 使用库文件左移函数 二.蜂鸣器 1. ...

  5. 【蓝桥杯-单片机学习笔记(六)】矩阵键盘控制数码管显示0~F

    一.要求 在CT107D单片机训练平台上,首先将J5处的跳线帽接到1~2引脚,使按键S4~S19组成4*4的矩阵键盘.在扫描按键的过程中,发现有按键触发信号后,待按键松开后,数码管显示相应的数字.按键 ...

  6. 简简单单 My SQL 学习笔记(2)——分组和简单数据的查询

    初始数据 创建表(要记得先选择好我们的数据库 use+数据库名) create table student( studentno int(4) primary key not null auto_in ...

  7. Android学习笔记之使用百度地图实现地图控制

    PS:吾之荣耀,离别已久. 学习内容: 1.实现地图控制. 2.百度地图开发的一些细节     1.实现地图控制:   这一篇主要写在百度地图上添加一些其他控制.上一篇书写了覆盖物的添加,地理编码和反 ...

  8. Webots学习笔记 1.创建自己的仿真机器人模型

    1.新建环境 新建Webots目录,wizards -> New Project Directory- 新建世界,File -> New World 在左边场景树依次添加下面内容: 1.T ...

  9. Webots学习笔记 4.机器人控制器代码介绍

    关于控制器 本章目标:介绍Webots的基本编程 1.scene tree node和控制器API的关系 2.控制器如何初始化.清理,如何初始化机器人设备,如何获取传感器值,如何控制执行器,如何编写简 ...

最新文章

  1. 2022-2028年中国六氟化硫行业市场研究及前瞻分析报告
  2. Mozilla 准备让“合格” Linux 用户测试 WebRender
  3. 安卓学习-界面-ui-Toast
  4. java有向图邻接表入度_图的实现--邻接表(求出各顶点的出度和入度)
  5. android6.0的坑
  6. MySQL where后面的列子查询使用
  7. JS 中判断一个对象是否为数组对象?
  8. 《道德经》程序员版第五章
  9. 用CSS3 vh 简单实现DIV全屏居中
  10. Swift 3.0 on Ubuntu 15.10
  11. Spark streaming粗粒度工作原理
  12. python3 json_python3 json模块
  13. mysql排序自段为字符串类型问题解决
  14. 使用Three.js的材质
  15. .net项目开发工具(V2.0)异常报告专帖
  16. Lesson 10.1Lesson 10.2 开篇:超参数优化与枚举网格搜索的理论极限随机网格搜索
  17. CO-PA: 获利能力分析类型(基于成本核算、基于会计核算)解析
  18. 自学英语最有效的方法
  19. 正则匹配以XXX开头的,XXX结束的
  20. 【AI隐私保护.论文笔记】CrypTFlow2: Practical 2-Party Secure Inference,CrypTFlow2:实用的安全两方推理

热门文章

  1. 海康工业相机 C# 开发示例
  2. java——创意图形项目总结
  3. Banq 对架构的理解
  4. 分享一个gui或app designer实时显示simulink仿真波形和实时进度的方法
  5. 第二章 - 线程的创建
  6. 智能运维(AIOps)系列之一:个人对智能运维的理解
  7. 4种数据仓库建模方法
  8. SpringBoot 零基础教学
  9. 阿里云国际站服务器使用方法:云开发一键部署WordPress建站应用
  10. WEB-INF下资源访问问题