当前位置: 首页 > news >正文

网站备案太麻烦快站优惠券app

网站备案太麻烦,快站优惠券app,微信服务号绑定网站,wordpress菜单 标题属性本文主要内容是如何编写Webots控制器#xff0c;使用语言为Python。 文章目录 1. 新增控制器2. Hello World Example3. 读取传感器4. 使用执行器5. 理解step和robot.step函数6. 同时使用传感器和执行器7. 控制器参数 1. 新增控制器 对机器人Robot新增控制器的方式#xff1…本文主要内容是如何编写Webots控制器使用语言为Python。 文章目录 1. 新增控制器2. Hello World Example3. 读取传感器4. 使用执行器5. 理解step和robot.step函数6. 同时使用传感器和执行器7. 控制器参数 1. 新增控制器 对机器人Robot新增控制器的方式 Wizards - New Robot Controller 默认的Python代码模版是 # You may need to import some classes of the controller module. Ex: # from controller import Robot, Motor, DistanceSensor # 1. 导入相关控制器类 from controller import Robot# create the Robot instance. # 2. 实例化控制器类得到控制的对象 robot Robot()# get the time step of the current world. # 3. 获取环境仿真时间步 timestep int(robot.getBasicTimeStep())# You should insert a getDevice-like function in order to get the # instance of a device of the robot. Something like: # 4. 获取要操控的设备并设置仿真时间步 # motor robot.getDevice(motorname) # ds robot.getDevice(dsname) # ds.enable(timestep)# Main loop: # - perform simulation steps until Webots is stopping the controller # 5. 主循环中按照时间步进行仿真 while robot.step(timestep) ! -1:# Read the sensors:# Enter here functions to read sensor data, like:# val ds.getValue()# Process sensor data here.# Enter here functions to send actuator commands, like:# motor.setPosition(10.0)pass# Enter here exit cleanup code. 可以看到一般控制器程序的代码可以分为五部分 导入相关控制器类实例化控制器类得到控制的对象获取环境仿真时间步获取要操控的设备并设置仿真时间步主循环中按照时间步进行仿真 2. Hello World Example from controller import Robotrobot Robot()while robot.step(32) ! -1:print(Hello World!)在主循环中每隔32ms会进行执行一次执行的内容可能需要1ms也可能需要1min的时间完成这次仿真的推进具体的时间需要看执行内容的复杂程度。 3. 读取传感器 from controller import Robot, DistanceSensorTIME_STEP 32robot Robot()# my_distance_sensor这个需要根据你命名的传感器名称进行定义 sensor robot.getDevice(my_distance_sensor) # 传感器需要先启用才能使用TIME_STEP传感器的两次数据更新的时间间隔 # 一般设置TIME_STEP和仿真时间步相同 sensor.enable(TIME_STEP)while robot.step(TIME_STEP) ! -1:value sensor.getValue()print(Sensor value is: , value)需要注意的是有些传感器返回的值不是标量而是向量如下代码所示 GPS.getValues() Accelerometer.getValues() Gyro.getValues()# return the sensor measurement as an array of 3 floating point numbers: [x, y, z].values gps.getValues()# OK, to read the values they should never be explicitly deleted by the controller code print(MY_ROBOT is at position: %g %g %g % (values[0], values[1], values[2]))# there is no need to copy these values4. 使用执行器 下面的示例显示了如何使用 2 Hz 正弦信号使旋转电机振荡。 from controller import Robot, Motor from math import pi, sinTIME_STEP 32robot Robot() # 获取机器人上名为my_motor的电机设备 motor robot.getDevice(my_motor)# 设置频率F为2 Hz用于控制电机的周期性运动使电机每秒进行两个完整周期的运动。 F 2.0 # frequency 2 Hz t 0.0 # elapsed simulation timewhile robot.step(TIME_STEP) ! -1:position sin(t * 2.0 * pi * F)motor.setPosition(position)t TIME_STEP / 1000.0与传感器不同执行器不需要明确启用。为了控制运动通常有用的是将运动分解为与控制步骤相对应的离散步骤。和以前一样这里使用无限循环在每次迭代时根据正弦方程计算新的目标位置。 需要注意的是motor.setPosition 函数存储新位置但它不会立即启动电机。有效驱动调用 robot.step 函数开始。 当 robot.step 函数返回时电机已移动一定的线性或旋转量该量取决于目标位置、控制步骤的持续时间使用 robot.step 函数参数指定、速度、加速度、力等电机“.wbt”描述中指定的参数。例如如果指定非常小的控制步长或较低的电机速度则当 robot.step 函数返回时电机不会移动太多。在这种情况下旋转电机需要几个控制步骤才能到达目标位置。如果指定更长的持续时间或更高的速度则当 robot.step 函数返回时电机可能已完全完成运动。 请注意motor.setPosition 函数仅指定所需的目标位置。就像真实的机器人一样旋转电机有可能无法到达该位置仅在基于物理的模拟中因为它被障碍物阻挡或因为电机的扭矩最大力不足以抵抗重力等。 如果要同时控制多个旋转电机的运动则需要使用motor.setPosition 函数分别为每个旋转电机指定所需的位置。然后您需要调用一次 robot.step 函数来同时驱动所有旋转电机。 5. 理解step和robot.step函数 Webots 使用两种不同的时间步长 The simulation step在场景树中指定WorldInfo.basicTimeStepThe control step指定为每个机器人的 robot.step 函数的参数 The simulation step模拟步长是 WorldInfo.basicTimeStep 中指定的值以毫秒为单位。它表示一步模拟的持续时间即两次计算每个模拟对象的位置、速度、碰撞等的时间间隔。如果模拟使用physics (vs. kinematics)则模拟步骤还指定需要应用于模拟刚体的力和扭矩的两次计算之间的间隔。 The control step控制步长是控制循环迭代的持续时间。它与传递给 robot.step 函数的参数相对应。robot.step 函数将指定持续时间的控制器时间提前。同时它还会根据控制器时间将传感器和执行器数据与模拟器同步。 每个控制器都需要定期调用 robot.step 函数。如果控制器不调用 robot.step 函数则传感器和执行器将不会更新并且模拟器将阻塞仅在同步模式下。因为需要定期调用所以 robot.step 函数调用通常放在控制器的主循环中。 a simulation step的执行是一个原子操作它不能被中断。因此传感器测量或电机驱动只能在两个simulation step之间进行。因此每个 robot.step 函数调用指定的The control step必须是simulation step的倍数。因此例如如果simulation step为 16 ms则传递给 robot.step 函数的控制步参数可以是 16、32、64、128 等。 如果模拟以逐步模式运行即通过单击Step按钮则执行具有模拟步骤持续时间的单个步骤。下图详细描述了仿真状态、控制器状态和Step点击之间的同步。 6. 同时使用传感器和执行器 Webots 和每个机器人控制器在不同的进程中执行。例如如果模拟涉及两个机器人则总共会有三个进程一个是 Webots 进程两个是两个机器人进程。在调用 robot.step 函数时每个机器人控制器进程都会与 Webots 进程交换传感器和执行器数据。例如my_leg.setPosition 函数不会立即将数据发送给 Webots。相反它会在本地存储数据并在调用 robot.step 函数时有效发送数据。 因此下面的代码片段是一个糟糕的示例。显然第一次调用 my_leg.setPosition 函数时指定的值将被第二次调用覆盖 my_leg.setPosition(0.34) # BAD: ignored my_leg.setPosition(0.56) robot.step(40) # BAD: we dont test the return value of this function同样这段代码也没有什么意义 while robot.step(40) ! -1:d1 sensor.getValue()d2 sensor.getValue()if d2 d1: # WRONG: d2 will always equal d1 hereavoidCollision()由于在两次传感器读数之间没有调用 robot.step 函数因此传感器返回的值不可能在此期间发生变化。一个正确的版本如下 while robot.step(40) ! -1:d1 sensor.getValue()if robot.step(40) -1:breakd2 sensor.getValue()if d2 d1:avoidCollision()然而通常推荐的方法是在主控制循环中调用一个 robot.step 函数并使用它同时更新所有传感器和执行器如下所示 while robot.step(40) ! -1:readSensors()actuateMotors()请注意在循环开始时调用 robot.step函数非常重要以确保传感器在进入 readSensors 函数之前已经具有有效值。 这是一起使用传感器和执行器的完整示例。这里使用的机器人使用差速转向。它使用两个距离传感器DistanceSensor来检测障碍物。 from controller import Robot, Motor, DistanceSensorTIME_STEP 32robot Robot()left_sensor robot.getDevice(left_sensor) right_sensor robot.getDevice(right_sensor) left_sensor.enable(TIME_STEP) right_sensor.enable(TIME_STEP)left_motor robot.getDevice(left_motor) right_motor robot.getDevice(right_motor) left_motor.setPosition(float(inf)) right_motor.setPosition(float(inf)) left_motor.setVelocity(0.0) right_motor.setVelocity(0.0)while robot.step(TIME_STEP) ! -1:# read sensorsleft_dist left_sensor.getValue()right_dist right_sensor.getValue()# compute behavior (user functions)left compute_left_speed(left_dist, right_dist)right compute_right_speed(left_dist, right_dist)# actuate wheel motorsleft_motor.setVelocity(left)right_motor.setVelocity(right)在Webots仿真环境中控制电机的方式主要有两种位置控制和速度控制。而在这段代码中通过将电机的位置设置为“无限”float(inf)就可以使电机进入速度控制模式 。 位置控制模式通常情况下如果给电机设置一个固定的目标位置例如一个角度或距离电机会尝试旋转到该位置并停在那里这就是“位置控制”。速度控制模式通过将电机位置设为“无限”float(inf)Webots将认为电机的目标位置是无限远的这种情况下电机会进入“速度控制模式”即不再关注目标位置而是只根据设定的速度值进行旋转或移动。 7. 控制器参数 在.wbt 文件中可以指定控制器启动时传递的参数。这些参数在机器人节点的 controllerArgs 字段中指定并作为主函数的参数传递。例如这可用于指定每个机器人控制器的不同参数。请注意使用 MATLAB 时不支持控制器参数检索。 比如 Robot {...controllerArgs one two three... }如果控制器的名称是 “demo”那么就会出现这段示例控制器代码 from controller import Robot import sysrobot Robot()for i in range(0, len(sys.argv)):print(argv[%i]%s % (i, sys.argv[i]))argv[0]demo argv[1]one argv[2]two argv[3]three
http://www.dnsts.com.cn/news/172512.html

相关文章:

  • 厦门中信网站国家企信网官网登录入口
  • 百度广告投放平台seo就业前景如何
  • 媒体查询做响应式网站logo设计图片免费 图案
  • 流媒体 网站开发影视公司网站建设
  • 网站管理员有哪些权限企业登录
  • 网站建设有哪些特点公司介绍网站源码
  • 网站代码免费的外贸网站是用什么软件做的
  • 余姚网站推广策划案岫岩网站建设
  • 网站做代理需要空间是多少钱广州外贸网站建设公司价格
  • 网站上线前营销推广工作准备微信开发小程序教程
  • 网站有哪几种类型莱芜都市网下载
  • 做各国民宿租赁的网站深圳语种网站建设
  • 网站如何备案流程无锡门户网站制作电话
  • 沈阳公司网站设计制作app网站区别
  • 中通建设计院网站wordpress 空间商
  • 企业模板网站建设小程序api开发
  • 想做外贸做哪些网站电子商务平台经营者有哪些义务
  • 国外中文网站排行重庆网站建设制作设计
  • 织梦 网站首页win8建立网站
  • 服装网站建设需求分析网站建设公司企业模板下载
  • 网站进度条做多大免费模板下载word
  • 学校类网站特点网络建设方案怎么做
  • 网站设计技术方案河南省建设厅建筑信息网官网
  • 生物类培养基网站建设 中企动力seo工作内容有哪些
  • 重庆网站推广软件怎么使用wordpress
  • 四川省城乡建建设人事考试网站深圳网上行公司怎么样
  • 邢台建设银行官方网站wordpress更改域名
  • 商业网站设计方案模板做家教有什么网站
  • 在什么网站做调查问卷python免费编程软件
  • 外贸个人网站网站建设会议议程