webots 笔记

第一天 Controller Programming

开始

#include <webots/xyz.h> 头文件表示Webots的一个节点。

  • 代码也可以包含C语言的标准库,比如 #include <stdio.h>

  • wb_robot_init()是C语言API 的初始化函数。就是用C语言来编写控制器的话用这个函数来进行初始化

    • 该函数初始化控制器与Webots之间的通信,并且仅在C语言里存在。
  • 最高层的控制代码一般写在 for 或者 while 循环里。在此循环里调用wb_robot_step()函数。

    • 该函数需要在所有控制器中出现,它让程序有规则的时隔。
    • 它会运算32ms的仿真后反馈。这里的时间并不是实际的时间,它会是毫秒或者一分钟对应的CPU时间。
  • 实例

    /** File:          hello_world.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 <stdio.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");*//* main loop* Perform simulation steps of TIME_STEP milliseconds* and leave the loop when the simulation is over*/while(1){printf("Hello World!\n");wb_robot_step(32);}//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;
    }
    

传感器读取

  • 先使用设备(device)之前, 必须要给定相应的设备(device)标签。Wb_Device_Tag

    • 该标签调用wb_robot_get_device(”string“)
    • 该标签是隐含类型,它在控制代码里用于识别设备或者装置。
    • string代表设备名称。
    • 如果该机器人没有此设备就返回 0
  • 每个传感器必须使用之前被打开,相应的函数为wb_*_enable()。这里的星号表示传感器的类型。

    • 每个传感器的数据都以毫秒为单位更新。
    • 一般情况下更新数据的延迟是跟控制步伐(TIME_STEP)相似,因为它是每个wb_robot_step()运行后被更新。
    • 这个时隔也可以选择为两个step,越大的更新延迟可以提高仿真速度,比如相机。
    • 关闭函数为wb_*_disable()
  • 传感器值是调用wb_robot_step()函数的时候更新的。比如用wb_distance_sensor_get_value()找回最新值。

  • 一些传感器的标签如下:

    1 const double *wb_gps_get_values(WbDeviceTag tag);//GPS定位
    2 const double *wb_accelerometer_get_values(WbDeviceTag tag);//加速度传感器
    3 const double *wb_gyro_get_values(WbDeviceTag tag);//陀螺仪
    
  • GPS传感器的使用实例

    const double *pos = wb_gps_get_values(gps);//OK, to read the values they should never be explicilty deleted by the controller code.printf("MY_ROBOT_is_at_position:%g %g %g\n", pos[0],pos[1],pos[2]);//OK, to copy the values
    double x,y,z;
    x = pos[0];
    y = pos[1];
    z = pos[2];//OK, another wa to copy the values
    double a[3] = {pos[0],pos[1],pos[2]};//OK, yet another wa to copy these values
    double b[3];
    memcpy(b,pos,sizeof(b));
    • 一些不对的用法

      const double *pos = wb_gps_get_values(gps);pos[0] = 3.5;         //ERROR: assigment of read-only location
      double a = pos[3];    //ERROR: index out of range
      delete [] pos;        //ERROR: illegal free
      free(pos);            //ERROR: illegal free
      
  • 实例

    /** File:          distance_sensor.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/distance_sensor.h>
    #include <stdio.h>/** You may want to add macros here.*/
    #define TIME_STEP 32/** 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");*/WbDeviceTag ds = wb_robot_get_device("my_distance_sensor");wb_distance_sensor_enable(ds, TIME_STEP);while(1){wb_robot_step(TIME_STEP);double dist = wb_distance_sensor_get_value(ds);printf("sensor value is %f\n", dist);}/* 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学习笔记相关推荐

  1. Webots学习笔记(四)---舵轮模型

    最近在学习webots这个软件,又因为Robocon赛事上舵轮是一大热点,所以想利用webots软件做一下舵轮的简单仿真 舵轮 之前做了四轮小车的模型,对于四个舵轮轮系来看,就是加了四个转向轮,每个轮 ...

  2. Webots学习笔记(一)---初识软件+建立简单模型

    (一)Webots简介 Webots是Cyberbotics公司出品的便携式机器人仿真平台,可运行在windows,Mac和Linux上,内建3D编辑器,可构建3D机器人模型.应用C++或JAVA或者 ...

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

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

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

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

  5. Webots学习笔记 6.轮式机器人建模和简单控制

    轮式机器人建模和简单控制 本章目标:建立如下图四轮小车,并进行简易操控 对于Webots,xyz坐标方向如下图: 一.建模 1.分解机器人模型 预备知识: 包含solid node和其派生节点的集合统 ...

  6. Webots学习笔记(二)---创建四轮小车模型

    四轮小车模型 本文将创建如下一个四轮小车模型 模型建立 (一)新建模型 创建新的项目后,增加地板作为大地 在本文建立的四轮底盘中,共有一个车体(body)+四个轮子,所以共五个实体节点 (1)建立车体 ...

  7. V-rep机器人仿真软件使用的学习笔记

    本博客同时发布于个人主页:www.doctorsrn.cn 本博客续:V-rep机器人仿真软件使用的学习笔记-续 相关博客:V-rep中机械臂惯性参数的获取方法 前言 这篇博客主要是记录自己学习和使用 ...

  8. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  9. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

最新文章

  1. GAN人脸修复--Generative Face Completion
  2. 如何表示数组所有数都不等于一个数_每日算法系列【LeetCode 523】连续的子数组和...
  3. Android的多任务之路
  4. html浮动炫酷样式,jQuery和CSS3炫酷表单浮动标签特效
  5. dg oracle 切换模式_谈谈dg切换涉及的概念:switchover和failover区别
  6. 心动的本质是什么_那一刻,我怦然心动了......
  7. 实践练习四:迁移 MySQL 数据到 OceanBase 集群
  8. Puppet常用配置与管理
  9. mysql----索引
  10. Python学习(5)——内置函数
  11. npy文件转图像并显示
  12. 数据库关闭的四种方式
  13. x509证书验签方法,支持国密证书
  14. 肝主筋,肾主骨,脾主肉,心主脉,肺主皮毛
  15. 访问FTP站点下载文件,提示“当前的安全设置不允许从该位置下载文件”
  16. 明天9:00 | ECCV 2022 全球博士TalK——计算机视觉领域顶会
  17. 为什么阿里,腾讯,百度和京东都是在开曼岛注册的?
  18. [网络安全学习篇3]:批处理、病毒、用户与组管理、破解系统密码(千峰网络安全视频笔记 3 day)
  19. C#dataGridView 知识(示例代码)以及相关的经验技巧
  20. ITIL 4 升级大揭秘,你关心的问题都全了!

热门文章

  1. 食堂点餐系统微信小程序的设计与实现
  2. python----实战训练100例
  3. 第十四届蓝桥杯C/C++b组冶炼金属(C语言版二分做法)
  4. python_浅谈python多线程
  5. 品牌定位的十五种法则
  6. 【c语言】判断一个字符串是否包含另一个字符串
  7. Packets——包裹打包 贪心
  8. android 检验助手,英腾检验助手APP
  9. OpenMV使用技巧
  10. TCP的推送比特PSH(Push)