Webots学习笔记 6.轮式机器人建模和简单控制
轮式机器人建模和简单控制
本章目标:建立如下图四轮小车,并进行简易操控
对于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.轮式机器人建模和简单控制相关推荐
- Ext.Net学习笔记19:Ext.Net FormPanel 简单用法
Ext.Net学习笔记19:Ext.Net FormPanel 简单用法 FormPanel是一个常用的控件,Ext.Net中的FormPanel控件同样具有非常丰富的功能,在接下来的笔记中我们将一起 ...
- 一、css清除浮动方法学习笔记总结(超详细,简单易懂)
** css清除浮动方法学习笔记总结(超详细,简单易懂) ** 问题: 上图中,由于container(父级元素)未设置高度,其内部子元素设置了float浮动,导致与container同级(也就是co ...
- Python数据挖掘学习笔记】九.回归模型LinearRegression简单分析氧化物数据
#2018-03-23 16:26:20 March Friday the 12 week, the 082 day SZ SSMR [Python数据挖掘学习笔记]九.回归模型LinearRegre ...
- 51单片机学习笔记5 流水灯实现及蜂鸣器控制
51单片机学习笔记5 流水灯实现及蜂鸣器控制 一.流水灯 1. 硬件电路 2. 代码实现 (1) 点亮一个LED的基本操作 (2) 使用算术左移实现流水灯 (3) 使用库文件左移函数 二.蜂鸣器 1. ...
- 【蓝桥杯-单片机学习笔记(六)】矩阵键盘控制数码管显示0~F
一.要求 在CT107D单片机训练平台上,首先将J5处的跳线帽接到1~2引脚,使按键S4~S19组成4*4的矩阵键盘.在扫描按键的过程中,发现有按键触发信号后,待按键松开后,数码管显示相应的数字.按键 ...
- 简简单单 My SQL 学习笔记(2)——分组和简单数据的查询
初始数据 创建表(要记得先选择好我们的数据库 use+数据库名) create table student( studentno int(4) primary key not null auto_in ...
- Android学习笔记之使用百度地图实现地图控制
PS:吾之荣耀,离别已久. 学习内容: 1.实现地图控制. 2.百度地图开发的一些细节 1.实现地图控制: 这一篇主要写在百度地图上添加一些其他控制.上一篇书写了覆盖物的添加,地理编码和反 ...
- Webots学习笔记 1.创建自己的仿真机器人模型
1.新建环境 新建Webots目录,wizards -> New Project Directory- 新建世界,File -> New World 在左边场景树依次添加下面内容: 1.T ...
- Webots学习笔记 4.机器人控制器代码介绍
关于控制器 本章目标:介绍Webots的基本编程 1.scene tree node和控制器API的关系 2.控制器如何初始化.清理,如何初始化机器人设备,如何获取传感器值,如何控制执行器,如何编写简 ...
最新文章
- 2022-2028年中国六氟化硫行业市场研究及前瞻分析报告
- Mozilla 准备让“合格” Linux 用户测试 WebRender
- 安卓学习-界面-ui-Toast
- java有向图邻接表入度_图的实现--邻接表(求出各顶点的出度和入度)
- android6.0的坑
- MySQL where后面的列子查询使用
- JS 中判断一个对象是否为数组对象?
- 《道德经》程序员版第五章
- 用CSS3 vh 简单实现DIV全屏居中
- Swift 3.0 on Ubuntu 15.10
- Spark streaming粗粒度工作原理
- python3 json_python3 json模块
- mysql排序自段为字符串类型问题解决
- 使用Three.js的材质
- .net项目开发工具(V2.0)异常报告专帖
- Lesson 10.1Lesson 10.2 开篇:超参数优化与枚举网格搜索的理论极限随机网格搜索
- CO-PA: 获利能力分析类型(基于成本核算、基于会计核算)解析
- 自学英语最有效的方法
- 正则匹配以XXX开头的,XXX结束的
- 【AI隐私保护.论文笔记】CrypTFlow2: Practical 2-Party Secure Inference,CrypTFlow2:实用的安全两方推理