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. UVA 10245 The Closest Pair Problem
  2. jQuery 效果 - 动画 animate() 方法
  3. 求10 翻译c语言,求助:谁能帮我翻译下最基础的C语言,我是新手,谢谢了!
  4. Spark GraphX算法 - Pregel算法
  5. [Android疑难杂症]动态设置TextView的width不起作用
  6. 教你如何快速查询快递物流,并自动识别已签收单号
  7. html制作排班表模板,你会制作排班表吗?手把手教你用Word制作!分分钟搞定!...
  8. ah、esp、gre协议_AH,ESP的协议号和它们支持的功能有何差异?两种模式下的差异是什么?...
  9. 【C++】C++ 内存分配(new,operator new)详解
  10. 简述搜索引擎的分类及其特点
  11. centos7时间校准
  12. 常见服务器默认管理口地址
  13. QOne、QData开关机操作
  14. python中transform_Python rendering.Transform方法代码示例
  15. APP爬虫|frida-某资讯app逆向过程,带你一起使用 frida 进行完整逆向
  16. 阿里云OpenAPI调用时遇到Specified access key is not found怎么办?
  17. python爬取b站弹幕分析_B站弹幕爬取原理解析(python)
  18. 记一个npm安装问题 Refusing to delete xxx\.bin\xxx.cmd: is outside xxx\webpack and not a link
  19. linux scp控制带宽,Linux系统中安装使用Trickle来控制用户带宽
  20. iptable 笔记

热门文章

  1. kettle的api开发
  2. C#+WPF 股票K线制作(包含时间/ 开盘价/ 最高价/最低价/ 收盘价 / 成交量)
  3. 赴兄弟连学习缘由并序
  4. 《精通PHP+MySQL动态网站开发》
  5. 纵享丝滑滑动切换的周月日历,水滴效果,丰富自定义日历样式
  6. 何钦铭版C语言第3章答案,何钦铭版C语言第3章答案.pdf
  7. 夜光祝愿大家 520 快乐
  8. 亚当斯分区曝光法俗解之三
  9. luogu2807三角形计数
  10. OJ——1014计算三角形面积