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

Webots常用的执行器(Python版)

文章目录

  • 1. RotationalMotor
  • 2. LinearMotor
  • 3. Brake
  • 4. Propeller
  • 5. Pen
  • 6. LED

1. RotationalMotor

# -*- coding: utf-8 -*-
"""motor_controller controller."""from controller import Robot# 实例化机器人
robot = Robot()# 获取基本仿真步长
timestep = int(robot.getBasicTimeStep())# 关联设备
motor = robot.getMotor('my_Rmotor')# 设置电机运行模式为速度模式
motor.setPosition(float('inf'))
motor.setVelocity(1)# Main loop:
while robot.step(timestep) != -1:pass

2. LinearMotor

# -*- coding: utf-8 -*-
"""linear motor controller."""from controller import Robot
import mathrobot = Robot()
timestep = int(robot.getBasicTimeStep())motor = robot.getMotor('my_lMotor')
#motor.setPosition(float('inf'))
#motor.setVelocity(0)# Main loop:
count = 0
while robot.step(timestep) != -1:#motor.setVelocity(1)motor.setPosition(math.sin(count)*0.5)count += 0.1

3. Brake

  • setDampingConstant(dampingConstant)函数设置关节的阻尼常数(单位Ns/m或者Nms),如果JointParameters设置了阻尼常数,那么所产生的的dampingConstant系数是JointParameters中的dampingConstant与使用该函数所设置的dampingConstant的和。即:
    实际作用的 d a m p i n g C o n s t a n t = J o i n t 中的 d a m p i n g C o n s t a n t + F u n c t i o n 设置的 d a m p i n g C o n s t a n t 实际作用的dampingConstant = Joint中的dampingConstant + Function设置的dampingConstant 实际作用的dampingConstant=Joint中的dampingConstant+Function设置的dampingConstant
# -*- coding: utf-8 -*-
"""brake controller."""from controller import Robot
from controller import Motor
from controller import Brakerobot = Robot()timestep = int(robot.getBasicTimeStep())motor = robot.getMotor('my_Rmotor')
#motor.enableTorqueFeedback(timestep)
brake = robot.getBrake('my_brake')motor.setTorque(0)# Main loop:
count = 0
while robot.step(timestep) != -1:count += 1print(count)#print("motor torque"+str(motor.getTorqueFeedback()))motor.setTorque(0.5)if count > 50:brake.setDampingConstant(1)if count >300:count = 0brake.setDampingConstant(0)

4. Propeller

在这里插入图片描述

  • 合成推力计算: T = t 1 ∗ ∣ o m e g a ∣ ∗ o m e g a − t 2 ∗ ∣ o m e g a ∣ ∗ V T = t1 * |omega| * omega - t2 * |omega| * V T=t1omegaomegat2omegaV
    其中thrustConstants中定义的两个常数为式中的t1和t2,omega为电机角速度,V是推力中心沿轴心线速度的分量。推力施加在centerOfThruse中指定的点上
  • 合成力矩计算: Q = q 1 ∗ ∣ o m e g a ∣ ∗ o m e g a − q 2 ∗ ∣ o m e g a ∣ ∗ V Q = q1 * |omega| * omega - q2 * |omega| * V Q=q1omegaomegaq2omegaV
    其中q1和q2为torqueConstants中定义的常数

以上公式计算来自:Thor I. Fossen的"Guidance and Control of Ocean Vehicles"和Raymond W. Prouty的"Helicopter Performance, Stability, and Control"

几个重要节点:

  • shaftAxis:定义沿其施加合力和扭矩的轴
  • centerOfThrust:定义推力的施加点
  • thrustConstants:定义推力计算公式中的两个常数,正旋与反旋只需将此字段中的数值设置为相反数。即正旋时,此字段数值为正,那么反旋则为此数值的负值即可
  • torqueConstants:定义转矩计算公式中的两个常数

thrustConstantstorqueConstants中的常数,在现实中,其数值由螺旋桨的倾角和方向决定

  • fastHelixThreshold:从slowHelix切换到fastHelix阀值,默认为24π rad/s
  • device:旋转电机放置的设备节点
  • fastHelixslowHelix:如果不为NULL,那么必须使用Solid节点设置这些属性;如果 ∣ o m e g a ∣ > f a s t H e l i x T h r e s h o l d |omega|>fastHelixThreshold omega>fastHelixThreshold,那么只有在fastHelix中定义的Solid是可见的,反之则只有在slowHelix中定义的Solid是可见的。

5. Pen

比较重要,通常用于显示机器人的移动轨迹,笔的绘制方向与节点-y向重合
几个重要节点:

  • inkColor:定义笔迹颜色,可通过函数定义/修改
  • inkDensity:定义颜色密度,在[0,1]之间
  • leadSize:定义笔迹宽度
  • maxDistance:定义笔与绘制表明之间最大距离,该值≤0表示绘制距离无限
  • write:使能笔的书写功能,可由函数控制
  • WorldInfo节点的inkEvaporation控制墨水消失的速度

遗憾的是,貌似只能在对象上绘制

6. LED

LED虽然在实际控制中没什么作用,但是通过LED的灯光显示我们可以传递一些信息,尤其是在实际机器人当中。

  • ① 颜色设置在LED节点下的color设置

  • LED.set(2)时,打开第二种颜色

    注意,设置的值不能超过color中设置的颜色种类

  • gradual节点定义LED节点的类型。若gradual=TRUEcolor列表为空,则为RGB LED,set()函数此时接收的值为十六进制RGB颜色值(即R8G8B8),例如红色为0xff0000gradual=FALSE,包含只有一种颜色,则为单色LED;包含多种颜色,则为多色LED;

"""LED_controller controller."""from controller import Robotrobot = Robot()
timestep = int(robot.getBasicTimeStep())LED = robot.getLED('my_led')# Main loop:
count = 0
while robot.step(timestep) != -1:count += 1print(count)print("LED状态:" + str(LED.get()))if count > 20:LED.set(1)# 打开LED,强度255if count > 40:LED.set(0)# 关闭LED,强度0count = 0
# Main loop:
count = 0
while robot.step(timestep) != -1:count += 1print(count)print("LED状态:" + str(LED.get()))if count > 20:LED.set(0xff0000)if count > 40:LED.set(0x00ff00)if count > 60:LED.set(0)count = 0

如果gradual=TRUE,而color值又非空,那么通过十六进制设置灯光颜色时,LED会发处一个光团,且颜色为color列表的第一种
在这里插入图片描述


参考文献:

  • https://cyberbotics.com/doc/reference/index
http://www.lryc.cn/news/335062.html

相关文章:

  • mySql数据库学习002-表数据查询操作
  • 【STL】stack与queue的底层原理及其实现
  • Ai大模型如何应用到机器视觉系统中
  • IntelliJ IDEA下载及安装教程(Windows操作系统)
  • 01 Python进阶:正则表达式
  • pdf图片识别分类
  • 24双非考研哈尔滨工程大学计算机(@程程笔记)
  • IO流(2.其他流)
  • PyTorch之计算模型推理时间
  • layui后台框架,将左侧功能栏目 集中到一个页面,通过上面的tab切换 在iframe加载对应页面
  • 【网络原理】使用Java基于TCP搭建简单客户端与服务器通信
  • Hadoop生态系统主要是什么?
  • GlusterFS分布式文件系统
  • spark本地模拟多个task时如何启动多个Excutor
  • RocketMQ笔记(八)SpringBoot整合RocketMQ广播消费消息
  • Appium如何自动判断浏览器驱动
  • MVCC-多版本并发控制
  • c++找最高成绩
  • 前端saas化部署
  • [Java基础揉碎]Math类
  • MyBatis输入映射
  • 金三银四,程序员求职季
  • [react优化] 避免组件或数据多次渲染/计算
  • 「意」起出发 丨意大利OXO城市展厅盛大启幕,成都设计圈共襄盛举
  • 你不知道的JavaScript---深入理解 JavaScript 作用域
  • FPGA(Verilog)实现按键消抖
  • 第十二届蓝桥杯大赛软件赛省赛C/C++大学B组
  • 面了钉钉搜广增算法岗(暑期实习),秒挂。。。。
  • 前端实现流文件下载的完整指南
  • Kotlin:常用标准库函数(let、run、with、apply、also)