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.mzph.cn/news/802878.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT/GPT4科研应用与绘图技术及论文写作

2023年随着OpenAI开发者大会的召开,最重磅更新当属GPTs,多模态API,未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义,不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…

2024年第十七届“认证杯”数学中国数学建模网络挑战赛思路

2024年第十七届“认证杯”数学中国数学建模网络挑战赛将于2024年4月举行。 比赛两个阶段统一报名,参赛费为每队100元人民币(两个阶段总共)。如果需要组委会提供详细的论文评价,需要再支付100元人民币的论文点评费(即每个参赛队支…

c++的学习之路:19、模板

摘要 本章主要是说了一些模板,如非类型模板参数、类模板的特化等等,文章末附上测试代码与导图 目录 摘要 一、非类型模板参数 二、类模板的特化 1、概念 2、函数模板特化 3、类模板特化 三、模板的分离编译 1、什么是分离编译 2、模板的分离编…

2024.4.8力扣每日一题——使数组连续的最少操作数

2024.4.8 题目来源我的题解方法一 去重排序滑动窗口 题目来源 力扣每日一题;题序:2009 我的题解 方法一 去重排序滑动窗口 参考官方题解。 记数组 nums的长度为 n。经过若干次操作后,若数组变为连续的,那么数组的长度不会改变&…

ip地址切换器安卓版,保护隐私,自由上网

在移动互联网时代,随着智能手机和平板电脑的普及,移动设备的网络连接变得愈发重要。为了满足用户在不同网络环境下的需求,IP地址切换器安卓版应运而生。本文将以虎观代理为例,为您详细解析IP地址切换器安卓版的功能、应用以及其所…

UVA1596 Bug Hunt 找Bug 解题报告

题目链接 https://vjudge.net/problem/UVA-1596 题目大意 输入并模拟执行一段程序,输出第一个bug所在的行。每行程序有两种可能: 数组定义,格式为arr[size]。例如a[10]或者b[5],可用下标分别是0~9和0~4…

Linux压缩打包

压缩文件有时候也叫归档文件,但是归档是将多个文件捆绑成一个文件,并没有压缩,压缩才是将大小压缩的更小。 tar 压缩 tar -zcf 压缩后文件名.tar.gz 需要压缩的文件 [rootlocalhost ~]# tar -zcf ser.tar.gz services压缩多个文件 [rootloca…

克服与新一代人工智能部署相关的数据挑战

随着商界领袖逐渐了解该技术的力量和潜力,人们对 ChatGPT 等生成式人工智能工具的潜力的兴趣正在迅速上升。 这些工具能够创建以前属于人类创造力和智力领域的输出,有潜力改变许多业务流程,并成为每个人(从作家和创作者到程序员和…

题目:学习使用按位异或 ^

题目:学习使用按位异或 ^ There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog content is all parallel goods. Those who are worried about being cheated should leave q…

蓝桥杯加训

1.两只塔姆沃斯牛&#xff08;模拟&#xff09; 思路&#xff1a;人和牛都记录三个数据&#xff0c;当前坐标和走的方向&#xff0c;如果人和牛的坐标和方向走重复了&#xff0c;那就说明一直在绕圈圈&#xff0c;无解 #include<iostream> using namespace std; const i…

openstack-认证服务

整个OpenStack是由控制节点&#xff0c;计算节点&#xff0c;网络节点&#xff0c;存储节点四大部分组成。 openstack重要集成组件: Nova-计算服务&#xff1b;Neutron-网络服务&#xff1b;Swift-对象存储服务&#xff1b;Cinder-块存储服务&#xff1b;Glance-镜像服务Keys…

LeetCode-118. 杨辉三角【数组 动态规划】

LeetCode-118. 杨辉三角【数组 动态规划】 题目描述&#xff1a;解题思路一&#xff1a;Python 动态规划解题思路二&#xff1a;解题思路三&#xff1a;0 题目描述&#xff1a; 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&…

算法学习系列(四十五):DFS之剪枝与优化

目录 引言DFS之剪枝与优化一、小猫爬山二、木棒三、数独四、总结 引言 关于这个 D F S DFS DFS 的剪枝和优化确实难度是非常的大&#xff0c;从我这篇文章的思路和代码量上就能看出来不是一般的难度&#xff0c;而且难度不亚于 D P DP DP &#xff0c;而且这个 D F S DFS D…

Go语言支持重载吗?如何实现重写?

Go语言不支持传统意义上的函数和方法重载。在Go语言中&#xff0c;函数名或方法名不能相同但参数列表不同&#xff0c;因为这会导致编译错误。 然而&#xff0c;可以通过方法重写&#xff08;override&#xff09;来实现类似的功能。方法重写是指在子类中定义一个与父类同名的…

C语言进阶课程学习记录-第27课 - 数组的本质分析

C语言进阶课程学习记录-第27课 - 数组的本质分析 数组实验-数组元素个数的指定实验-数组地址与数组首元素地址实验-指针与数组地址的区别小结 本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程&#xff0c;图片全部来源于课程PPT&#xff0c;仅用于个人学习记录 数组 实验-数…

Hot100【十一】:编辑距离

// 定义dp[i][j]: 表示word1前i个字符转换到word2前j个字符最小操作数 // 初始化dp[m1][n1] class Solution {public int minDistance(String word1, String word2) {int m word1.length();int n word2.length();// 1. dp数组int[][] dp new int[m 1][n 1];// 2. dp数组初…

分布式系统接口限流方案

方案一、 Guava工具包 实现单机版限流 Demo的Git地址&#xff1a;https://gitee.com/deepjava/test-api-limit.git 使用Google的Guava工具包提工单 RateLimiter类 可以实现单机状态下的接口限流 RestController RequestMapping("/test") public class ApiLimitCon…

IO流:将文件从A复制到B,并实现复制过程进度条的实现

private static boolean copyFile(String strFileA, String strFileB) {// 使用try资源块 ,其中创建的流对象可以自动关闭try (FileInputStream inputStream new FileInputStream(strFileA); // 输入流FileOutputStream outputStream new FileOutputStream(strFileB) // 输…

【Linux】进程的状态(运行、阻塞、挂起)详解,揭开孤儿进程和僵尸进程的面纱,一篇文章万字讲透!!!!进程的学习②

目录 1.进程排队 时间片 时间片的分配 结构体内存对齐 偏移量补充 对齐规则 为什么会有对齐 2.操作系统学科层面对进程状态的理解 2.1进程的状态理解 ①我们说所谓的状态就是一个整型变量&#xff0c;是task_struct中的一个整型变量 ②.状态决定了接下来的动作 2.2运行状态 2.…

自动化运维(十)Ansible 之进程管理模块

Ansible的进程管理模块提供了一种强大而灵活的方式来管理和操作各种进程管理器和服务。无论你使用的是Supervisor、Systemd、传统的init脚本还是Runit,这些模块都可以帮助你轻松地管理服务的生命周期。通过合理地使用这些模块,你可以实现服务的自动化管理,提高系统的可靠性和稳…