第五章 Webots官方Tutorial 4
目录
一、Tutorial 4: More about Controllers
本教程介绍Webot中机器人控制器编程的基础知识。即了解节点和控制器API之间的联系,机器人控制器初始化和重置,如何初始化机器人设备,如何获取传感器值,如何命令致动器,以及如何编写简单的反馈控制。
二、新建一个控制器
2.1 Hands on #1
(此处为python
语言,命名为EPuckAvoidCollision)
三、e-puck 模型
8个距离传感器(ps0~ps7)
四、设计控制器
EPuckAvoidCollision.py
此处易从函数名理解它的作用。
from controller import Robot, DistanceSensor, Motor
# time in [ms] of a simulation step
TIME_STEP = 64
MAX_SPEED = 6.28
# create the Robot instance.
robot = Robot()
# initialize devices
ps = []
psNames = [
'ps0', 'ps1', 'ps2', 'ps3',
'ps4', 'ps5', 'ps6', 'ps7'
]
for i in range(8):
ps.append(robot.getDevice(psNames[i]))
ps[i].enable(TIME_STEP)
leftMotor = robot.getDevice('left wheel motor')
rightMotor = robot.getDevice('right wheel motor')
leftMotor.setPosition(float('inf'))
rightMotor.setPosition(float('inf'))
leftMotor.setVelocity(0.0)
rightMotor.setVelocity(0.0)
# feedback loop: step simulation until receiving an exit event
while robot.step(TIME_STEP) != -1:
# read sensors outputs
psValues = []
for i in range(8):
psValues.append(ps[i].getValue())
# detect obstacles
right_obstacle = psValues[0] > 80.0 or psValues[1] > 80.0 or psValues[2] > 80.0
left_obstacle = psValues[5] > 80.0 or psValues[6] > 80.0 or psValues[7] > 80.0
# initialize motor speeds at 50% of MAX_SPEED.
leftSpeed = 0.5 * MAX_SPEED
rightSpeed = 0.5 * MAX_SPEED
# modify speeds according to obstacles
if left_obstacle:
# turn right
leftSpeed = 0.5 * MAX_SPEED
rightSpeed = -0.5 * MAX_SPEED
elif right_obstacle:
# turn left
leftSpeed = -0.5 * MAX_SPEED
rightSpeed = 0.5 * MAX_SPEED
# write actuators inputs
leftMotor.setVelocity(leftSpeed)
rightMotor.setVelocity(rightSpeed)
总结
到此,你应该学会了简单的机器人控制器设计。
标签:控制器,80.0,MAX,0.5,psValues,Webots,SPEED,tutorial From: https://www.cnblogs.com/YIKeLB/p/17085210.html附加:
1.每个控制器程序作为Webots进程的子进程执行。控制器进程不与Webot共享任何内存(相机图像除外),它可以在Webot以外的其他CPU(或CPU内核)上运行。
2. 控制器代码与“libController”动态库链接。此库处理控制器和Webot之间的通信。