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简单使用相关推荐

  1. ROS2入门教程—创建一个简单的订阅者和发布者(C++版)

    ROS2入门教程-创建一个简单的订阅者和发布者(C++版) 1 创建功能包 2 创建发布者节点 3 设置发布者节点依赖项 4 设置发布者节点编译规则 5 创建订阅者 6 编译并运行   节点是通过RO ...

  2. 胡凡 《算法笔记》 上机实战训练指南 3.1 简单模拟

    胡凡 <算法笔记> 上机实战训练指南 3.1 持续更新中 , 菜鸡的刷题笔记- 大学到现在了还没咋好好刷过题,该push自己了- 文章目录 胡凡 <算法笔记> 上机实战训练指南 ...

  3. Seaborn入门指南:最简单的学习方法

    介绍 seaborn和matplotlib一样,试图使一组定义明确的且困难的事情变得容易. Seaborn的优势: Seaborn最大的优势在于其绘图功能的多样性,它甚至允许我们只在一行代码中就绘制复 ...

  4. Linux下pwn从入门到放弃,pwn从入门到放弃第六章——简单ROP

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 这篇鸽了挺久的,补一下吧 简单介绍ROP 首先先来说下什么是ROP ROP是Return Oriented Progra ...

  5. 爬虫如何监听插件_Go 爬虫之 colly 从入门到不放弃指南

    Go语言中文网,致力于每日分享编码.开源等知识,欢迎关注我,会有意想不到的收获! 最近发现知乎上感兴趣的问题越来越少,于是准备聚合下其他平台技术问答,比如 segmentfault.stackover ...

  6. Webots简单自学笔记(随时更新)

    Webots 2019a 中文 保存!保存!随手保存!!别的不重要,随手保存是王道!!! 一.Scene tree:场景树 (一)WorldInfo:世界信息 参考手册(F4)(reference.p ...

  7. Go 爬虫之 colly 从入门到不放弃指南

    最近发现知乎上感兴趣的问题越来越少,于是准备聚合下其他平台技术问答,比如 segmentfault.stackoverflow 等. 要完成这个工作,肯定是离不开爬虫的.我就顺便抽时间研究了 Go 的 ...

  8. [野火]STM32 F103 HAL库开发实战指南笔记之简单外设总结

    1.GPIO编程总结 使能 GPIO 端口时钟: 初始化 GPIO 目标引脚为推挽输出模式: 编写简单测试程序,控制 GPIO 引脚输出高.低电平. 这部分宏控制 LED 亮灭的操作是直接向 BSRR ...

  9. (转)SCJP 认证考试指南

    SCJP 认证考试指南SCJP – Sun Certified Java Programmer (Sun Java 程序员认证)第1 章 声明和访问控制目标一 创建数组数组Java 中的数组跟C/C+ ...

最新文章

  1. java wait定时_java定时器的使用(Timer)
  2. Msdn 杂志 asp.net ajax 文章汇集
  3. list indices must be integers or slices, not tuple
  4. Python之第一个helloworld的代码
  5. Java集合之Properties
  6. python查询sql_Python处理SQL语句(提供SQL查询平台使用)
  7. python模块版本管理工具_【转】Python包管理工具
  8. 【数据结构与算法】顺序表V2.0的Java实现
  9. 电脑广告弹窗多?安利一下:程序员常用 7 款Chrome去广告插件
  10. 安装net framework3.5提示需要.net framework3.5,错误代码0x800f081f
  11. 【高并发】高并发环境下如何防止 Tomcat 内存溢出?一文让你看懂!!
  12. DotNetBar2学习笔记-TabControl的使用
  13. 前端学习 -- HtmlCss -- 背景
  14. Linux Qt cannot find -lGL
  15. 风机疲劳载荷谱转SACS疲劳载荷定义文件
  16. 解决:steps/make_fbank.sh: line 132: run.pl: command not found
  17. java eventbus 原理_EventBus的简单使用与原理
  18. Dev - C++ 安装(mac/windows)
  19. 【LeetCode】我能赢吗 [M](记忆化搜索)
  20. Chart.js入门:简介

热门文章

  1. Matplotlib详解
  2. Python画王者荣耀英雄能力雷达图
  3. linux在线模拟器
  4. JavaScript内置对象 之 Math数学对象
  5. “微软让我损失了两亿美金!”
  6. 【莫烦Python】Matplotlib Python 画图教程 设置坐标轴
  7. Android端外推送到底有多烦?
  8. 放着放着假,公司就倒闭了
  9. ESP32-C3驱动BH1750(GY-30)
  10. C 中用语言描述出下述方法的功能,指出下列各句运用的描写方法。(填序号)A.语言描写B.动作描写C.心...