版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于具身智能的机械臂抓取系统EmbodiedIntelligence-basedAutonomousRoboticArmGraspingSystem第十章——基于大模型的具身智能系统目录CONTENTS
01
02
03
04背景、需求与总体设计具身智能与大语言模型机械臂模型构建仿真环境与大语言模型指令《人工智能程序设计》基于具身智能的自主系统设计
05视觉识别与物体抓取
06系统集成与本章小结背景、需求与总体设计
01项目背景《人工智能程序设计》基于具身智能的自主系统设计背景概述传统人工干预式操作在无人驾驶、智能制造、医疗机器人等领域,已经难以满足高效、智能、灵活的需求。越来越多的应用场景要求系统能够自主感知环境、作出决策并执行任务。自主系统可以在无需人工干预的情况下完成环境感知、信息处理和任务执行。感知通过传感器获取环境与对象信息处理对感知信息进行分析、识别与理解决策基于当前状态和目标生成最优行动决策行动执行决策结果完成具体任务自主感知—自主决策—自主执行的闭环流程三领域应用无人驾驶汽车智能制造机械臂医疗机器人背景、需求与总体设计
01传统自主系统的局限与具身智能转向《人工智能程序设计》基于具身智能的自主系统设计传统自主系统传统自主系统设计通常更侧重感知和计算层面的智能。这类系统容易忽略“系统如何通过身体与环境进行互动”。在复杂现实环境中,单纯依靠计算和数据处理,往往难以应对突发情况和复杂任务。传统路径更偏向“只计算、弱交互、弱适应”。具身智能具身智能作为新的认知框架,强调智能必须建立在身体、感知系统和环境交互之上。强调机器人身体、传感器、环境和反馈之间的紧密耦合。能够更好地应对复杂、动态、开放的真实任务场景。从感知、决策到行动形成持续闭环。背景、需求与总体设计
01机械臂的应用价值《人工智能程序设计》基于具身智能的自主系统设计应用价值具身智能已经在多个领域展现出应用潜力。机械臂是具身智能的重要载体,被广泛应用于制造、医疗、物流等行业。传统机械臂控制系统依赖预先编程指令和固定动作序列,灵活应变能力不足。面对复杂、动态任务时,需要将感知、语言理解、决策与控制结合起来。制造医疗物流背景、需求与总体设计
01系统建设目标《人工智能程序设计》基于具身智能的自主系统设计系统目标开发一个基于具身智能的机械臂抓取系统。系统能够通过自然语言接收用户任务。利用大语言模型解析任务并生成相应控制指令。通过视觉识别定位目标物体。控制机械臂完成精确抓取。系统实现包括四个方面:机械臂模型构建、仿真环境搭建、大语言模型指令生成、视觉识别与物体抓取。1.用户指令2.大语言模型3.视觉识别4.机械臂抓取5.环境反馈自然语言驱动的闭环抓取流程背景、需求与总体设计
01系统总体设计《人工智能程序设计》基于具身智能的自主系统设计系统总体设计图机械臂模型构建UR5模型/关节与夹爪仿真环境搭建PyBullet/场景与物体大语言模型指令生成自然语言解析/指令输出视觉识别与物体抓取目标定位/抓取执行背景、需求与总体设计
01机械臂模型构建《人工智能程序设计》基于具身智能的自主系统设计机械臂模型构建模块1.模型加载参照UR5Robotiq85构建机械臂模型2.关节解析定义关节自由度、关节参数与结构关系。3.运动控制根据目标位置与姿态规划路径并调整关节角度。4.夹爪控制控制末端双指夹爪完成抓取与交互。机械臂控制是系统的核心功能模块需要定义与环境交互的方式实现目标位姿驱动的自主控制确保准确到达目标并完成抓取背景、需求与总体设计
01仿真环境搭建《人工智能程序设计》基于具身智能的自主系统设计仿真环境搭建模块1.物理引擎使用PyBullet构建仿真平台,提供动力学求解基础。2.重力模拟设置重力环境,体现物体下落与机械臂受力行为。3.碰撞检测模拟机械臂、地面与目标物体之间的碰撞关系。4.物体交互支持红色与绿色长方体的接触、抓取与放置交互。仿真环境是机械臂控制策略测试与验证的重要基础。背景、需求与总体设计
01指令生成与视觉抓取《人工智能程序设计》基于具身智能的自主系统设计指令生成与视觉抓取模块用户命令自然语言输入任务大语言模型API解析命令生成控制指令target_color输出目标颜色变量RGB图像摄像头获取环境图像RGB图像颜色分割提取目标区域轮廓分析识别轮廓与中心坐标/朝向计算空间位置与角度机械臂抓取规划轨迹并完成抓取具身智能与大语言模型
02具身智能概念《人工智能程序设计》基于具身智能的自主系统设计概念定义具身智能是智能体通过与物理环境实时交互,形成“感知—决策—行动”闭环反馈机制的技术框架。与传统人工智能不同,具身智能不仅依赖算法推理,还依赖身体结构、感知系统以及与环境的互动。其核心特征是感知与运动紧密结合。智能体需要具备视觉、触觉、听觉等感知能力,并能够通过身体动作执行决策,适应复杂、动态环境。具身智能强调身体、感知与环境交互协同形成闭环智能。环境环境反馈身体动作决策多模态感知
02具身智能的四个关键要素《人工智能程序设计》基于具身智能的自主系统设计具身智能与大语言模型关键要素概述具身智能的实现依赖四个关键要素:感知、交互、决策、控制。四者共同构成智能体与环境有效互动的基础。它们使智能体能够在复杂现实环境中灵活完成任务。具身智能具身控制具身决策具身交互具身感知
02具身感知《人工智能程序设计》基于具身智能的自主系统设计具身感知是智能体通过感知系统获取环境关键信息,为任务执行与决策提供依据。感知不局限于视觉,还包括触觉、听觉等多模态信息。系统需要持续感知环境变化,实时获取有价值信息,并据此作出合理反应。本项目中,摄像头实时采集图像,通过颜色分割和轮廓检测提取物体形态、位置与朝向。感知误差会直接影响抓取精度和任务成功率。文本建议1.RGB图像2.颜色掩码文本建议3.轮廓检测4.位置/朝向具身感知流程具身智能与大语言模型具身智能与大语言模型
02具身交互《人工智能程序设计》基于具身智能的自主系统设计具身交互是智能体通过物理接触或其他互动形式实现任务目标的过程。互动可以是抓取、搬运、放置等物理动作,也可以由语言指令触发。本项目中,用户通过自然语言发出任务。大语言模型将语言指令转化为机械臂控制命令。机械臂根据目标位置和姿态调整运动路径并依据环境反馈动态调整抓取策略。语言视觉动作反馈具身交互用户说话大模型理解与规划机械臂抓取与执行环境反馈调整策略具身智能与大语言模型
02《人工智能程序设计》基于具身智能的自主系统设计用户任务抓取某个颜色物体大语言模型解析提取目标颜色目标颜色红色绿色视觉反馈识别位置与姿态信息视觉反馈识别位置与姿态信息抓取策略规划抓取位置与路径抓取策略规划抓取位置与路径具身决策具身决策是在获取环境信息并分析任务需求后,选择合理行动方案。决策不仅要处理感知信息,还要适应环境变化。智能体需要根据动态环境、任务要求和目标差异调整策略。本项目中,系统解析“抓取某个颜色物体”的自然语言命令。系统结合视觉识别得到的位置与姿态信息,制定抓取策略。具身智能与大语言模型
02《人工智能程序设计》基于具身智能的自主系统设计目标位姿逆运动学关节控制机械臂动作感知反馈期望的末端位置与姿态计算各关节目标角度控制器下发关节角度指令执行运动并完成抓取等动作视觉、位置、力等信息反馈每个控制周期控制把决策转化为可执行的关节与夹爪动作。具身控制具身控制是根据环境信息和决策结果执行具体动作的过程。控制系统需要根据环境反馈调整行动策略,保证任务精确执行。本项目中,机械臂根据用户指令与任务需求自主规划运动路径。控制器精确调整机械臂位姿。每个控制周期都根据感知信息修正动作,保证抓取精度与稳定性。具身智能与大语言模型
02大语言模型的基础原理《人工智能程序设计》基于具身智能的自主系统设计大语言模型(LLMs)是自然语言处理领域的重要技术。其基础来自深度学习神经网络,尤其是Transformer架构。Transformer的关键是自注意力机制(Self-Attention)。自注意力在处理每个词时,会考虑输入序列中其他词的信息。这一机制有助于捕捉长距离依赖,使模型生成更流畅、连贯、具有上下文语义的文本。输入序列自注意力上下文表示输出自注意力通过关联上下文信息,提升语言理解与生成质量。具身智能与大语言模型
02预训练与微调《人工智能程序设计》基于具身智能的自主系统设计预训练与微调海量文本预训练通用模型微调具体任务模型预训练Pre-training使用大量无标注文本进行训练采用自回归语言建模或掩蔽语言模型任务。学习词汇、语法、句子结构和上下文关系。微调Fine-tuning通过监督学习或强化学习适配具体任务面向问答、情感分析、文本摘要等任务结合人类反馈提高准确性与相关性具身智能与大语言模型
02提示词的设计与优化《人工智能程序设计》基于具身智能的自主系统设计提示词是用户与模型之间的沟通桥梁,精度和结构会直接影响输出质量。提示词应明确任务类型、主题、范围、字数和预期风格。对特定格式内容,应明确组织结构或格式要求。根据任务性质,应指定合适的语气和风格。VS模糊提示词明确提示词写一篇关于环保的文章。围绕可持续发展写一篇科普文章,说明定义、重要性和实施策略,并采用积极语气。高质量提示词需要把任务、结构与语气表达清楚,从而提升模型输出的准确性与可用性。具身智能与大语言模型
02大语言模型的运用与机械臂控制流程《人工智能程序设计》基于具身智能的自主系统设计大语言模型可用于写作、文件阅读与要点提取、翻译、联网搜索、编程和指令生成。在本系统中,大语言模型的关键作用是解析用户自然语言命令并生成控制指令。语言模型把“用户想抓什么”转化为机械臂程序可使用的参数。生成的控制指令进一步指导机械臂完成任务。主要应用写作阅读搜索编程机械臂模型构建
03项目平台《人工智能程序设计》基于具身智能的自主系统设计项目项书稿配置运行环境ubuntu20.04开发环境VSCode仿真平台PyBullet机械臂模型UR5Robotiq85大语言模型DeepSeek平台配置为机械臂仿真、控制与大语言模型集成提供基础支撑。机械臂模型构建
03《人工智能程序设计》基于具身智能的自主系统设计类结构关系RobotArmBase机械臂基类,提供基础框架包含初始化、模型加载、关节解析支持末端执行器控制与重置为具体机械臂型号提供通用能力UR5Robotiq85核心对象与方法1.__init__初始化机械臂基础属性2.load完成模型加载与准备3.__parse_joint_info__解析关节信息与控制属性4.move_ee控制末端执行器运动5.reset重置机械臂与夹爪状态6.move_gripper控制夹爪开合RobotArmBase是后续UR5Robotiq85实现与机械臂控制功能扩展的基础框架。RobotArmBase类:整体框架机械臂模型构建
03RobotArmBase:导入与初始化《人工智能程序设计》基于具身智能的自主系统设计初始化阶段完成机械臂基座位置与方向的基础设定,为后续模型加载与控制提供基础。importpybulletaspimportmathfromcollectionsimportnamedtupleclassRobotArmBase:"""机械臂基类,定义了机械臂的基本功能和接口"""def__init__(self,pos,ori):"""初始化机械臂的位置和方向"""self.base_pos=posself.base_ori=p.getQuaternionFromEuler(ori)导入模块导入PyBullet、math和namedtuple基座位置使用self.base_pos保存机械臂基座位置方向转换将欧拉角(roll,pitch,yaw)转换为四元数,保存为self.base_ori代码机械臂模型构建
03RobotArmBase:load方法《人工智能程序设计》基于具身智能的自主系统设计load方法将具体型号初始化、通用关节解析与加载后补充设置串联起来。defload(self):"""加载机械臂并解析关节信息"""self.__init_robot__()self.__parse_joint_info__()self.__post_load__()__init_robot__初始化具体机械臂模型__parse_joint_info__()解析关节信息与控制属性__post_load__()执行加载后的补充设置代码机械臂模型构建
03关节解析:关节数量与信息结构《人工智能程序设计》基于具身智能的自主系统设计jointInfo结构将关节基础属性、限制参数与控制能力统一组织,便于后续解析与控制。def__parse_joint_info__(self):"""获取机械臂关节信息并设置可控关节"""#获取机械臂的关节总数numJoints=p.getNumJoints(self.id)#定义一个命名元组来存储关节的详细信息jointInfo=namedtuple('jointInfo',['id','name','type','damping','friction','lowerLimit','upperLimit','maxForce','maxVelocity','controllable'])代码通过p.getNumJoints(self.id)获取机械臂关节总数。使用namedtuple定义jointInfo信息结构。该结构便于统一存储和访问关节参数。jointInfo字段说明机械臂模型构建
03关节解析:遍历与基本属性《人工智能程序设计》基于具身智能的自主系统设计通过遍历全部关节并提取基础属性,系统为后续可控关节筛选与运动控制建立数据基础。#存储所有关节信息的列表self.joints=[]#存储可控制关节ID的列表self.controllable_joints=[]foriinrange(numJoints):#获取当前关节的详细信息info=p.getJointInfo(self.id,i)#解析关节的基本属性jointID=info[0]jointName=info[1].decode("utf-8")jointType=info[2]jointDamping=info[6]jointFriction=info[7]jointLowerLimit=info[8]jointUpperLimit=info[9]jointMaxForce=info[10]jointMaxVelocity=info[11]#判断关节是否可控(非固定关节)controllable=(jointType!=p.JOINT_FIXED)代码创建‘self.joints’和’self.controllable_joints’两个列表。代码遍历所有关节,通过’p.getJointInfo’获取详细信息。解析关节ID、名称、类型、阻尼、摩擦、上下限、最大力和最大速度。使用decode("utf-8")将关节名称转换为字符串。机械臂模型构建
03关节解析:可控关节与电机模式《人工智能程序设计》基于具身智能的自主系统设计系统通过判断关节是否固定,完成可控关节筛选、速度控制初始化以及关节信息存储。ifcontrollable:#将可控关节ID添加到列表中self.controllable_joints.append(jointID)#初始化可控关节为速度控制模式,初始速度和力矩都设为0p.setJointMotorControl2(self.id,jointID,p.VELOCITY_CONTROL,targetVelocity=0,force=0)#创建关节信息对象并添加到关节列表中info=jointInfo(jointID,jointName,jointType,jointDamping,jointFriction,jointLowerLimit,jointUpperLimit,jointMaxForce,jointMaxVelocity,controllable)代码非固定关节被判定为可控关节。可控关节ID加入self.controllable_joints。初始控制模式设置为VELOCITY_CONTROL。初始目标速度和力矩均设为0。每个关节的信息对象被加入self.joints。机械臂模型构建
03关节解析:自由度与运动限制《人工智能程序设计》基于具身智能的自主系统设计通过数量校验、关节筛选与上下限提取,系统为逆向运动学与运动控制提供约束参数。#验证可控关节数量是否满足机械臂自由度要求assertlen(self.controllable_joints)>=self.arm_num_dofs#获取机械臂实际使用的可控关节self.arm_controllable_joints=self.controllable_joints[:self.arm_num_dofs]#提取机械臂关节的运动限制参数,获取关节的最小位置限制self.arm_lower_limits=[info.lowerLimitforinfoinself.jointsifinfo.controllable][:self.arm_num_dofs]#获取关节的最大位置限制self.arm_upper_limits=[info.upperLimitforinfoinself.jointsifinfo.controllable][:self.arm_num_dofs]#计算每个关节的运动范围self.arm_joint_ranges=[info.upperLimit-info.lowerLimitforinfoinself.jointsifinfo.controllable][:self.arm_num_dofs]代码数量校验选择关节提取上下限计算范围机械臂模型构建
03机械臂的两种控制方式《人工智能程序设计》基于具身智能的自主系统设计统一接口,灵活切换,满足不同应用需求基于末端执行器的控制:通过逆向运动学计算关节位置;用户直接指定末端目标位置和姿态。基于关节角度的控制:直接给出各关节参数,通过正向运动学形成末端位置与姿态。move_ee方法根据control_method在'end'和'joint'两种方式之间选择基于末端执行器的控制('end')通过逆向运动学计算关节位置;用户直接指定末端目标位置和姿态。适用于:给定末端目标位置和姿态,求解对应的关节角。基于关节角度的控制('joint')直接给出各关节参数;通过正向运动学形成末端位置与姿态。适用于:直接控制关节角度,得到末端位置与姿态。机械臂模型构建
03控制方式选择与逆运动学《人工智能程序设计》基于具身智能的自主系统设计defmove_ee(self,action,control_method):"""控制末端执行器的移动"""assertcontrol_methodin('joint','end')ifcontrol_method=='end':#使用逆运动学计算关节位置x,y,z,roll,pitch,yaw=actionpos=(x,y,z)orn=p.getQuaternionFromEuler((roll,pitch,yaw))joint_poses=p.calculateInverseKinematics(self.id,self.eef_id,pos,orn,self.arm_lower_limits,self.arm_upper_limits,self.arm_joint_ranges,self.arm_rest_poses,maxNumIterations=20)代码1.末端目标位姿用户指定末端执行器目标位置与姿态2.姿态转换将欧拉角转换为四元数3.关节运动限制传入关节上下限、运动范围和休息姿态4.逆运动学求解调用calculateInverseKinematics5.关节解(结果)得到各可控关节目标位置joint_poses机械臂模型构建
03关节控制与电机执行《人工智能程序设计》基于具身智能的自主系统设计elifcontrol_method=='joint':#直接使用关节角度控制assertlen(action)==self.arm_num_dofsjoint_poses=action#控制机械臂关节fori,joint_idinenumerate(self.arm_controllable_joints):p.setJointMotorControl2(self.id,joint_id,p.POSITION_CONTROL,joint_poses[i],force=self.joints[joint_id].maxForce,maxVelocity=self.joints[joint_id].maxVelocity)代码1.输入校验动作长度必须等于机械臂自由度2.遍历可控关节遍历获取每个可控关节ID和索引i3.位置控制执行将目标位置设为joint_poses[i]4.力/速度约束使用关节的最大力和最大速度作为控制约束机械臂模型构建
03机械臂与夹爪重置《人工智能程序设计》基于具身智能的自主系统设计defreset(self):"""重置机械臂到初始状态"""self.reset_arm()self.reset_gripper()
defreset_arm(self):"""重置机械臂到休息位置"""forrest_pose,joint_idinzip(self.arm_rest_poses,self.arm_controllable_joints):p.resetJointState(self.id,joint_id,rest_pose)代码reset()重置机械臂到初始状态机械臂重置defreset_gripper(self):"""重置夹爪到初始状态"""self.open_gripper()
defopen_gripper(self):"""打开夹爪"""self.move_gripper(self.gripper_range[1])
defclose_gripper(self):"""关闭夹爪"""self.move_gripper(self.gripper_range[0])代码夹爪重置reset_arm()重置机械臂到休息位置reset_gripper()重置夹爪到初始状态1.设置休息位置将各可控关节恢复到arm_rest_poses1.open_gripper()打开夹爪(使用开合上限)2.推进仿真若干步self.step_simulation()2.close_gripper()关闭夹爪(使用开合下限)机械臂模型构建
03UR5Robotiq85:具体机械臂初始化《人工智能程序设计》基于具身智能的自主系统设计classUR5Robotiq85(RobotArmBase):"""UR5机械臂类,继承自RobotArmBase,包含UR5机械臂的特定实现"""def__init_robot__(self):"""初始化UR5机械臂"""#设置末端执行器(机械爪)的关节IDself.eef_id=7#设置机械臂的自由度数量(UR5为6自由度)self.arm_num_dofs=6#设置机械臂的默认休息姿态(各关节角度值,单位:弧度)self.arm_rest_poses=[-1.5690622952052096,-1.5446774605904932,1.343946009733127,-1.3708613585093699,-1.5707970583733368,0.0009377758247187636]#加载UR5机械臂的URDF模型,设置为固定基座,启用图形缓存以提高性能self.id=p.loadURDF('./urdf/ur5_robotiq_85.urdf',self.base_pos,self.base_ori,useFixedBase=True,flags=p.URDF_ENABLE_CACHED_GRAPHICS_SHAPES)#设置机械爪的开合范围(单位:米)self.gripper_range=[0,0.085]代码6自由度UR5机械臂本体为6自由度机械臂Robotiq85夹爪采用Robotiq85两指平行夹爪机械臂模型构建
03夹爪联动关节配置《人工智能程序设计》基于具身智能的自主系统设计def__post_load__(self):"""设置夹爪的联动关节"""#设置主控关节名称(控制夹爪开合的主要关节)mimic_parent_name='finger_joint'#设置从动关节及其运动比例,值为1表示与主控关节同向运动,值为-1表示与主控关节反向运动mimic_children_names={'right_outer_knuckle_joint':1,'left_inner_knuckle_joint':1,'right_inner_knuckle_joint':1,'left_inner_finger_joint':-1,'right_inner_finger_joint':-1}#调用设置联动关节的函数self.__setup_mimic_joints__(mimic_parent_name,mimic_children_names)代码夹爪使用一个主控关节finger_joint多个从动关节通过字典保存名称与运动比例。比例为1表示同向运动,比例为-1表示反向运动。__post_load__调用__setup_mimic_joints__建立夹爪联动关系。机械臂模型构建
03夹爪约束与开合控制《人工智能程序设计》基于具身智能的自主系统设计def__setup_mimic_joints__(self,mimic_parent_name,mimic_children_names):"""设置联动关节的约束"""#获取主控关节的IDself.mimic_parent_id=[joint.idforjointinself.jointsif==mimic_parent_name][0]#创建从动关节ID与其运动比例的映射字典self.mimic_child_multiplier={joint.id:mimic_children_names[]forjointinself.jointsifinmimic_children_names}
代码#为每个从动关节创建约束forjoint_id,multiplierinself.mimic_child_multiplier.items():#创建齿轮约束,实现关节间的联动#jointAxis指定齿轮旋转轴方向c=p.createConstraint(self.id,self.mimic_parent_id,self.id,joint_id,jointType=p.JOINT_GEAR,jointAxis=[0,1,0],parentFramePosition=[0,0,0],childFramePosition=[0,0,0])#设置约束参数,gearRatio为齿轮比,负号表示反向运动#maxForce为约束最大力,erp为误差修正参数p.changeConstraint(c,gearRatio=-multiplier,maxForce=100,erp=1)约束设置根据关节名称找到主控关节ID,并建立从动关节ID与比例的映射。对每个从动关节创建JOINT_GEAR齿轮约束使用changeConstraint设置齿轮比、最大力和误差修正参数。机械臂模型构建
03夹爪约束与开合控制《人工智能程序设计》基于具身智能的自主系统设计defmove_gripper(self,open_length):"""控制夹爪的开合"""#计算开合角度open_angle=0.715-math.asin((open_length-0.010)/0.1143)#设置主关节的目标位置,实现夹爪开合p.setJointMotorControl2(self.id,self.mimic_parent_id,p.POSITION_CONTROL,targetPosition=open_angle,force=self.joints[self.mimic_parent_id].maxForce,maxVelocity=self.joints[self.mimic_parent_id].maxVelocity)代码夹爪开合控制move_gripper根据开合长度计算开合角度,并设置主关节目标位置。关节传动链流程主关节齿轮约束从动关节夹爪开合通过主从关节约束与开合角控制,系统实现夹爪联动与稳定开合。SimpleArmEnv:仿真环境类《人工智能程序设计》基于具身智能的自主系统设计importtimeimportrandomimportnumpyasnpimportpybulletaspimportpybullet_dataclassSimpleArmEnv:"""简单仿真环境类,用于创建和管理仿真环境"""SIMULATION_STEP_DELAY=1/240.def__init__(self,robot,vis=False)->None:"""初始化仿真环境,加载机械臂和物体"""self.robot=robotself.vis=visself.physicsClient=Noneself.planeID=Noneself.redBoxId=Noneself.greenBoxId=Noneself.create_simulation_environment()self.load_robot()self.load_objects()代码用于创建和管理机械臂仿真环境保存机械臂对象与可视化开关管理物理引擎、地面和两种方块对象ID初始化后依次创建环境、加载机械臂和加载物体物理引擎地面机器人SimpleArmEnv红色方块绿色方块仿真环境与大语言模型指令
04加载机械臂与初始化仿真场景《人工智能程序设计》基于具身智能的自主系统设计defload_robot(self):"""加载机械臂并设置其仿真步进函数"""self.robot.load()self.robot.step_simulation=self.step_simulation代码机械臂加载与步进函数绑定调用机械臂对象的load方法完成模型加载将机械臂的仿真步进函数绑定为环境的step_simulation仿真环境与大语言模型指令
04仿真环境与大语言模型指令
04环境重置《人工智能程序设计》基于具身智能的自主系统设计defreset(self):"""重置仿真环境,将物体随机放置在新的位置和朝向"""#重置机械臂到初始状态self.robot.reset()#定义物体放置的随机范围x_range=[0.2,0.6]y_range=[-0.3,0.3]z=self.boxHalfHeight#随机生成红色长方体的位置和朝向,在x范围内随机选择位置random_x_red=random.uniform(x_range[0],x_range[1])#在y范围内随机选择位置random_y_red=random.uniform(y_range[0],y_range[1])#随机生成0-360度之间的朝向角度random_orientation_red=random.uniform(0,360)#重置红色长方体的位置和朝向p.resetBasePositionAndOrientation(self.redBoxId,[random_x_red,random_y_red,z],p.getQuaternionFromEuler([0,0,np.radians(random_orientation_red)]代码增加测试场景多样性,提高控制策略的适应性与稳定性。机械臂安全复位《人工智能程序设计》基于具身智能的自主系统设计defreset_robot(self):"""重置机械臂到固定的初始位置"""initial_pose=[0,-1.57,1.57,-1.57,-1.57,0]self.robot.move_ee(initial_pose,control_method='joint')self.robot.move_gripper(0.085)for_inrange(240):self.step_simulation()代码1.设定初始关节姿态将机械臂移动到固定的初始关节姿态:[0,-1.57,1.57,-1.57,-1.57,0]2.打开夹爪设置夹爪开合长度为0.085确保夹爪完全打开3.推进仿真推进240个仿真步确保复位动作完成4.准备新任务机械臂处于已知、安全的初始状态可开始新的任务仿真环境与大语言模型指令
04复位使每次新任务从已知、安全状态开始,减少误差积累,提高任务成功率与稳定性。大语言模型选择与用户交互《人工智能程序设计》基于具身智能的自主系统设计1.模型选择:DeepSeekDeepSeek在中文处理和跨领域适应性方面表现优异,适合本系统的任务理解与指令生成。2.API密钥申请使用模型前需要在SiliconFlow平台申请API密钥。3.集成模型能力通过SiliconFlowAPI调用DeepSeek-V3模型,并将模型能力集成到系统代码中。4.用户输入任务用户通过自然语言输入明确任务,例如:“当前环境中有红色和绿色的物体,请抓取红色物体”仿真环境与大语言模型指令
04本系统选择DeepSeek作为用户与系统交互的大语言模型。1.用户输入任务2.Python控制程序3.SiliconFlowAPI4.DeepSeek-V35.返回控制参数“请抓取红色物体”核心函数get_code_content(task)API身份认证请求转发理解任务生成代码target_color=“red”API建立了本地机械臂程序与云端大语言模型之间的数据通道。仿真环境与大语言模型指令
04《人工智能程序设计》基于具身智能的自主系统设计DeepSeekAPI调用总体架构DeepSeekAPI调用过程《人工智能程序设计》基于具身智能的自主系统设计仿真环境与大语言模型指令
04DeepSeek-V3ChatCompletion1接收用户任务task=“请抓取红色物体”2构造消息system规定任务,user提供需求3添加API认证APIKey4发送POST请求POST/v1/chat/completions5DeepSeek模型推理理解语义、判断目标颜色6返回并解析结果choices→message→contenttarget_color="red"一次API调用包括请求构造、身份认证、模型推理和结果返回。DeepSeek在机械臂系统中的作用用户语言层DeepSeek语义理解层视觉与运动控制层当前环境中有红色和绿色物体,请抓取红色物体。自然语言任务输入任务理解目标提取代码生成输出(指令代码)target_color="red"智能桥梁:连接语言与程序控制摄像头目标定位机械臂夹爪负责感知环境与执行动作,不负责语言理解camera.shot()process_image()execute_grasp()环境感知与动作执行1DeepSeek负责理解抓什么2视觉系统负责确定在哪里3控制程序负责完成怎么抓仿真环境与大语言模型指令
04《人工智能程序设计》基于具身智能的自主系统设计get_code_content:API请求与提示词《人工智能程序设计》基于具身智能的自主系统设计defget_code_content(task):"""从大模型获取代码内容"""#定义API的URLurl="/v1/chat/completions"#定义请求的payload,包含模型名称、消息内容和其他参数payload={#使用的模型名称"model":"deepseek-ai/DeepSeek-V3","messages":[{"role":"system","content":"""你是一个智能机械臂控制器,根据环境状态和任务需求,生成控制变量和参数。当前环境中有红色和绿色的物体,请根据用户输入的任务决定抓取哪种颜色的物体,设置相应参数target_color(str)。请仅输出有效的Python代码,不包含任何解释性文字或Markdown格式。"""},{"role":"user","content":task},代码仿真环境与大语言模型指令
04用户任务task当前环境中有红色和绿色的物体,请抓取红色物体”构建messagessystem提示词user提示词请求模型DeepSeek-V3get_code_content:认证、请求与结果解析《人工智能程序设计》基于具身智能的自主系统设计headers={#sk-******为API密钥#用户需使用自己的密钥替换此处"Authorization":"Bearersk-******","Content-Type":"application/json"}#发送POST请求到API,并获取响应response=requests.post(url,json=payload,headers=headers)#解析JSON响应response_data=response.json()#提取代码内容code_content=response_data["choices"][0]["message"]["content"]returncode_content.replace('```python','').replace('```','').strip()代码仿真环境与大语言模型指令
04system提示词核心要求:只输出有效的Python代码;不包含任何解释性文字或Markdown格式。1.HTTP响应API返回HTTP响应2.解析JSONresponse.json()解析为字典3.choices[0]选择第一个结果4.message5.content提取message对象提取content(代码内容)Camera类:相机参数与初始化《人工智能程序设计》基于具身智能的自主系统设计importpybulletaspimportnumpyasnpclassCamera:"""Camera类用于设置和管理相机的视图和投影矩阵,并提供从像素坐标到世界坐标的转换功能。"""def__init__(self,cam_pos,cam_tar,cam_up_vector,near,far,size,fov):"""初始化Camera对象,计算视图矩阵和投影矩阵,并生成从像素坐标到世界坐标的转换矩阵。"""self.width,self.height=sizeself.near,self.far=near,farself.fov=fov#计算相机的宽高比aspect=self.width/self.height#计算视图矩阵self.view_matrix=puteViewMatrix(cam_pos,cam_tar,cam_up_vector)代码视觉识别与物体抓取
05图像尺寸size宽高比aspect视图矩阵view_matrix视场角fov相机核心参数Camera类:矩阵与像素到世界转换《人工智能程序设计》基于具身智能的自主系统设计jection_matrix=puteProjectionMatrixFOV(self.fov,aspect,self.near,self.far)#将视图矩阵和投影矩阵转换为4x4的numpy数组_view_matrix=np.array(self.view_matrix).reshape((4,4),order='F')_projection_matrix=np.array(jection_matrix).reshape((4,4),order='F')#计算从像素坐标到世界坐标的转换矩阵self.tran_pix_world=np.linalg.inv(_projection_matrix@_view_matrix)代码视觉识别与物体抓取
05ViewMatrix(V)4×4ProjectionMatrix(P)4×4(P@V)4×4inv(P@V)=tran_pix_world4×4像素/裁剪空间世界空间乘积:P@V逆矩阵inv(P@V)像素坐标→世界坐标获取RGB-D图像与世界坐标《人工智能程序设计》基于具身智能的自主系统设计defshot(self):"""获取相机图像,包括RGB图像、深度图和分割图。"""_w,_h,rgb,depth,seg=p.getCameraImage(self.width,self.height,self.view_matrix,jection_matrix)returnrgb,depth,segdefrgbd_2_world(self,w,h,d):"""将RGB-D图像中的像素坐标转换为世界坐标。"""#将像素坐标转换为归一化设备坐标x=(2*w-self.width)/self.widthy=-(2*h-self.height)/self.heightz=2*d-1pix_pos=np.array((x,y,z,1))#使用转换矩阵将像素坐标转换为世界坐标position=self.tran_pix_world@pix_pos#归一化坐标position/=position[3]returnposition[:3]代码视觉识别与物体抓取
05RGB图像Depth图像Seg图像3.齐次坐标2.归一化设备坐标1.像素坐标4.映射到世界坐标5.齐次归一化6.世界坐标颜色掩码:RGB转HSV《人工智能程序设计》基于具身智能的自主系统设计defget_color_mask(rgb,color='red'):"""获取指定颜色的掩码"""hsv=cv2.cvtColor(rgb,cv2.COLOR_RGB2HSV)ifcolor=='red':lower_color1=np.array([0,100,100])upper_color1=np.array([10,255,255])lower_color2=np.array([160,100,100])upper_color2=np.array([180,255,255])mask1=cv2.inRange(hsv,lower_color1,upper_color1)mask2=cv2.inRange(hsv,lower_color2,upper_color2)color_mask=mask1+mask2elifcolor=='green':lower_color=np.array([35,100,100])upper_color=np.array([85,255,255])color_mask=cv2.inRange(hsv,lower_color,upper_color)else:raiseValueError("Unsupportedcolor:choose'red'or'green'")returncolor_mask代码视觉识别与物体抓取
05红色(跨越0/180两段)第一段范围lower_color1=[0,100,100]upper_color1=[10,255,255]第二段范围lower_color2=[160,100,100]upper_color2=[180,255,255]HSV色相H(0°~180°)绿色(单一连续范围)范围lower_color=[35,100,100]upper_color=[85,255,255]HSV色相H(0°~180°)颜色分割把目标颜色区域转化为二值掩码。物体轮廓检测《人工智能程序设计》基于具身智能的自主系统设计defprocess_image(camera,rgb,depth,color='red'):"""处理RGB图像来识别指定颜色的物体"""#获取颜色掩码color_mask=get_color_mask(rgb,color)#创建彩色图像用于显示display_img=cv2.cvtColor(color_mask,cv2.COLOR_GRAY2BGR)#找到物体区域(直接使用颜色掩码)contours,_=cv2.findContours(color_mask,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)#绘制所有轮廓(绿色)cv2.drawContours(display_img,contours,-1,(0,255,0),2)代码视觉识别与物体抓取
05颜色分割提取目标区域→检测外部轮廓→绘制轮廓,为后续计算中心、朝向和抓取提供基础。绿色轮廓:外部轮廓黄色圆点:中心点黄色矩形:最小面积矩形最大轮廓、中心与深度《人工智能程序设计》基于具身智能的自主系统设计ifcontours:#找到最大的轮廓largest_contour=max(contours,key=cv2.contourArea)#用红色绘制最大轮廓cv2.drawContours(display_img,[largest_contour],-1,(0,0,255),3)#计算轮廓的中心M=cv2.moments(largest_contour)ifM["m00"]!=0:cx=int(M["m10"]/M["m00"])cy=int(M["m01"]/M["m00"])#在中心点画一个蓝色圆cv2.circle(display_img,(cx,cy),5,(255,0,0),-1)#获取该点的深度值depth_value=depth[cy,cx]#计算最小面积矩形代码视觉识别与物体抓取
051.轮廓集合2.最大轮廓3.图像矩M4.中心(cx,cy)5.深度值depth[cy,cx]物体朝向与世界坐标《人工智能程序设计》基于具身智能的自主系统设计box=cv2.minAreaRect(largest_contour)box_points=cv2.boxPoints(box)box_points=0(box_points)#绘制最小面积矩形cv2.drawContours(display_img,[box_points],0,(255,255,0),2)#将角度从度数转换为弧度angle=math.radians(-box[2])#使用物体的长宽比来判断朝向width,height=box[1]ifwidth<height:angle+=math.pi/2#将图像坐标转换为世界坐标world_pos=camera.rgbd_2_world(cx,cy,depth_value)returnworld_pos,anglereturnNone,None代码视觉识别与物体抓取
05最小面积矩形角度修正世界坐标输出:world_pos,angle;未检测到目标时返回None,None机械臂抓取过程《人工智能程序设计》基于具身智能的自主系统设计视觉识别与物体抓取
05张开夹爪移动到物体上方下降到抓取位置闭合夹爪提起物体execute_grasp:张开夹爪并移动到物体上方《人工智能程序设计》基于具身智能的自主系统设计defexecute_grasp(env,target_pos,angle):"""执行抓取序列"""actions=[#[x,y,z,roll,pitch,yaw,gripper_opening_length]#0.当前位置张开夹爪[target_pos[0],target_pos[1],target_pos[2]+0.3,0,math.pi/2,angle,0.1],
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 信息安全管理员工作效率强化考核试卷含答案
- 烷基苯装置操作工岗前合规化考核试卷含答案
- 食品安全管理师冲突解决知识考核试卷含答案
- 采油地质工安全宣传强化考核试卷含答案
- 开关设备检修工岗中实操知识技能考核试卷含答案
- 电子绝缘与介质材料制造工安全生产知识强化考核试卷含答案
- 肾盂肿瘤健康宣教要点
- 光缆检测标石:光缆线路运维的关键设施
- 人教版高考英语一轮复习教材知识必修第一册WELCOME UNIT课件(共63张)
- 亲子阅读心得体会
- 产品交货考核管理办法
- JJF(浙) 1200-2023 冷链物流设施设备温湿度参数校准规范
- 新疆隆炬新材料有限公司年产5万吨高性能碳纤维项目环评报告
- T/CECS 10201-2022丁基橡胶自粘防水卷材
- 农产品质量安全检测机构考核评审员考核题库及答案(含各题型)
- 大型商业综合体项目施工组织设计方案
- 尼康S8200中文说明书
- 国家职业技术技能标准 4-14-02-05 老年人能力评估师 人社厅发202332号
- 企业社交活动与员工文娱活动管理制度
- 【人教版】六年级数学上册全册课件
- JT-T-1279-2019地动车检测用轴(轮)重仪
评论
0/150
提交评论