Skip to content

Batmancris/softarm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

软体机械臂3D仿真系统

基于PyQt5和pyqtgraph的软体机械臂实时3D仿真系统,支持GPU加速、实时可视化、状态保存和图片导出功能。

项目简介

本项目实现了一个完整的软体机械臂仿真系统,包含:

  • 实时3D可视化(基于PyQt5和pyqtgraph)
  • 正运动学计算(支持PCC模型)
  • GPU/CPU双模式计算
  • 弯曲角度控制(0-180度)
  • 弯曲方向控制(0°, 120°, 240°)
  • 状态固定和恢复功能
  • 自动视角优化(避免重叠)
  • 图片导出功能

功能特点

1. 实时3D可视化

  • 基于pyqtgraph的OpenGL渲染
  • 实时显示机械臂的3D结构
  • 白色背景,便于观察
  • 平滑的动画效果(60 FPS)

2. 灵活的弯曲控制

  • 弯曲角度控制:0-180度(滑块精度0.1度)
  • 弯曲方向控制:0°, 120°, 240°(对应三个电机方向)
  • 任意段选择:可以选择1-14号气囊中的任意一个作为柔性段

3. 状态管理

  • 固定状态:可以固定任意段的弯曲状态
  • 状态恢复:切换柔性段时自动恢复之前的状态
  • 清除功能:可以清除所有固定状态

4. 图片导出

  • 一键保存当前状态为图片
  • 自动优化视角,避免重叠
  • 使用气囊中心位置作为坐标点
  • XYZ轴统一分度,便于观察

5. 性能优化

  • GPU加速:支持CUDA加速计算(需要PyTorch和CUDA)
  • 平滑动画:插值实现平滑过渡效果
  • 高效渲染:优化的网格生成和渲染

安装要求

必需依赖

pip install PyQt5
pip install pyqtgraph
pip install numpy
pip install matplotlib

可选依赖(GPU加速)

pip install torch
# 需要CUDA支持(如果使用GPU)

完整安装

pip install PyQt5 pyqtgraph numpy matplotlib torch

使用方法

启动仿真器

python pyqt5_simulator.py

基本操作

  1. 选择柔性段

    • 在"柔性段选择"下拉框中选择要控制的段(1-14号气囊)
  2. 调整弯曲角度

    • 使用"弯曲角度 θ"滑块调整角度(0-180度)
    • 实时显示当前角度值
  3. 调整弯曲方向

    • 在"弯曲方向 φ"下拉框中选择方向(0°, 120°, 240°)
  4. 固定状态

    • 点击"固定当前状态"按钮,固定当前段的弯曲状态
    • 固定后,该段会保持当前弯曲角度和方向
  5. 保存图片

    • 点击"保存图片"按钮
    • 选择保存路径
    • 系统会自动优化视角并生成图片
  6. 其他功能

    • 重置:重置所有状态
    • 随机配置:随机生成一个配置
    • 清除所有固定:清除所有固定状态

状态显示

右侧控制面板显示:

  • 当前柔性段编号
  • 弯曲角度(度)
  • 曲率(1/m)
  • 弯曲方向(度)
  • 末端执行器位置(X, Y, Z,单位:cm)

文件结构

pythonProject/
├── pyqt5_simulator.py          # 主仿真器(PyQt5界面)
├── unified_model.py            # 统一模型(正运动学、GPU支持)
├── arm_parameters.py           # 机械臂物理参数
├── arm_visualizer.py           # 3D可视化工具(网格生成)
├── space_definition.py         # 空间定义(关节空间、任务空间、驱动空间)
├── visualization.py            # 2D可视化工具(matplotlib)
├── simple_image_generator.py   # 简化图片生成器(保存图片)
├── test_model.py               # 模型测试脚本
└── README.md                   # 本文件

核心模块说明

1. pyqt5_simulator.py

主仿真器,包含:

  • PyQt5用户界面
  • 实时3D显示(pyqtgraph OpenGL)
  • 控制面板(滑块、按钮等)
  • 状态管理

2. unified_model.py

统一模型,包含:

  • 正运动学计算(PCC模型)
  • GPU/CPU支持
  • 关节空间到任务空间转换

3. arm_parameters.py

物理参数配置:

  • 气囊尺寸(1-6号:10cm高,7-14号:5cm高)
  • 材料参数(刚度等,PVC材质)
  • 驱动参数(电机方向、绳半径等)

4. arm_visualizer.py

3D可视化工具:

  • 圆柱体网格生成
  • 弯曲圆柱体网格生成(带压缩效果)
  • 平滑连接处理

5. simple_image_generator.py

图片生成器:

  • 简化的3D可视化
  • 自动视角优化
  • 统一坐标轴分度

技术细节

坐标系定义

  • Z轴:向下为正(机械臂从顶部向下延伸)
  • X轴:指向0°方向
  • Y轴:指向90°方向
  • 顶部固定:机械臂顶部位置固定
  • 底部初始位置:底部初始在(0, 0, 0)

PCC模型

使用Piecewise Constant Curvature(分段恒定曲率)模型:

  • 每个柔性段视为恒定曲率的圆弧
  • 曲率:kappa = theta / L(theta为弯曲角度,L为段长度)
  • 弯曲方向:相对于电机方向的局部坐标系

压缩效果

弯曲时的压缩效果:

  • 压缩方式:高度压缩(不是半径压缩)
  • 压缩范围:0.6-0.85(内侧压缩更多)
  • 内外层:内外层都压缩,内侧压缩更多

视角优化算法

保存图片时自动优化视角:

  1. 测试多个视角组合(仰角10-60度,方位角0-360度)
  2. 计算投影后的点对距离
  3. 检测重叠(距离小于阈值)
  4. 选择重叠最少、分布最均匀的视角

使用示例

示例1:基本使用

from pyqt5_simulator import SoftArmSimulator
from PyQt5.QtWidgets import QApplication
import sys

app = QApplication(sys.argv)
simulator = SoftArmSimulator()
simulator.show()
sys.exit(app.exec_())

示例2:使用模型计算

from unified_model import UnifiedSoftArmModel
import numpy as np

# 创建模型(使用GPU)
model = UnifiedSoftArmModel(use_gpu=True)

# 设置柔性段(4号气囊)
model.set_flexible_segment(4)

# 设置弯曲角度和方向
# 弯曲角度:60度 -> 曲率 = 60度 / 段长度
segment_length = model.arm_params.segment_heights[3]  # 4号气囊长度
bending_angle_rad = np.radians(60)
kappa = bending_angle_rad / segment_length
phi = np.radians(0)  # 0度方向

model.set_joint_state(kappa, phi)

# 计算正运动学
T_EE, T_list = model.forward_kinematics()
print(f"末端位置: {T_EE[:3, 3]}")

示例3:保存图片

from simple_image_generator import generate_simple_arm_image_from_simulator

# 从仿真器生成图片
output_path = generate_simple_arm_image_from_simulator(simulator, 'output.png')
print(f"图片已保存到: {output_path}")

参数说明

机械臂参数

  • 气囊数量:14个圆环形气囊
  • 1-6号气囊:高度10cm,外径5cm,内径3cm
  • 7-14号气囊:高度5cm,外径5cm,内径3cm
  • 总长度:1.0m
  • 电机方向:0°, 120°, 240°(三个方向)
  • 绳半径:5cm

控制参数

  • 弯曲角度范围:0-180度
  • 弯曲方向:0°, 120°, 240°(离散)
  • 曲率范围:0-50.0 1/m(根据段长度自动计算)

注意事项

  1. GPU加速

    • 需要安装PyTorch和CUDA
    • 如果没有GPU或CUDA不可用,会自动切换到CPU模式
  2. 坐标系

    • 内部计算使用Z轴向下为正
    • 显示时已翻转,便于观察
  3. 固定状态

    • 固定状态会保存在内存中
    • 切换柔性段时会自动恢复固定状态
  4. 图片保存

    • 图片使用matplotlib生成
    • 自动优化视角,避免重叠
    • 使用气囊中心位置作为坐标点

常见问题

Q: 如何启用GPU加速?

A: 确保安装了PyTorch和CUDA,程序会自动检测并使用GPU。

Q: 为什么保存的图片和显示不一致?

A: 图片使用气囊中心位置,而显示使用段端点。两者略有差异是正常的。

Q: 如何调整视角优化参数?

A: 修改simple_image_generator.py中的find_best_view_angle函数参数。

Q: 如何修改机械臂参数?

A: 修改arm_parameters.py中的ArmParameters类。

开发信息

  • 开发环境:Python 3.11
  • 主要框架:PyQt5, pyqtgraph
  • 计算引擎:NumPy, PyTorch (可选)
  • 可视化:pyqtgraph (OpenGL), matplotlib

许可证

本项目仅供学习和研究使用。

更新日志

最新版本

  • 支持弯曲角度控制(0-180度)
  • 自动视角优化
  • 统一坐标轴分度
  • 使用气囊中心位置生成图片
  • 顶部固定,底部初始位置在(0,0,0)

联系方式

如有问题或建议,请通过项目仓库提交Issue。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages