Webots常用的执行器(Python版)

news2024/11/25 18:59:42

文章目录

  • 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 math


robot = 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 Brake

robot = 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 += 1
    print(count)
    #print("motor torque"+str(motor.getTorqueFeedback()))
    motor.setTorque(0.5)
    if count > 50:
        brake.setDampingConstant(1)
    if count >300:
        count = 0
        brake.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 Robot

robot = Robot()
timestep = int(robot.getBasicTimeStep())

LED = robot.getLED('my_led')

# Main loop:
count = 0
while robot.step(timestep) != -1:
    count += 1
    print(count)
    print("LED状态:" + str(LED.get()))
    if count > 20:
        LED.set(1)# 打开LED,强度255
    if count > 40:
        LED.set(0)# 关闭LED,强度0
        count = 0
# Main loop:
count = 0
while robot.step(timestep) != -1:
    count += 1
    print(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.coloradmin.cn/o/1580380.html

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

相关文章

【编译原理】Antlr 入门使用

前面文章我们学习了编译器前端的词法和语法分析工具,本篇我们来看看如何借助 Antlr 工具,快速生成词法和语法分析代码。 一、安装 mac 环境: 1)安装 brew install antlr2)配置 classpath (把 Antlr 的 J…

MySQL -- 07_最流行的查询需求分析(一些分组排序查询、开窗函数 dense_rank、distinct 去重函数 等~)

目录 最流行的查询需求分析07演示数据准备的SQL需求演示36、查询每一门课程成绩都在70分以上的姓名、课程名称和分数group by min() in() 函数 37、查询不及格的课程及学生普通表连接查询 38、查询课程编号为01语文且课程成绩在80分以上的学生的学号和姓名普通表连接查询 39、…

使用axios进行前后端数据传输

最近在和朋友合作写一个新的项目,前后端进行了分离,既然是分离的,肯定需要交互,今天这篇文章详细介绍一下数据交互的一种常见方式:使用axios,希望对大家有所帮助。 前端:以LoginPage.vue登录页面为例&…

扬帆出海扩规模,仍是比亚迪未来的发展关键?

又到了新能源车企公布阶段性成果的时期。 日前,乘联会预估2024年3月全国新能源乘用车厂商批发销量82万辆,同比增长33%,环比增长84%。其中,比亚迪继续领跑,3月销量超30万辆,环比增长147.8%,而这…

OpenHarmony实战:瑞芯微RK3566移植案例(上)

本文章是基于瑞芯微RK3566芯片的khdvk_3566b开发板,进行标准系统相关功能的移植,主要包括产品配置添加,内核启动、升级,音频ADM化,Camera,TP,LCD,WIFI,BT,vib…

中科院发布大模型想象增强法IAG,无需外部资源,想想就能变强

在人工智能领域,尤其是自然语言处理(NLP)的子领域——问答系统(QA)中,知识的获取和利用一直是推动技术进步的核心问题。近年来,大语言模型(LLMs)在各种任务中展现出了惊人…

【C语言】扫雷【附源码】

欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 一、扫雷游戏规则 尽快找到雷区中的所有不是地雷的格子,而不许踩到地雷。点开的数字是几,则说明该数字旁边的8个位置中有几个雷,如果挖开的是地雷,则会输掉游戏。 二、代码思路&…

Laravel 项目如何运行

如有一个 Laravel 项目,在配置好 PHP 版本和运行环境后,可以直接在项目下直接运行: php artisan serve 来启动你的项目。 通过浏览器查看 当项目运行后,默认的启动端口为 8000,可以通过浏览器来进行查看运行的 Larav…

C++性能测试工具

使用示例main.cpp // g-13 -O3 -stdc17 main.cpp profile.cpp #include <iostream> #include <chrono> #include <stdint.h> #include <mutex> // std::mutex#include "profile.h" #include "profile_rdtsc.h"std::mut…

GlusterFS分布式文件系统

一、GlusterFS简介 GlusterFS 是一个开源的分布式文件系统。由存储服务器、客户端以及NFS/Samba存储网关(可选&#xff0c;根据需要选择使用)组成。没有元数据服务器组件&#xff0c;这有助于提升整个系统的性能、可靠性和稳定性 二、GlusterFS特点 2.1 扩展性和高性能 Glu…

Tensorboard以及Transforms初步学习

一.前情提要 1.本文是代码结合知识点&#xff0c;注释即为知识点 2.主要详细讲解Tensorboard以及Transforms代码以及基础知识 3.若想深入学习&#xff0c;建议阅读 P3. Python学习中的两大法宝函数&#xff08;当然也可以用在PyTorch&#xff09;_哔哩哔哩_bilibili 二.简述…

Scala中如何使用Jsoup库处理HTML文档?

在当今互联网时代&#xff0c;数据是互联网应用程序的核心。对于开发者来说&#xff0c;获取并处理数据是日常工作中的重要一环。本文将介绍如何利用Scala中强大的Jsoup库进行网络请求和HTML解析&#xff0c;从而实现爬取京东网站的数据&#xff0c;让我们一起来探索吧&#xf…

云智慧发布对象关系型数据库CloudPanguDB,打破传统技术壁垒

近日&#xff0c;云智慧推出关系型数据库CloudPanguDB&#xff08;中文名称&#xff1a;盘古数据库&#xff09;&#xff0c;旨在通过高兼容性能和创新技术架构&#xff0c;降低企业项目整体运营成本。 无论是处理海量复杂数据&#xff0c;还是构建清晰有序的数据结构关系&…

c++ 谷歌glog日志库使用

效果如图&#xff1a; 本次使用qt环境演示&#xff0c;相关库文件和头文件下载链接&#xff1a;https://download.csdn.net/download/bangtanhui/89108477 将相关库文件和头文件&#xff0c;丢到工程目录下 然后需要在工程pro文件当中引入库文件和头文件&#xff1a; …

创建型模式--2.简单工厂模式【人造恶魔果实工厂1】

1. 工厂模式的特点 在海贼王中&#xff0c;作为原王下七武海之一的多弗朗明哥&#xff0c;可以说是新世界最大的流氓头子&#xff0c;拥有无上的权利和无尽的财富。他既是德雷斯罗萨国王又是地下世界的中介&#xff0c;控制着世界各地的诸多产业&#xff0c;人造恶魔果实工厂就…

Java Web这一路走来

大部分Java应用都是Web或网络应用&#xff0c;MVC框架在Java框架中有着举足轻重的地位&#xff0c;一开始的Web应用并不现在这样子的&#xff0c;一步一步走来&#xff0c;每一步都经历了无数的血和泪的教训&#xff0c;以史为镜可以知兴替。 1. 草莽时代 早期的Java服务端技…

使用ollydbg还原密码程序的密码

前言&#xff1a;我们上次用ida pro破解了程序密码这次我们换个工具来还原程序密码 第一步 和上次一样把找到的程序拖到ollydbg里面 第二步 右键点击查找所有引用字符串 第三步 找到报错代码双击进入 第五步 找到上面的jnz双击将其改成jz 第六步 将所修改的保存点击空白…

FPGA(Verilog)实现uart传输协议传输数据(含仿真)

目录 实现功能&#xff1a; 1.接收uart串行数据&#xff0c;输出并行数据(1byte)。 2.输入并行数据(1byte)&#xff0c;输出uart串行数据。 3.完成uart传输的1次环回。 uart协议的1帧数据传输 模块封装-port设置 Verilog代码实现 1.uart接收模块:接收串行数据,输出并行数…

基于Java+SpringBoot+Vue企业员工管理系统(源码+文档+部署+讲解)

一.系统概述 随着社会的发展&#xff0c;系统的管理形势越来越严峻。越来越多的用户利用互联网获得信息&#xff0c;但各种信息鱼龙混杂&#xff0c;信息真假难以辨别。为了方便用户更好的获得信息&#xff0c;因此&#xff0c;设计一种安全高效的员工管理系统极为重要。 为设计…

swiftui macOS实现加载本地html文件

import SwiftUI import WebKitstruct ContentView: View {var body: some View {VStack {Text("测试")HTMLView(htmlFileName: "localfile") // 假设你的本地 HTML 文件名为 index.html.frame(minWidth: 100, minHeight: 100) // 设置 HTMLView 的最小尺寸…