`

使用Axis在Tomcat下发布Webservice操作指南

    博客分类:
  • java
阅读更多

 最近在工作过程中总是需要向其它项目组提供Webservice的接口,由于开始需求不是很明确,接口的定义经常需要变更,每一次下来都需要将Java到wsdl,从wsdl到Java,再根据wsdd文件在tomcat上deploy服务这个过程重复一遍.在这个过程中经常出现一些问题,尤其是长期不用axis之后再突然这么用上一用的时候,总是有或多或少的问题存在,遂经上述过程的一些详细操作步骤整理了一些,供参考.

      使用Axis在Tomcat下发布Webservice有如下几个步骤:

      (1)用JavaBean写好要发布的服务的定义

      (2)使用Java2WSDL命令,根据JavaBean生成WSDL文件

      (3)使用Wsdl2Java命令,根据WSDL文件生成服务端源代码,以及deploy.wsdd文件

      (4)根据deploy.wsdd文件在tomcat下发布Webservice服务          

    (1)用JavaBean写好要发布的服务的定义


     以用户注册为例,需要提供如下样式的用户注册服务,输入参数为com.huawei.mtv.commons.services.schemas.UserRegisterEvt,输出参数为com.huawei.mtv.commons.services.schemas.UserRegisterResp.  

      UserManage接口文件定义:

    view plaincopy to clipboardprint?
package com.huawei.mtv.commons.services;  
import com.huawei.mtv.commons.services.schemas.UserRegisterEvt;  
import com.huawei.mtv.commons.services.schemas.UserRegisterResp;  
public class UserManage  
{  
    public UserRegisterResp register(UserRegisterEvt evt)  
    {  
        return null;  
    }  

package com.huawei.mtv.commons.services;
import com.huawei.mtv.commons.services.schemas.UserRegisterEvt;
import com.huawei.mtv.commons.services.schemas.UserRegisterResp;
public class UserManage
{
 public UserRegisterResp register(UserRegisterEvt evt)
 {
  return null;
 }
}

          输入参数UserRegisterEvt源代码:

   view plaincopy to clipboardprint?
package com.huawei.mtv.commons.services.schemas;  
public class UserRegisterEvt  implements java.io.Serializable {  
        private int accessCode;     
    private java.lang.String level;  
        private java.lang.String userId;  
        public UserRegisterEvt(){  
        }  
      
        public int getAccessCode(){  
        return accessCode;  
    }  
 
    public void setAccessCode(int accessCode){  
        this.accessCode = accessCode;  
    }  
 
    public java.lang.String getLevel(){  
        return level;  
    }  
 
    public void setLevel(java.lang.String level){  
        this.level = level;  
    }  
 
    public java.lang.String getUserId(){  
        return userId;  
    }  
 
    public void setUserId(java.lang.String userId){  
        this.userId = userId;  
    }  

package com.huawei.mtv.commons.services.schemas;
public class UserRegisterEvt  implements java.io.Serializable {
        private int accessCode;  
 private java.lang.String level;
        private java.lang.String userId;
        public UserRegisterEvt(){
        }
   
        public int getAccessCode(){
  return accessCode;
 }

 public void setAccessCode(int accessCode){
  this.accessCode = accessCode;
 }

 public java.lang.String getLevel(){
  return level;
 }

 public void setLevel(java.lang.String level){
  this.level = level;
 }

 public java.lang.String getUserId(){
  return userId;
 }

 public void setUserId(java.lang.String userId){
  this.userId = userId;
 }

         输出参数UserRegisterResp源代码:

   view plaincopy to clipboardprint?
package com.huawei.mtv.commons.services.schemas;  
public class UserRegisterResp  implements java.io.Serializable {  
        private java.lang.String description;  
    private java.lang.String returnCode;  
        public java.lang.String getDescription(){  
        return description;  
    }  
 
    public void setDescription(java.lang.String description){  
        this.description = description;  
    }  
 
    public java.lang.String getReturnCode() {  
        return returnCode;  
    }  
 
    public void setReturnCode(java.lang.String returnCode){  
        this.returnCode = returnCode;  
    }  

package com.huawei.mtv.commons.services.schemas;
public class UserRegisterResp  implements java.io.Serializable {
        private java.lang.String description;
 private java.lang.String returnCode;
        public java.lang.String getDescription(){
  return description;
 }

 public void setDescription(java.lang.String description){
  this.description = description;
 }

 public java.lang.String getReturnCode() {
  return returnCode;
 }

 public void setReturnCode(java.lang.String returnCode){
  this.returnCode = returnCode;
 }
}

       在Eclipse环境下将上述定义文件导出为mtv-common.jar包.至此第一步算是完成了. 

  (2)使用Java2WSDL命令,根据JavaBean生成WSDL文件


      这里我使用的是axis-1_4版本,具体使用到的jar包(只使用了axis-1_4中lib目录中自带的jar包)和命令参见如下代码。

      java2wsdl.bat批处理文件 :

  view plaincopy to clipboardprint?
set axis_home=D:\software\axis2\axis-1_4\lib  
set axis_path=%axis_home%\axis-ant.jar  
set axis_path=%axis_path%;%axis_home%\axis.jar  
set axis_path=%axis_path%;%axis_home%\commons-discovery-0.2.jar  
set axis_path=%axis_path%;%axis_home%\commons-logging-1.0.4.jar  
set axis_path=%axis_path%;%axis_home%\jaxrpc.jar;  
set axis_path=%axis_path%;%axis_home%\log4j-1.2.8.jar  
set axis_path=%axis_path%;%axis_home%\mtv-common.jar  
set axis_path=%axis_path%;%axis_home%\saaj.jar  
set axis_path=%axis_path%;%axis_home%\wsdl4j-1.5.1.jar  
set CLASSPATH=%CLASSPAHT%;%axis_path%  
java org.apache.axis.wsdl.Java2WSDL -n "urn:UserManage"  -p"com.huawei.mtv.commons.services" "urn:UserManage" -o "UserManage.wsdl" -l "http://localhost:8080/axis/services/UserManage"   com.huawei.mtv.commons.services.UserManage 
set axis_home=D:\software\axis2\axis-1_4\lib
set axis_path=%axis_home%\axis-ant.jar
set axis_path=%axis_path%;%axis_home%\axis.jar
set axis_path=%axis_path%;%axis_home%\commons-discovery-0.2.jar
set axis_path=%axis_path%;%axis_home%\commons-logging-1.0.4.jar
set axis_path=%axis_path%;%axis_home%\jaxrpc.jar;
set axis_path=%axis_path%;%axis_home%\log4j-1.2.8.jar
set axis_path=%axis_path%;%axis_home%\mtv-common.jar
set axis_path=%axis_path%;%axis_home%\saaj.jar
set axis_path=%axis_path%;%axis_home%\wsdl4j-1.5.1.jar
set CLASSPATH=%CLASSPAHT%;%axis_path%
java org.apache.axis.wsdl.Java2WSDL -n "urn:UserManage"  -p"com.huawei.mtv.commons.services" "urn:UserManage" -o "UserManage.wsdl" -l "http://localhost:8080/axis/services/UserManage"   com.huawei.mtv.commons.services.UserManage

 

    执行上述批处理文件之后就生成了UserManage.wsdl文件了. 

    Java2WSDL命令的个参数含义如下:

  view plaincopy to clipboardprint?
-o:指定输出的WSDL文件的文件名。      
 
-l:指定服务的位置。  
          
-n:WSDL文件的目标名字空间。  
          
-p:指定从package到名字空间的映射,这里可以有多个映射。 
-o:指定输出的WSDL文件的文件名。   

-l:指定服务的位置。
       
-n:WSDL文件的目标名字空间。
       
-p:指定从package到名字空间的映射,这里可以有多个映射。

  

  要注意如下几点:

  -o -l -n -p这些选项最好与后面选项对应的值之间没有空格,尤其是-p参数,有空格的话在生成WSDL文件的时候会报错.    

  (3)使用Wsdl2Java命令,根据WSDL文件生成服务端源代码,以及deploy.wsdd文件


    使用如下wsdl2java.bat批处理文件来生成Webservice服务端和客户端源代码.

  view plaincopy to clipboardprint?
set axis_home=D:\software\axis2\axis-1_4\lib  
set axis_path=%axis_home%\axis-ant.jar  
set axis_path=%axis_path%;%axis_home%\axis.jar  
set axis_path=%axis_path%;%axis_home%\commons-discovery-0.2.jar  
set axis_path=%axis_path%;%axis_home%\commons-logging-1.0.4.jar  
set axis_path=%axis_path%;%axis_home%\jaxrpc.jar;  
set axis_path=%axis_path%;%axis_home%\log4j-1.2.8.jar  
set axis_path=%axis_path%;%axis_home%\mtv-common.jar  
set axis_path=%axis_path%;%axis_home%\saaj.jar  
set axis_path=%axis_path%;%axis_home%\wsdl4j-1.5.1.jar  
set CLASSPATH=%CLASSPAHT%;%axis_path%  
java org.apache.axis.wsdl.WSDL2Java --server-side --skeletonDeploy true UserManage.wsdl 
set axis_home=D:\software\axis2\axis-1_4\lib
set axis_path=%axis_home%\axis-ant.jar
set axis_path=%axis_path%;%axis_home%\axis.jar
set axis_path=%axis_path%;%axis_home%\commons-discovery-0.2.jar
set axis_path=%axis_path%;%axis_home%\commons-logging-1.0.4.jar
set axis_path=%axis_path%;%axis_home%\jaxrpc.jar;
set axis_path=%axis_path%;%axis_home%\log4j-1.2.8.jar
set axis_path=%axis_path%;%axis_home%\mtv-common.jar
set axis_path=%axis_path%;%axis_home%\saaj.jar
set axis_path=%axis_path%;%axis_home%\wsdl4j-1.5.1.jar
set CLASSPATH=%CLASSPAHT%;%axis_path%
java org.apache.axis.wsdl.WSDL2Java --server-side --skeletonDeploy true UserManage.wsdl

   执行上述批处理文件之后会生成源代码的目录与结构如下:

   UserManage_pkg包下生成文件如下:

  view plaincopy to clipboardprint?
deploy.wsdd  
undeploy.wsdd  
UserManage.java  
UserManageService.java  
UserManageServiceLocator.java  
UserManageSoapBindingImpl.java  
UserManageSoapBindingSkeleton.java  
UserManageSoapBindingStub.java 
deploy.wsdd
undeploy.wsdd
UserManage.java
UserManageService.java
UserManageServiceLocator.java
UserManageSoapBindingImpl.java
UserManageSoapBindingSkeleton.java
UserManageSoapBindingStub.java  

  另外也生成了com包,该包下的java文件与我们最初在第一步定义的文件基本相同.

  利用Eclipse将上述生成的Java代码进行编译,导出为mtv-service.jar

     (4)根据deploy.wsdd文件在tomcat下发布Webservice服务

     将axis-1_4\webapps目录下的axis直接拷贝到tomcat/webapps目录下,再将mtv-service.jar包放到tomcat/webapps/axis/WEB-INFO/lib目录下,将tomcat启动,执行如下deploy.bat批处理命令即可发布UserManage服务了.

     deploy.bat批处理文件如下:    

     view plaincopy to clipboardprint?
set axis_home=D:\software\axis2\axis-1_4\lib  
set axis_path=%axis_home%\axis-ant.jar  
set axis_path=%axis_path%;%axis_home%\axis.jar  
set axis_path=%axis_path%;%axis_home%\commons-discovery-0.2.jar  
set axis_path=%axis_path%;%axis_home%\commons-logging-1.0.4.jar  
set axis_path=%axis_path%;%axis_home%\jaxrpc.jar;  
set axis_path=%axis_path%;%axis_home%\log4j-1.2.8.jar  
set axis_path=%axis_path%;%axis_home%\saaj.jar  
set axis_path=%axis_path%;%axis_home%\wsdl4j-1.5.1.jar  
set CLASSPATH=%CLASSPAHT%;%axis_path%  
java org.apache.axis.client.AdminClient -l"http://localhost:9000/axis/services/UserManage" deploy.wsdd 
set axis_home=D:\software\axis2\axis-1_4\lib
set axis_path=%axis_home%\axis-ant.jar
set axis_path=%axis_path%;%axis_home%\axis.jar
set axis_path=%axis_path%;%axis_home%\commons-discovery-0.2.jar
set axis_path=%axis_path%;%axis_home%\commons-logging-1.0.4.jar
set axis_path=%axis_path%;%axis_home%\jaxrpc.jar;
set axis_path=%axis_path%;%axis_home%\log4j-1.2.8.jar
set axis_path=%axis_path%;%axis_home%\saaj.jar
set axis_path=%axis_path%;%axis_home%\wsdl4j-1.5.1.jar
set CLASSPATH=%CLASSPAHT%;%axis_path%
java org.apache.axis.client.AdminClient -l"http://localhost:9000/axis/services/UserManage" deploy.wsdd

    

    经过上述4大步骤,我们的UserManage服务就顺利发布了.

    通过http://localhost:9000/axis/servlet/AxisServlet即可查看到刚才发布UserManage服务了.

    注意:

    在存在server-config.wsdd文件的时候上述方式发布Webservice服务则可能出现错误,这时我们可以先将原来的server-config.wsdd文件重新命名,在按照上述步骤(4)的方式发布服务,会再次生成新的server-config.wsdd文件。我们可以将新生成的文件中类似如下代码块复制到原来的server-config.wsdd文件中就可以将新的需要发布的服务合并到原来的服务中去,实现新老服务共存。

    view plaincopy to clipboardprint?
<service name="UserManage" provider="java:RPC">  
 <parameter name="allowedMethods" value="*"/>  
 <parameter name="typeMappingVersion" value="1.2"/>  
 <parameter name="wsdlPortType" value="UserManage"/>  
 <parameter name="className" value="UserManage_pkg.UserManageSoapBindingSkeleton"/>  
 <parameter name="wsdlServicePort" value="UserManage"/>  
 <parameter name="wsdlTargetNamespace" value="urn:UserManage"/>  
 <parameter name="wsdlServiceElement" value="UserManageService"/>  
 <parameter name="schemaUnqualified" value="http://schemas.services.commons.mtv.huawei.com"/>  
 <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" qname="ns1:UserRegisterEvt" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:com.huawei.mtv.commons.services.schemas.UserRegisterEvt" xmlns:ns1="http://schemas.services.commons.mtv.huawei.com"/>  
 <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" qname="ns2:UserRegisterResp" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:com.huawei.mtv.commons.services.schemas.UserRegisterResp" xmlns:ns2="http://schemas.services.commons.mtv.huawei.com"/>  

 </service>  

分享到:
评论

相关推荐

    停车场管理系统c语言.docx

    问题描述: 停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入; 当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。 1.基本要求 (1)以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。 (2)每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。 (3)栈以顺序结构实现,队列以链表实现。 2.重点难点 重点:针对停车场问题的特点,利

    精选毕设项目-人民好公仆小程序(生活+便民+政务).zip

    精选毕设项目-人民好公仆小程序(生活+便民+政务)

    精选毕设项目-相册;处理用户信息.zip

    精选毕设项目-相册;处理用户信息

    精选毕设项目-喵喵小说.zip

    精选毕设项目-喵喵小说

    精选毕设项目-图片预览带后端.zip

    精选毕设项目-图片预览带后端

    精选项目-爱靓女带后台.zip

    精选项目-爱靓女带后台

    法院综合安全监管平台解决方案PPT(53页).pptx

    在科技与司法的交响曲中,智慧法院应运而生,成为新时代司法服务的新篇章。它不仅仅是一个概念,更是对法院传统工作模式的一次深刻变革。智慧法院通过移动信息化技术,为法院系统注入了强大的生命力,有效缓解了案多人少的矛盾,让司法服务更加高效、便捷。 立案、调解、审判,每一个阶段都融入了科技的智慧。在立案阶段,智慧法院利用区块链技术实现可信存证,确保了电子合同的合法性和安全性,让交易双方的身份真实性、交易安全性得到了有力见证。这不仅极大地缩短了立案时间,还为后续审判工作奠定了坚实的基础。在调解阶段,多元调解服务平台借助人工智能、自然语言处理等前沿技术,实现了矛盾纠纷的快速化解。无论是矛盾类型的多元化,还是化解主体的多元化,智慧法院都能提供一站式、全方位的服务,让纠纷解决更加高效、和谐。而在审判阶段,智能立案、智能送达、智能庭审、智能判决等一系列智能化手段的应用,更是让审判活动变得更加智能化、集约化。这不仅提高了审判效率,还确保了审判质量的稳步提升。 更为引人注目的是,智慧法院还构建了一套完善的执行体系。移动执行指挥云平台的建设,让执行工作变得更加精准、高效。执行指挥中心和信息管理中心的一体化应用,实现了信息的实时传输和交换,为执行工作提供了强有力的支撑。而执行指挥车的配备,更是让执行现场通讯信号得到了有力保障,应急通讯能力得到了显著提升。这一系列创新举措的实施,不仅让执行难问题得到了有效解决,还为构建诚信社会、保障金融法治化营商环境提供了有力支撑。智慧法院的出现,让司法服务更加贴近民心,让公平正义的阳光更加温暖人心。

    西门子1200与3台台达DTK温控器通讯程序 功能:实现西门子1200 PLC对3台台达DTK温控器进行485通讯控制,在触摸屏上设定温度,读取温度 器件:西门子12

    西门子1200与3台台达DTK温控器通讯程序 功能:实现西门子1200 PLC对3台台达DTK温控器进行485通讯控制,在触摸屏上设定温度,读取温度 器件:西门子1200 1214DC DC DC.昆仑通态TPC7062Ti ,西门子KTP700 Basic PN,台达DTK 4848V12温控器。 说明:的是程序,带详细注释程序,西门子触摸屏程序,PLC设置和温控器设置,接线说明书。 #SIEMENS 西门子

    机械设计电阻绕线焊线一体机sw18全套技术资料100%好用.zip

    机械设计电阻绕线焊线一体机sw18全套技术资料100%好用.zip

    VB6编写的上位机采集2路温度 并形成曲线图 还可查看历史数据

    VB6编写的上位机源码,可实时显示曲线图,带有数据库,可以进行历史数据的保存 及 查看历史采集数据。

    精选毕设项目-新浪读书.zip

    精选毕设项目-新浪读书

    jQuery+Slick插件实现游戏人物轮播展示切换特效源码.zip

    jQuery+Slick插件实现游戏人物轮播展示切换特效源码是一款通过背景图片的切换来显示不同的人物效果,轮播效果通过slick幻灯片插件来制作。效果非常棒,有需要的朋友可以直接下载使用,适应各大网站

    精选毕设项目-地图查找附件.zip

    精选毕设项目-地图查找附件

    (蛐蛐voc数据)农作物病虫害识别目标检测数据集,VOC格式,蛐蛐数据集,纯手动标注,用来进行目标检测代码训练的数据

    (蛐蛐voc数据)农作物病虫害识别目标检测数据集,VOC格式,蛐蛐数据集,纯手动标注,用来进行目标检测代码训练的数据。

    MATLAB Simulink仿真模型 双馈风机并网频率控制仿真模型,利用下垂控制与惯性控制结合的综合惯性控制,实现电力系统的频率稳定,两台同步发电机组,具体参数可自行调节,频率波形比较可利用matl

    MATLAB Simulink仿真模型 双馈风机并网频率控制仿真模型,利用下垂控制与惯性控制结合的综合惯性控制,实现电力系统的频率稳定,两台同步发电机组,具体参数可自行调节,频率波形比较可利用matlab工作区画出。

    科研项目结题报告的撰写指南:结构、内容与注意事项

    一、结题报告的类型及主要结构 结题报告是一种专门用于科研课题结题验收的实用性报告类文体,也叫研究报告。它是研究者在课题研究结束后对科研课题研究过程和研究成果进行客观、全面、实事求是的描述,是课题研究所有材料中最主要的材料,也是科研课题结题验收的主要依据。   一篇规范、合格的结题报告,需要回答好3个问题:一是“为什么要选择这项课题进行研究?”二是“这项课题是怎样进行研究的?”三是“课题研究取得哪些研究成果?”  基本结构大致包括以下部分: 第一个问题 “为什么要选择这项课题进行研究?”  1.课题提出的背景;2.课题研究的意义(包括理论意义和现实意义,这个部分也可以合并归入“课题提出的背景”部分);第二个问题“这项课题是怎样进行研究的?”3.文献综述;4.课题研究的理论依据;5.课题研究的目标;6.课题研究的主要内容;7.课题研究的对象;8.课题研究的方法;9. 课题研究的主要过程(研究的步骤);   除了第9部分外,从第1到第8部分在填报课题立项申报表、在制定课题研究方案、在开题报告中,都有要求,内容基本相同。到了撰写结题报告时,只须稍作适当修改就可以了。而第9部分,则需要通过对

    1+X网络安全应急响应之应急准备:构建高效安全的应急响应体系

    内容概要:本文档重点讲述了网络安全应急响应的各项准备工作,涵盖了‘1+X’网络安全应急响应的职业技能等级证书概述、应急响应的基础知识、应急响应组织的建立、风险评估与改进、应急响应预案的制定以及详细的应急响应计划处置样例。文中详细介绍了各级职业技能的要求和任务,尤其关注如何未雨绸缪,制定完善的应急预案以应对潜在的网络安全风险;同时也探讨了如何在网络安全事件发生时,采取及时有效的应急处置措施。 适合人群:从事或有兴趣进入网络安全领域的从业人员,尤其是准备考取‘1+X’网络安全应急响应职业技能等级证书的相关人员。 使用场景及目标:帮助读者了解网络安全应急响应的基本概念及其在整个国家安全框架中的重要地位;指导读者学会如何建立健全高效的应急响应组织结构,如何进行全面的风险评估以及如何编制切实可行的应急预案;通过实例剖析,增强读者应对突发网络安全事件的能力。文档的目标在于提升读者在不同层面的专业技能,包括但不限于系统备份、日志分析、安全漏洞修复等方面的能力。 阅读建议:此文档结构清晰,内容详尽,非常适合有一定基础的技术从业者参考学习。建议读者逐章节深入了解,特别是关注自身岗位对应的技能细分类别。此外,结合实例深入理解和练习如何进行应急处置是非常有价值的,有助于提升自身的实战能力。

    电动汽车动力系统匹配计算模型:输入整车参数及性能要求,一键生成驱动系统的扭矩功率峰值转速等参数 2、整车动力经济性计算模型:包含NEDC WLTC CLTC工况,输入整车参数可生成工况电耗、百公里电

    电动汽车动力系统匹配计算模型:输入整车参数及性能要求,一键生成驱动系统的扭矩功率峰值转速等参数。 2、整车动力经济性计算模型:包含NEDC WLTC CLTC工况,输入整车参数可生成工况电耗、百公里电耗、匀速工况续航、百公里电耗等信息。 实际项目中使用的计算仿真模型. 两个模型打包

    chromedriver-linux64_122.0.6254.0.zip

    chromedriver-linux64_122.0.6254.0

    SRS构型七自由度冗余机械臂运动学建模全套matlab代码 代码主要功能: 1. 基于臂角参数化方法求解机械臂在给定末端位姿和臂角下的关节角度; 2. 求解机械臂在给定末端位姿下的有效臂角范围

    SRS构型七自由度冗余机械臂运动学建模全套matlab代码 代码主要功能: [1]. 基于臂角参数化方法求解机械臂在给定末端位姿和臂角下的关节角度; [2]. 求解机械臂在给定末端位姿下的有效臂角范围,有效即在该区间内机械臂关节角度不会超出关节限位; [3]. 以避关节限位为目标在有效臂角区间内进行最优臂角的选取,进而获取机械臂在给定末端位姿下的最优关节角度。 购前须知: 1. 代码均为个人手写,主要包含运动学建模全套代码; 2. 代码已经包含必要的注释; 包含原理推导文档,不包含绘图脚本以及urdf;

Global site tag (gtag.js) - Google Analytics