机器人仿真笔记[3]-基于Webots的避障机器人
搭建世界
[https://www.guyuehome.com/26706]
添加矩形区域,添加物体
放置机器人
使用预置的e-puck机器人
e-puck是一款小型机器人,带有差速轮,10个LED和几个传感器,其中包括8个DistanceSensors和一个Camera
编写控制器
[https://www.guyuehome.com/27514]
"""my_first_controller controller."""
# -*- coding: UTF-8 -*-
# author:罗伯特祥
from controller import Robot
# 参数定义
sensor_num = 8
speed_max = 6.28
range_ = 1024 / 2
ps_sensor_name = ['ps0','ps1','ps2','ps3','ps4','ps5','ps6','ps7']
#二维上的障碍物矩阵
matrix = []
matrix.append([11, 12, 8, -2, -3, -5, -7, -9])
matrix.append([-9, -8, -5, -1, -2, 6, 12, 11])
def main():
# 实例化机器人类
robot = Robot()
# 获取当前世界的基本时间步长
timestep = int(robot.getBasicTimeStep())
# 关联电机设备
left_motor = robot.getMotor('left wheel motor')
right_motor = robot.getMotor('right wheel motor')
# 关联并使能传感器设备
ps_sensor = []
for i_ in range(sensor_num):
ps_sensor.append(robot.getDistanceSensor(ps_sensor_name[i_]))
ps_sensor[i_].enable(timestep)
# 设置电机运行模式
left_motor.setPosition(float('inf'))
right_motor.setPosition(float('inf'))
# 设置差速
left_motor.setVelocity(3)
right_motor.setVelocity(3)
speed = [0,0]
# Main loop:
while robot.step(timestep) != -1:
# 获取传感器的值
ps_sensor_value = []
for i_ in range(sensor_num):
ps_sensor_value.append(ps_sensor[i_].getValue())
print(ps_sensor_name[i_] + " = " + str(ps_sensor_value[i_]))
for i_ in range(2):
speed[i_] = 0;
for j_ in range(sensor_num):
speed[i_] += matrix[i_][j_] * (1 - (ps_sensor_value[j_] / range_))
left_motor.setVelocity(0.5 * speed[0])
right_motor.setVelocity(0.5 * speed[1])
print("my first controller of the e-puck robot started...")
main()
仿真
效果类似扫地机器人
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」