Header Ads

  • Breaking News

    Phương pháp lập trình robot Python: Hành vi tránh chướng ngại vật

    Phương pháp lập trình robot Python: Hành vi tránh chướng ngại vật

    Đi về phía mục tiêu khi có chướng ngại vật ở hướng đó là một trường hợp điển hình. Thay vì lao đầu vào những thứ theo cách của chúng ta, chúng ta hãy cố gắng lập trình một luật điều khiển để khiến robot tránh chúng.
    Để đơn giản hóa kịch bản, bây giờ chúng ta hãy quên hoàn toàn điểm mục tiêu và chỉ thực hiện mục tiêu sau: Khi không có chướng ngại vật phía trước, hãy tiến về phía trước. Khi gặp chướng ngại vật, hãy quay lưng lại với nó cho đến khi nó không còn ở trước mặt chúng ta nữa.
    Theo đó, khi không có chướng ngại vật phía trước, chúng ta muốn vectơ tham chiếu của chúng ta chỉ đơn giản hướng về phía trước. Khi đó ω sẽ bằng 0 và v sẽ là tốc độ cực đại. Tuy nhiên, ngay sau khi chúng tôi phát hiện chướng ngại vật bằng cảm biến khoảng cách của mình, chúng tôi muốn vectơ tham chiếu chỉ theo bất kỳ hướng nào cách xa chướng ngại vật. Điều này sẽ làm cho ω bắn lên để quay chúng ta khỏi chướng ngại vật và làm cho v giảm xuống để đảm bảo rằng chúng ta không vô tình đụng phải chướng ngại vật trong quá trình này.
    Một cách đơn giản để tạo vectơ tham chiếu mong muốn của chúng tôi là chuyển chín giá trị đọc gần nhau thành vectơ và lấy tổng có trọng số. Khi không có chướng ngại vật nào được phát hiện, các vectơ sẽ tổng đối xứng, dẫn đến một vectơ tham chiếu hướng thẳng về phía trước như mong muốn. Nhưng nếu một cảm biến trên, chẳng hạn, bên phải chọn một chướng ngại vật, nó sẽ đóng góp một vectơ nhỏ hơn vào tổng và kết quả sẽ là một vectơ tham chiếu bị dịch chuyển về phía bên trái.
    Đối với rô bốt thông thường có vị trí đặt cảm biến khác, ý tưởng tương tự có thể được áp dụng nhưng có thể yêu cầu thay đổi về trọng lượng và / hoặc sự cẩn thận bổ sung khi các cảm biến đối xứng ở phía trước và phía sau của rô bốt, vì tổng trọng số có thể bằng không .
    Khi được lập trình chính xác, robot có thể tránh được những chướng ngại vật phức tạp này.
    Đây là mã thực hiện điều này trong avoid_obstacles_controller.py:
    # sensor gains (weights)
    self.sensor_gains = [ 1.0+( (0.4*abs(p.theta)) / pi )
                          for p in supervisor.proximity_sensor_placements() ]
    
    # ...
    
    # return an obstacle avoidance vector in the robot's reference frame
    # also returns vectors to detected obstacles in the robot's reference frame
    def calculate_ao_heading_vector( self ):
      # initialize vector
      obstacle_vectors = [ [ 0.0, 0.0 ] ] * len( self.proximity_sensor_placements )
      ao_heading_vector = [ 0.0, 0.0 ]             
      
      # get the distances indicated by the robot's sensor readings
      sensor_distances = self.supervisor.proximity_sensor_distances()
      
      # calculate the position of detected obstacles and find an avoidance vector
      robot_pos, robot_theta = self.supervisor.estimated_pose().vector_unpack()
      
      for i in range( len( sensor_distances ) ):
        # calculate the position of the obstacle
        sensor_pos, sensor_theta = self.proximity_sensor_placements[i].vector_unpack()
        vector = [ sensor_distances[i], 0.0 ]
        vector = linalg.rotate_and_translate_vector( vector, sensor_theta, sensor_pos )
        obstacle_vectors[i] = vector   # store the obstacle vectors in the robot's reference frame
        
        # accumulate the heading vector within the robot's reference frame
        ao_heading_vector = linalg.add( ao_heading_vector,
                                     linalg.scale( vector, self.sensor_gains[i] ) )
                                     
      return ao_heading_vector, obstacle_vectors
    
    Sử dụng kết quả ao_heading_vectorlàm tài liệu tham khảo của chúng tôi để robot thử đối sánh, đây là kết quả của việc chạy phần mềm robot trong mô phỏng chỉ sử dụng bộ điều khiển tránh chướng ngại vật, hoàn toàn bỏ qua điểm mục tiêu. Robot bay xung quanh không mục đích, nhưng nó không bao giờ va chạm với chướng ngại vật và thậm chí còn xoay sở để điều hướng một số không gian rất chật hẹp:


    Robot này đang tránh chướng ngại vật thành công trong trình mô phỏng robot Python.

    Không có nhận xét nào

    Post Top Ad

    ad728

    Post Bottom Ad

    ad728