基于 python3 的比邻星六轴机械臂,用于二次开发的 SDK
机械臂建立连接后,线程池启动:
- 启动【发送线程】;
- 启动【接收线程】;
- 调用【普通 API 方法】启动对应命令的【分流线程】;
- 【分流线程】开始轮询【命令执行结果队列】;
- 【普通 API 方法】将需要执行的命令,放入【待发送命令队列】;
- 【发送线程】从【待发送命令队列】取出一条命令;
- 【发送线程】发送命令给【机械臂】;
- 【接收线程】收到【机械臂】返回的命令执行结果;
- 【接收线程】将命令放入【命令执行结果队列】;
- 【分流线程】从队列中获取返回的命令执行结果,并找到需要的结果消息;
- 【普通 API 方法】拿到返回的数据;
- 【普通 API 方法】返回执行结果;
- 【普通 API 方法】记录命令的执行情况;
从内网拉取 develop 分支代码
如果发现 BUG 请基于 develop 分支,开启新的分支 在新分支修复问题后,合并到 develop 后提交,谢谢!
git clone -b develop http://192.168.10.69:10880/Education_Department/robot_arm_sdk.git
cd robot_arm_sdk
配置虚拟环境
python -m venv venv
# windows
venv\Scripts\activate.bat
# linux
source venv/bin/activate
# 配置依赖环境
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
MDH 参数
关节 | alpha | a | d | theta |
---|---|---|---|---|
1 | 0 | 0 | 153.50 | 0 |
2 | -pi / 2 | 24 | 0 | -pi / 2 |
3 | 0 | 160.72 | 0 | 0 |
4 | -pi / 2 | 0 | 223 | 0 |
5 | pi / 2 | 0 | 0 | pi/2 |
6 | pi / 2 | 0 | -108.79 | 0 |
机械臂电机方向与角度范围
先将屏幕面向操作者,将机械臂回零,再确定电机的角度正负值,以及对应的控制方向
需要与正逆解模型的角度方向一致
电机编号 | 方向 | 负值(度) | 正值(度) | 方向 | 备注 |
---|---|---|---|---|---|
1 | 顺时针 | -140 | +140 | 逆时针 | 俯视 |
2 | 顺时针 | -70 | +70 | 逆时针 | 左视 |
3 | 顺时针 | -60 | +45 | 逆时针 | 左视 |
4 | 逆时针 | -150 | +150 | 顺时针 | 正视 |
5 | 顺时针 | -180 | +10 | 逆时针 | 左视 |
6 | 顺时针 | -180 | +180 | 逆时针 | 俯视 |
在发布页面, 下载最新分支版本, 发布的 whl 安装包 通过 pip 安装即可
pip install blinx_robots-4.3.0-py3-none-any.whl
卸载
pip uninstall blinx_robots
接下来, 在自己的代码中, 导入模块开始使用 下面提供了实列代码
导入模块
import time
import json
from loguru import logger
from blinx_robots.robot_arm_interface import BlxRobotArm
from blinx_robots.robot_arm_communication import SocketCommunication
实例化机械臂对象
# 连接机械臂
host = "192.168.10.111"
port = 1234
socket_communication = SocketCommunication(host, port)
robot = BlxRobotArm(socket_communication)
控制机械臂
# 机械臂通讯连接
logger.warning("\n1: 测试机械臂通讯连接")
robot.start_communication()
# 获取机械臂的命令执行模式
logger.warning("\n2: 测试机械臂命令执行模式")
robot_cmd_model = json.loads(robot.get_robot_cmd_model()).get('data')
logger.info(f"机械臂的命令执行模式: {robot_cmd_model}")
# 设置机械臂的命令模式
logger.warning("\n3: 测试机械臂命令执行模式设置")
# robot.set_robot_cmd_mode("INT")
# time.sleep(1)
robot.set_robot_cmd_mode("SEQ")
time.sleep(1)
# 机械臂初始化,将机械臂关节角度归零
logger.warning("\n4: 测试机械臂初始化")
robot.set_robot_arm_init()
time.sleep(12)
# 获取机械臂关节角度
logger.warning("\n5: 测试机械臂关节角度")
robot.get_joint_degree_all()
time.sleep(1)
# 设置机械臂单个关节角度
logger.warning("\n6: 测试机械臂单个关节角度设置")
robot.set_joint_degree_by_number(1, 50, 90)
# 获取机械臂所有当前关节角度
logger.warning("\n7: 测试机械臂所有关节角度设置")
joint_degree = robot.get_joint_degree_all().get('data')
logger.info(f"机械臂所有关节角度: {joint_degree}")
time.sleep(1)
# 机械臂紧急停止
logger.warning("\n8: 测试机械臂紧急停止")
robot.set_robot_arm_emergency_stop()
time.sleep(2)
# 恢复机械臂状态
logger.warning("\n9: 测试机械臂急停后的状态恢复上电")
robot.set_robot_arm_init()
time.sleep(2)
logger.warning("\n10: 测试机械臂急停后的状态恢复")
robot.set_robot_arm_init()
time.sleep(12)
# 设置机械臂末端工具控制
logger.warning("\n11: 测试机械臂末端工具控制使能")
robot.set_robot_end_tool(1, True) # 控制气泵打开
time.sleep(2)
logger.warning("\n12: 测试机械臂末端工具控制掉使能")
robot.set_robot_end_tool(1, False) # 控制气泵关闭
time.sleep(2)
# 设置机械臂所有关节角度协同运动
logger.warning("\n13: 测试机械臂所有关节角度协同运动")
robot.set_joint_degree_synchronize(10, 10, 10, 10, 10, 10, speed_percentage=50)
time.sleep(2)
# 通过末端工具坐标与姿态,控制机械臂关节运动
logger.warning("\n14: 测试通过末端工具坐标与姿态,控制机械臂关节运动")
robot.set_joint_degree_by_coordinate(0.287, 0.0, 0.269, 0.0, -0.0, 0.0, speed_percentage=50)
time.sleep(5)
# 机械臂回零
logger.warning("\n15: 测试机械臂回零")
robot.set_robot_arm_home()
time.sleep(2)
# 获取机械臂正解
logger.warning("\n16: 测试获取机械臂当前角度的, 正解")
robot.get_positive_solution(current_pose=True)
logger.warning("\n17: 测试获取机械臂单独计算正解")
robot.get_positive_solution(20, 0, 0, 0, 0, 0, current_pose=False)
# 获取机械臂逆解
logger.warning("\n18: 测试获取机械臂当前角度的, 逆解")
robot.get_inverse_solution(current_pose=True)
logger.warning("\n19: 测试获取机械臂单独计算逆解")
robot.get_inverse_solution(0.23, 0.084, 0.269, 20.0, -0.0, -0.0, current_pose=False)
# 顺序执行模式中, 使用延时命令
logger.warning("\n20: 测试机械臂顺序执行模式中, 使用延时命令")
robot.set_joint_degree_synchronize(10, 10, 10, 10, 10, 10, speed_percentage=50)
robot.set_time_delay(3000)
robot.set_robot_end_tool(1, True)
robot.set_time_delay(3000)
robot.set_robot_end_tool(1, False)
robot.set_time_delay(3000)
robot.set_joint_degree_synchronize(20, 20, 20, 20, 20, 20, speed_percentage=50)
robot.set_time_delay(3000)
robot.set_robot_arm_home()
time.sleep(3)
# 机械臂通讯关闭
logger.warning("\n21: 测试机械臂通讯关闭")
robot.end_communication()