使用Webots进行仿真

本例子演示通过开放数据接口与Webots配合进行仿真

Webots是用于模拟机器人的开放源代码和多平台桌面应用程序。它提供了一个完整的开发环境来对机器人进行建模,编程和仿真。 它被设计用于专业用途,并且广泛用于工业,教育和研究。自1998年以来,Cyber​​botics Ltd.一直将Webots作为其主要产品。

——Wetbos官网

首先根据实际需求在Webots中搭建相应场景,这里我们使用Webots自带的ure.wbt世界作为基础场景 使用的机械臂为纳博特1400机械臂,在Solidworks中将模型的各个模块分别导出然后在Webots中进行组装并调整好旋转轴 将机械臂导出为wbo文件,然后导入到ure.wbt中 编写Webots的controller并放到ure项目工程的controllers文件夹内。controller会通过TCP与RobotStudio连接, 从RobotStudio内实时读取机械臂的关节数据然后在Webots中进行仿真

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
"""
WEBOTS external controller示例程序
从RobotStudio中TCP读取机器人数据然后在WEBOTS中进行仿真
"""
import json
import socket
import threading
from typing import List

from controller import Robot, Motor


def tcp():
    tcp_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    tcp_client.connect(("127.0.0.1", 11999))
    while True:
        tcp_client.send("data".encode("utf-8"))
        data = tcp_client.recv(2048)
        if data:
            data = json.loads(data.decode("utf-8"))
            joint = data.get("joint")
            for index, angle in enumerate(joint):
                webots_joints[index].setPosition(-1 * angle)


if __name__ == '__main__':
    # 初始化WEBOTS中的机械臂
    robot = Robot()
    # 初始化所有轴
    webots_joints: List[Motor] = []
    for i in range(1, 7):
        webots_joints.append(robot.getDevice(f"joint{i}"))

    # 启动线程连接RobotStudio并读取数据
    tcp_thread = threading.Thread(target=tcp)
    tcp_thread.daemon = True
    tcp_thread.start()

    # WEBOTS时间步
    while robot.step(int(robot.getBasicTimeStep())) != -1:
        pass

在Webots内选择机械臂,选择控制器为编写的tcpip控制器 在RobotStudio中开启开放数据,启动tcp server 在Webots内开启仿真 Webots世界文件可以在此处下载