使用Webots进行仿真
本例子演示通过开放数据接口与Webots配合进行仿真
Webots是用于模拟机器人的开放源代码和多平台桌面应用程序。它提供了一个完整的开发环境来对机器人进行建模,编程和仿真。
它被设计用于专业用途,并且广泛用于工业,教育和研究。自1998年以来,Cyberbotics 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世界文件可以在此处下载