ROS2放弃指南3:webots简单使用
webots与ros
- 简介
- 安装
- 简单使用
- DEF-USE Mechanism(定义机制)
- 制作小车
- 导出节点
如何入门webots机器人仿真神器 · 罗伯特祥 .
古月居 罗伯特祥 Webots建模指南2 - 机器人建模
我是. webots教程.
卡卡南安 Webots学习笔记—四轮小车的键盘控制
官方下载地址:https://github.com/cyberbotics/webots/releases
官方教程:https://cyberbotics.com/doc/guide/tutorials
简介
webots 仿真 对于机械臂的支持不够好。
gezebo 建模:模型编辑器,编辑代码,加载urdf。仿真流程:场景建模->生成urdf并配置传感器->编写launch文件。关键就是 生成ufdf并配置传感器这一步。对于新手来说,很繁琐。模型库没有分类。物理引擎为ODE,Bullet,Simbody,DART物理引擎,默认为ODE。编写插件对使用者编程能力有要求。
webots: 建模通过节点实现。场景跟机器人保存在一个世界中,更符合人的思维习惯。对于多机器人的仿真,可以复制。不用配置launch。复杂模型可以通过三维建图之后导入,2020b之前,只能通过VRML97导入,2020b之后:支持多种3D格式(3ds,dae,fbx,stl,x3d,obj等)。仿真流程:场景/机器人/传感器建模–>编写控制器代码。三轴力矩传感器,建立三轴的旋转关节,关节工作在力矩为0的情况下。模型库有分类。物理引擎为改进的ODE。
安装
但是下载下来很慢,我就用了古月居大佬的罗伯特祥的分享的链接,不过百度云下载太慢,我就把这个资源放到了 阿里云盘上,需要的可以自己下载。
webots 最新版本阿里云下载链接 提取码: yo74
内含 windows版本下的 2020a,2020b,2021a,2021b,2022a;和ubuntu amd64版本的2020a,2020b,2021a,2021b
简单使用
docs:存放离线文档;include:控制器的头文件和库。lib:编程的库;projects:资源文件,模型文件资源库和例程。resources:软件的字体,图标语言之类的。
可以直接从窗口打开帮助文档。设置中文。
在preferences中,python command 可以直接填写到python可执行文件的绝对路径。
可以显示世界坐标系。
Alt+5:快速移动到指定模型;Shirt+滚轮:上下移动;Shirt+鼠标左键:平面移动;Shirt+鼠标右键:旋转物体。
1 向导->新建项目目录。四个可选项是:中心视角 添加背景 添加光源 添加长方形的地面。
2 使用流程:添加节点(crt+shirt+a)->Base nodes->Soild(直接添加shape没有物理属性)->在children选择添加->shape 形状。其中shape里:appearance PBRAppearance里主要是设置外观描述实体表面纹理,geometry Sphere用来具体指定实体形状:adius 表半径,subdivision表细分度设 数字越大球越圆,范围1-5。在appearance为球添加一个纹理图片,具体操作如下:appearance → texture → Base nodes → ImageTexture → url → 选择纹理图片路径,即可成功添加纹理。
3 物理属性里面Physics里面:density 密度,mass 重量,centerOfMass 质心位置,inertiaMatrix 惯性矩阵,damping 阻尼参数,因为在物体里,体积是固定的,所以 density和mass只能设置一个,另外一个必须指定参数为-1使其失效。boundingObject 表示碰撞边界,可以选择添加然后一步步添加,也可以 children下的Shape节点并复制,然后选中boundingObject直接粘贴实现。
4 如果有多个形状组成的文件,可以添加soild-> 在 chileren -> group的children ->Shape。之后在Group中添加Transform 接着在Transform的children中添加别的形状。
DEF-USE Mechanism(定义机制)
DEF-USE机制允许在一个地方定义一个节点,并在场景树在其他地方重复使用的定义。这对于避免在世界文件中重复相同的节点很有用。此外,它还允许用户同时修改多个对象。它是这样工作的:首先用DEF字符串标记节点。然后,可以使用USE关键字在其他地方重用此节点的副本。只能编辑DEF节点的字段,USE的字段从DEF节点继承,并且不能更改。此机制取决于world文件中节点的顺序。应在任何相应的USE节点之前定义DEF节点。
可以实现修改一个,使用该变量的地方会出现同时修改的作用。
制作小车
重点就是 HingeJoint 节点
键盘操作的相关C语言函数
wb_keyboard_enable(TIME_STEP); :键盘使能
wb_keyboard_get_key():获得按下按键的int值
wb_keyboard_disable():键盘失能
在旋转关节HingeJoint中,HingeJointParameters用来设置关节的一些属性参数,device用来添加驱动电机、关节角度传感器以及刹车,endPoint用来对关节进行形状建模以及下一个串联关节的建模;
在设置HingeJoint的时候,注意要 jointParameters 的下的电机旋转轴axis和旋转中心 anchor 的参数。电机旋转轴axis是以父坐标系为参考系设置的。在程序运行结束后,一定要点击程序输入界面上面的齿轮,生成当前项目之后,程序才会生效。
还有就是 一定要设置 WorldInfo下的contactProperties节点,要不然差速的时候小车不会动。
#include <webots/robot.h>
#include <webots/motor.h>
#include <webots/keyboard.h>
#define TIME_STEP 64
int main(int argc, char **argv) {wb_robot_init();int i=0;WbDeviceTag wheels[4];wb_keyboard_enable(TIME_STEP);char wheels_names[4][8]= {"motor1","motor2","motor3","motor4"};for( i=0;i<4;i++){wheels[i] = wb_robot_get_device(wheels_names[i]);wb_motor_set_position(wheels[i],INFINITY);}double left_speed = 0.0;double right_speed = 0.0;while (wb_robot_step(TIME_STEP) != -1) {wb_motor_set_velocity(wheels[0],left_speed);wb_motor_set_velocity(wheels[1],right_speed);wb_motor_set_velocity(wheels[2],left_speed);wb_motor_set_velocity(wheels[3],right_speed);int new_key = wb_keyboard_get_key();while(new_key >0){switch(new_key){case 87: // wleft_speed = 6;right_speed = 6;break;case 70: // fleft_speed = 0;right_speed = 0;break;case 83: // sleft_speed = -6;right_speed = -6;break;case 65: // aleft_speed = 1;right_speed = 3;break;case 68: // dleft_speed = 3;right_speed = 1;break;}new_key = wb_keyboard_get_key();}};wb_robot_cleanup();return 0;
}
如果一切设置完成之后,发现轮子动,小车不动。一定要检查,车辆的物理属性有没有设置。一定要注意设置物理属性!!!
导出节点
在项目下新建文件夹 protos 下新建 *.proto 文件
将原来的世界文件,以记事本形式打开
PROTO protoName [
protoFilelds // 对周边环境的定义
]
{protoBody // 对机器人的代码
}
ROS2放弃指南3:webots简单使用相关推荐
- ROS2入门教程—创建一个简单的订阅者和发布者(C++版)
ROS2入门教程-创建一个简单的订阅者和发布者(C++版) 1 创建功能包 2 创建发布者节点 3 设置发布者节点依赖项 4 设置发布者节点编译规则 5 创建订阅者 6 编译并运行 节点是通过RO ...
- 胡凡 《算法笔记》 上机实战训练指南 3.1 简单模拟
胡凡 <算法笔记> 上机实战训练指南 3.1 持续更新中 , 菜鸡的刷题笔记- 大学到现在了还没咋好好刷过题,该push自己了- 文章目录 胡凡 <算法笔记> 上机实战训练指南 ...
- Seaborn入门指南:最简单的学习方法
介绍 seaborn和matplotlib一样,试图使一组定义明确的且困难的事情变得容易. Seaborn的优势: Seaborn最大的优势在于其绘图功能的多样性,它甚至允许我们只在一行代码中就绘制复 ...
- Linux下pwn从入门到放弃,pwn从入门到放弃第六章——简单ROP
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 这篇鸽了挺久的,补一下吧 简单介绍ROP 首先先来说下什么是ROP ROP是Return Oriented Progra ...
- 爬虫如何监听插件_Go 爬虫之 colly 从入门到不放弃指南
Go语言中文网,致力于每日分享编码.开源等知识,欢迎关注我,会有意想不到的收获! 最近发现知乎上感兴趣的问题越来越少,于是准备聚合下其他平台技术问答,比如 segmentfault.stackover ...
- Webots简单自学笔记(随时更新)
Webots 2019a 中文 保存!保存!随手保存!!别的不重要,随手保存是王道!!! 一.Scene tree:场景树 (一)WorldInfo:世界信息 参考手册(F4)(reference.p ...
- Go 爬虫之 colly 从入门到不放弃指南
最近发现知乎上感兴趣的问题越来越少,于是准备聚合下其他平台技术问答,比如 segmentfault.stackoverflow 等. 要完成这个工作,肯定是离不开爬虫的.我就顺便抽时间研究了 Go 的 ...
- [野火]STM32 F103 HAL库开发实战指南笔记之简单外设总结
1.GPIO编程总结 使能 GPIO 端口时钟: 初始化 GPIO 目标引脚为推挽输出模式: 编写简单测试程序,控制 GPIO 引脚输出高.低电平. 这部分宏控制 LED 亮灭的操作是直接向 BSRR ...
- (转)SCJP 认证考试指南
SCJP 认证考试指南SCJP – Sun Certified Java Programmer (Sun Java 程序员认证)第1 章 声明和访问控制目标一 创建数组数组Java 中的数组跟C/C+ ...
最新文章
- java wait定时_java定时器的使用(Timer)
- Msdn 杂志 asp.net ajax 文章汇集
- list indices must be integers or slices, not tuple
- Python之第一个helloworld的代码
- Java集合之Properties
- python查询sql_Python处理SQL语句(提供SQL查询平台使用)
- python模块版本管理工具_【转】Python包管理工具
- 【数据结构与算法】顺序表V2.0的Java实现
- 电脑广告弹窗多?安利一下:程序员常用 7 款Chrome去广告插件
- 安装net framework3.5提示需要.net framework3.5,错误代码0x800f081f
- 【高并发】高并发环境下如何防止 Tomcat 内存溢出?一文让你看懂!!
- DotNetBar2学习笔记-TabControl的使用
- 前端学习 -- HtmlCss -- 背景
- Linux Qt cannot find -lGL
- 风机疲劳载荷谱转SACS疲劳载荷定义文件
- 解决:steps/make_fbank.sh: line 132: run.pl: command not found
- java eventbus 原理_EventBus的简单使用与原理
- Dev - C++ 安装(mac/windows)
- 【LeetCode】我能赢吗 [M](记忆化搜索)
- Chart.js入门:简介