美文网首页
在格子里搬移物体的机器人的实现

在格子里搬移物体的机器人的实现

作者: ww4u | 来源:发表于2018-08-04 16:35 被阅读0次
  • 在一个板子各个格子间搬移物体
    1. 移动到源位置
    2. 闭合爪子
    3. 移动到目标位置
    4. 松开爪子
    5. 退出目标位置


      image.png

代码实现

if __name__ == "__main__":
    arm = sinanju.Sinanju("Sinanju")
    cylinder = Cylinder()
    grid = Grid()

    robo = TianruiRobo( arm, grid, cylinder )
    robo.preStudy()

    posCount = robo.posSize()

    for id in range( 0, posCount ):
        robo.move( id, ( id + 1 )% posCount )
  • 创建机械臂对象
  • 创建格子里的物体,描述物理尺寸
  • 创建网格,描述各个网格的位置
  • 创建搬移机器人,搬移机器人由以下部分组成
    • 机械臂
    • 网格
    • 物体

网格

  • 网格里面定义了网格点的位置
  • 根据序号得到网格的坐标
class Grid():
    def __init__( self ):
        self.mGrids = [
                        ( 400,150 ),
                        ( 200,150 ),
                        ( 200,-150 ),
                        ( 400,-150 )
                ]
        self.mZ = 270                  

    def takeAt( self, index ):
        if ( index >= len(self.mGrids) ):
            raise Exception("over range")
        xy =  self.mGrids[index]           
        coordItem = ( xy[0], xy[1], self.mZ, 0 )            
        return coordItem

搬移机器人

几个method的说明

  • guessMoveTime
    • 根据空间位置,计算位置间的移动时间
def guessMoveTime( self, a, b ):
        distance = math.sqrt( math.pow( (a[0]-b[0]),2 ) 
                             + math.pow( (a[1]-b[1]),2 )
                             + math.pow( (a[2]-b[2]),2 ) )
        t = distance / self.mSpeed
        if ( t < 0.5 ):
            t = 0.5
        return t
  • posSize
    • 网格点个数
  • preStudy
    • 预先计算爪子的张开和闭合动作
def preStudy( self ):
        # open
        self.mRobo.preMove( 0, self.mOpenPage, 
                            (0,0,0, self.mHandAction[0] ), 
                            (0,0,0, self.mHandAction[1] ),
                            self.mHandTime )
        self.mRobo.waitEnd( 0, self.mOpenPage )

        # close 
        self.mRobo.preMove( 0, self.mClosePage, 
                            (0,0,0, self.mHandAction[1] ), 
                            (0,0,0, self.mHandAction[0] ),
                            self.mHandTime )
        self.mRobo.waitEnd( 0, self.mClosePage )  
  • openHand
    • 张开爪子
def openHand( self, op1 = None, op2 = None ):
        self.mRobo.call( 0, self.mOpenPage )

        # inter op
        if ( op1 != None ):
            op1

        if ( op2 != None ):
            op2

        self.mRobo.waitIdle( 0, self.mOpenPage )

  • closeHand
    • 闭合爪子
def closeHand( self, op1 = None, op2 = None ):
        self.mRobo.call( 0, self.mClosePage )

        # inter op
        if ( op1 != None ):
            op1

        if ( op2 != None ):
            op2

        self.mRobo.waitIdle( 0, self.mClosePage ) 
  • move
    • 在两个序号间移动
      1. 得到当前位置
      2. 移动到目标位置
      3. 闭合爪子
      4. 搬移
      5. 展开爪子
      6. 退出格子
  • 展开爪子和闭合爪子过程中使用了一个小技巧,在张开、闭合过程中计算下一步动作
def move( self, idFrom, idTo ):
        """
        get an item from idFrom to idTo 
        """
        # get a, b
        coordFrom = self.mGrid.takeAt( idFrom )
        coordTo = self.mGrid.takeAt( idTo ) 

        # now 
        nowPos = self.mRobo.pose()

        # to from
        t = self.guessMoveTime( nowPos, coordFrom )
        self.mRobo.preMovej( 0, self.mMovePage, 
                            nowPos,
                            coordFrom,
                            t,
                            self.mJHeight,
                            self.mJTime
                        )
        print( nowPos, coordFrom )                        
        self.mRobo.waitEnd( 0, self.mMovePage )

        self.mRobo.call( 0, self.mMovePage )
        self.mRobo.waitIdle( 0, self.mMovePage, t * 20 )

        # to to
        nowPos = self.mRobo.pose()
        t = self.guessMoveTime( nowPos, coordTo )

        # close
        print( nowPos, coordTo )  
        self.closeHand( self.mRobo.preMovej( 0, self.mMovePage, nowPos, coordTo, t, self.mJHeight, self.mJTime ) )
        self.mRobo.waitEnd( 0, self.mMovePage )

        # go 
        self.mRobo.call( 0, self.mMovePage )
        self.mRobo.waitIdle( 0, self.mMovePage, t * 20 )
        
        # +height
        nowPos = self.mRobo.pose()
        t = self.guessMoveTime( nowPos, ( nowPos[0], nowPos[1], nowPos[2] + self.mJHeight) )
        # open
        jZ = ( nowPos[0], nowPos[1], nowPos[2] + self.mJHeight,0)
        print( nowPos, coordTo, jZ )  
        self.openHand( self.mRobo.preMove( 0, self.mMovePage, nowPos, jZ, self.mJTime ) )
        self.mRobo.waitEnd( 0, self.mMovePage )

        self.mRobo.call( 0, self.mMovePage )
        self.mRobo.waitIdle( 0, self.mMovePage )

all

class TianruiRobo():
    # configs
    mOpenPage = 8
    mClosePage = 9

    mMovePage = 0

    # hand config
    mHandAction=( 10.0,30.0 )
    mHandTime = 1.0

    mSpeed = 80.0*2
    mJHeight = 50.0
    mJTime = 1.0

    def __init__(self, robo, grid, cylinder ):
        self.mRobo = robo 
        self.mGrid = grid 
        self.mCylinder = cylinder 
        pass 

    def guessMoveTime( self, a, b ):
        distance = math.sqrt( math.pow( (a[0]-b[0]),2 ) 
                             + math.pow( (a[1]-b[1]),2 )
                             + math.pow( (a[2]-b[2]),2 ) )
        t = distance / self.mSpeed
        if ( t < 0.5 ):
            t = 0.5
        return t

    def posSize( self ):
        return len( self.mGrid.mGrids )        

    def preStudy( self ):
        # open
        self.mRobo.preMove( 0, self.mOpenPage, 
                            (0,0,0, self.mHandAction[0] ), 
                            (0,0,0, self.mHandAction[1] ),
                            self.mHandTime )
        self.mRobo.waitEnd( 0, self.mOpenPage )

        # close 
        self.mRobo.preMove( 0, self.mClosePage, 
                            (0,0,0, self.mHandAction[1] ), 
                            (0,0,0, self.mHandAction[0] ),
                            self.mHandTime )
        self.mRobo.waitEnd( 0, self.mClosePage )                            

    def openHand( self, op1 = None, op2 = None ):
        self.mRobo.call( 0, self.mOpenPage )

        # inter op
        if ( op1 != None ):
            op1

        if ( op2 != None ):
            op2

        self.mRobo.waitIdle( 0, self.mOpenPage )

    def closeHand( self, op1 = None, op2 = None ):
        self.mRobo.call( 0, self.mClosePage )

        # inter op
        if ( op1 != None ):
            op1

        if ( op2 != None ):
            op2

        self.mRobo.waitIdle( 0, self.mClosePage )        

    def move( self, idFrom, idTo ):
        """
        get an item from idFrom to idTo 
        """
        # get a, b
        coordFrom = self.mGrid.takeAt( idFrom )
        coordTo = self.mGrid.takeAt( idTo ) 

        # now 
        nowPos = self.mRobo.pose()

        # to from
        t = self.guessMoveTime( nowPos, coordFrom )
        self.mRobo.preMovej( 0, self.mMovePage, 
                            nowPos,
                            coordFrom,
                            t,
                            self.mJHeight,
                            self.mJTime
                        )
        print( nowPos, coordFrom )                        
        self.mRobo.waitEnd( 0, self.mMovePage )

        self.mRobo.call( 0, self.mMovePage )
        self.mRobo.waitIdle( 0, self.mMovePage, t * 20 )

        # to to
        nowPos = self.mRobo.pose()
        t = self.guessMoveTime( nowPos, coordTo )

        # close
        print( nowPos, coordTo )  
        self.closeHand( self.mRobo.preMovej( 0, self.mMovePage, nowPos, coordTo, t, self.mJHeight, self.mJTime ) )
        self.mRobo.waitEnd( 0, self.mMovePage )

        # go 
        self.mRobo.call( 0, self.mMovePage )
        self.mRobo.waitIdle( 0, self.mMovePage, t * 20 )
        
        # +height
        nowPos = self.mRobo.pose()
        t = self.guessMoveTime( nowPos, ( nowPos[0], nowPos[1], nowPos[2] + self.mJHeight) )
        # open
        jZ = ( nowPos[0], nowPos[1], nowPos[2] + self.mJHeight,0)
        print( nowPos, coordTo, jZ )  
        self.openHand( self.mRobo.preMove( 0, self.mMovePage, nowPos, jZ, self.mJTime ) )
        self.mRobo.waitEnd( 0, self.mMovePage )

        self.mRobo.call( 0, self.mMovePage )
        self.mRobo.waitIdle( 0, self.mMovePage )

相关文章

  • 在格子里搬移物体的机器人的实现

    在一个板子各个格子间搬移物体移动到源位置闭合爪子移动到目标位置松开爪子退出目标位置image.png 代码实现 创...

  • 吴恩达深度学习3.8-Anchor box

    之前我们所有提到的方法,在分出来的格子当中都只能检测到单个目标物体,那么如果想实现在一个格子里识别出多个目标物体,...

  • 18NGUI之背包系统

    NGUI背包系统的制作## 一、背包系统的搭建## 二、格子里面物品(预制物的制作)## 格子里面的物体需要实现可...

  • 码垛的代码实现

    从不同的位置移动物体,分解动作为 将夹子从垂直方向移入物体 收拢夹子 垂直搬移物体到目标位置 松开夹子 从物体中退...

  • 宝贝格子加盟创新C2B模式,助力企业盈利佳绩

    综合体模式,让消费者可以感受到全面、多样的购物体验,加强宝贝格子加盟门店的目标客户群体的粘性,实现宝贝格子加...

  • 在格子里爬行

    多少个夜晚 点一盏摇曳的灯 萤火微光 却是我的阿拉神灯 橘黄的灯光 拉长的身影 腰弯如弓 孤独前行 夜已深沉 星星...

  • 图形学 贴图详解

    在光照这部分里我讲了怎么实现物体的明暗关系,但物体还是纯色。在实际的3D建模过程中,3D物体一般都需要手绘贴图,本...

  • 物体随机浮动的效果

    分享一段在Unity中实现物体在水上随机浮动效果的程序。实现的主要原理是把物体的position和rotation...

  • 《慢思考》书摘

    一、大脑是如何思考的? 1.大脑比电脑复杂得多 人类大脑是已知宇宙里最复杂的物体。虽然在各种节目的比赛里,机器人屡...

  • Android JNI实现图片处理和coco-mobilenet

    话不多说,想要搬移代码快速实现的直接看github:https://github.com/Frank1481906...

网友评论

      本文标题:在格子里搬移物体的机器人的实现

      本文链接:https://www.haomeiwen.com/subject/jsgcdftx.html