文章目录
- 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=t1∗∣omega∣∗omega−t2∗∣omega∣∗V
其中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=q1∗∣omega∣∗omega−q2∗∣omega∣∗V
其中q1和q2为torqueConstants
中定义的常数
以上公式计算来自:Thor I. Fossen的"Guidance and Control of Ocean Vehicles"和Raymond W. Prouty的"Helicopter Performance, Stability, and Control"
几个重要节点:
shaftAxis
:定义沿其施加合力和扭矩的轴centerOfThrust
:定义推力的施加点thrustConstants
:定义推力计算公式中的两个常数,正旋与反旋只需将此字段中的数值设置为相反数。即正旋时,此字段数值为正,那么反旋则为此数值的负值即可torqueConstants
:定义转矩计算公式中的两个常数
thrustConstants
和torqueConstants
中的常数,在现实中,其数值由螺旋桨的倾角和方向决定
fastHelixThreshold
:从slowHelix
切换到fastHelix
阀值,默认为24π rad/sdevice
:旋转电机放置的设备节点fastHelix
和slowHelix
:如果不为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=TRUE
,color
列表为空,则为RGB LED,set()
函数此时接收的值为十六进制RGB颜色值(即R8G8B8),例如红色为0xff0000
;gradual=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