当前位置: 首页 > 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

相关文章:

Webots常用的执行器(Python版)

文章目录 1. RotationalMotor2. LinearMotor3. Brake4. Propeller5. Pen6. LED 1. RotationalMotor # -*- coding: utf-8 -*- """motor_controller controller."""from controller import Robot# 实例化机器人 robot Robot()# 获取基本仿真步长…...

mySql数据库学习002-表数据查询操作

表数据查询操作 表数据如下: idnameagegenderclasscreatedAtupdatedAt1张三20男一班2024-04-08 09:15:092024-04-08 09:15:092李四19女一班2024-04-08 09:15:092024-04-08 09:15:093王五21女二班2024-04-08 09:15:092024-04-08 09:15:094赵六18女二班2024-04-08 0…...

【STL】stack与queue的底层原理及其实现

文章目录 stack的介绍库中stack的使用栈的模拟实现queue的介绍库中queue的使用queue的模拟实现 stack的介绍 (图片来自知乎) 1.stack是一种容器适配器,模拟了栈的数据结构。数据只能从一端进去,另一端出来(先进后出&am…...

Ai大模型如何应用到机器视觉系统中

AI大模型在机器视觉系统中的应用可以通过以下几个步骤实现: 1. 数据准备与预处理: - 收集和标注大量高质量的图像数据,这些数据应该覆盖机器视觉系统需要处理的各种场景和对象。 - 对图像数据进行预处理,包括去噪、标准化、增强等…...

IntelliJ IDEA下载及安装教程(Windows操作系统)

一、下载IntelliJ IDEA 1、访问JetBrains官方网站 打开浏览器,输入网址 https://www.jetbrains.com/idea/ 进入IntelliJ IDEA官方主页。 2、选择产品版本 IntelliJ IDEA分为免费的Community Edition(社区版)和付费的Ultimate Edition&…...

01 Python进阶:正则表达式

re.match函数 使用 Python 中的 re 模块时,可以通过 re.match() 函数来尝试从字符串的开头匹配一个模式。以下是一个简单的详解和举例: import re# 定义一个正则表达式模式 pattern r^[a-z] # 匹配开头的小写字母序列# 要匹配的字符串 text "h…...

pdf图片识别分类

文章目录 解析pdf数据ocr识别分类方法正则匹配词频统计分类模型 分类完提示 解析pdf数据 试了几种方法 fitz-get_image后面方法不适用,用pixmap分辨率低 用pypdf2版本低方法用不了 用pdf2image还要下依赖工具 用spire.pdf的SaveAsImage分辨率低,Extract…...

24双非考研哈尔滨工程大学计算机(@程程笔记)

前言 个人情况,本科双非考研软件工程。24考研成绩总分369(政治75,英语58,数学102,专业课134),整体各科成绩比较均衡,没有太突出和瘸腿的,初始排名5/19,复试后排名5/13。 政治 政治…...

IO流(2.其他流)

能够高效读写的缓冲流,能够转换编码的转换流,能够持久化存储对象的序列化流 一、缓冲流 缓冲流,也叫高效流,是对4个基本的FileXxx 流的增强,所以也是4个流,按照数据类型分类: 字节缓冲流:Buffe…...

PyTorch之计算模型推理时间

一、参考资料 如何测试模型的推理速度 Pytorch 测试模型的推理速度 二、计算PyTorch模型推理时间 1. 计算CPU推理时间 import torch import torchvision import time import tqdm from torchsummary import summarydef calcCPUTime():model torchvision.models.resnet18()…...

layui后台框架,将左侧功能栏目 集中到一个页面,通过上面的tab切换 在iframe加载对应页面

实现上面的 功能效果。 1 html代码 <form class"layui-form layui-form-pane" action""><div class"layui-tab" lay-filter"demo"><ul class"layui-tab-title"><li id"a0" class"lay…...

【网络原理】使用Java基于TCP搭建简单客户端与服务器通信

目录 &#x1f384;API介绍&#x1f338;ServerSocket API&#x1f338;Socket API &#x1f340;TCP中的长短连接&#x1f333;建立TCP回显客户端与服务器&#x1f338;TCP搭建服务器&#x1f338;TCP搭建客户端 ⭕总结 TCP服务器与客户端的搭建需要借助以下API &#x1f384;…...

Hadoop生态系统主要是什么?

Hadoop生态系统主要由以下几部分组成&#xff1a; Hadoop HDFS&#xff1a;这是Hadoop的核心组件之一&#xff0c;是一个用于存储大数据的分布式文件系统。它可以在廉价的硬件上提供高度的容错性&#xff0c;通过数据复制和故障切换实现数据的高可用性。 MapReduce&#xff1a…...

GlusterFS分布式文件系统

前言 存储可分为文件存储和对象存储&#xff0c;常见的文件存储相关技术有&#xff1a;nfs、lvm、raid&#xff1b;常见的对象存储相关技术有&#xff1a;gfs、ceph、fdfs、nas、oss、s3、switch。GlusterFS 归类为文件存储系统&#xff0c;它提供了一种强大的方式来管理和存储…...

spark本地模拟多个task时如何启动多个Excutor

1、首先在9090端口下启动Excutor,作为第一个Excutor 2、然后修改9090端口为&#xff1a;9091&#xff0c;如下图点击Edit Configration 3、然后按下图操作 &#xff0c; 4、修改一下名字 5、点击apply&#xff0c;&#x1f197; 6、检查下面圈1是否是刚刚我们新建的MyExcutor(2…...

RocketMQ笔记(八)SpringBoot整合RocketMQ广播消费消息

目录 一、简介1.1、消费模式 二、消费者2.1、maven依赖2.2、application配置2.3、消费监听 三、生产者3.1、发送消息3.2、运行结果 四、其他 一、简介 在之前的文章中&#xff0c;我们讲过了&#xff0c;同步发送单条消息&#xff0c;异步发送单条消息&#xff0c;发送单向消息…...

Appium如何自动判断浏览器驱动

问题&#xff1a;有的测试机chrome是这个版本&#xff0c;有的是另一个版本&#xff0c;怎么能让自动判断去跑呢&#xff1f;&#xff1f; 解决办法&#xff1a;使用appium的chromedriverExecutableDir和chromedriverChromeMappingFile 切忌使用chromedriverExecutableDir和c…...

MVCC-多版本并发控制

MVCC&#xff08;多版本并发控制&#xff09;简介 在数据库系统中&#xff0c;并发控制是一个非常重要的话题。为了提高系统的并发性能和吞吐量&#xff0c;现代数据库系统通常使用多种技术来实现对数据的安全访问&#xff0c;其中一种重要的技术就是多版本并发控制&#xff0…...

c++找最高成绩

根据给定的程序&#xff0c;写成相关的成员函数&#xff0c;完成指定功能。 函数接口定义&#xff1a; 定义max函数&#xff0c;实现输出最高成绩对应的学号以及最高成绩值。 裁判测试程序样例&#xff1a; #include <iostream> using namespace std; class Student{…...

前端saas化部署

在项目中难免会遇到一些特殊的需求&#xff0c;例如同一套代码需要同时部署上两个不同的域名A和B。A和B的不同之处仅在于&#xff0c;例如一些背景图片&#xff0c;logo&#xff0c;展示模块的不同&#xff0c;其他业务逻辑是和展示模块是完全一样的。此时我们当然可以考虑单独…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

用鸿蒙HarmonyOS5实现中国象棋小游戏的过程

下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...