Nonlinear Dynamics and Control Lab: Blue Origin RPO

Pulsed Plasma Thruster Stand

Summary:

Testbed & Robot Operating System (ROS)

Camera moving Code:

            
    import bpy
    import os
    import csv
    import mathutils
    import math
    
    # Directory for output files
    output_dir = 'C:\'
    input_file = 'C:\'
    
    def convert_to_gif():
        os.system(f"ffmpeg -f image2 -i {output_dir}\\render%d.png video.avi")
        os.system(f"ffmpeg -i video.avi -pix_fmt rgb8 {output_dir}\\out.gif")
    
    def camera_step():
        global step, steps, point, pos_data, start_point, end_point, start_rot, end_rot, image_num
        
        # Set camera rotation and translation
        scene.camera.rotation_quaternion = start_rot.slerp(end_rot, step / steps)
        scene.camera.location = start_point.lerp(end_point, step / steps)
        
        # Render the current frame
        bpy.context.scene.render.filepath = os.path.join(output_dir, f'render{image_num}.png')
        bpy.ops.render.render(write_still=True)
        
        # Update step and image number
        step += 1
        image_num += 1
        
        if step == steps:
            if point < len(pos_data) - 2:  # Move to the next point
                step = 0
                point += 1
                update_points_and_rotations()
            else:  # Finished last segment
                convert_to_gif()
                return None
    
        return 0.00
    
    def update_points_and_rotations():
        global start_point, end_point, start_rot, end_rot
        
        start = pos_data[point]
        end = pos_data[point + 1]
        
        bpy.data.objects['Start Point'].location = mathutils.Vector(start[:3])
        bpy.data.objects['End Point'].location = mathutils.Vector(end[:3])
        
        start_rot = mathutils.Euler(map(math.radians, start[3:]), 'XYZ').to_quaternion()
        end_rot = mathutils.Euler(map(math.radians, end[3:]), 'XYZ').to_quaternion()
        
        bpy.data.objects['Start Point'].rotation_quaternion = start_rot
        bpy.data.objects['End Point'].rotation_quaternion = end_rot
        
        start_point = bpy.data.objects['Start Point'].location
        end_point = bpy.data.objects['End Point'].location
    
    # Load positions from CSV file
    pos_data = []
    with open(input_file, newline='', encoding='utf-8-sig') as csvfile:
        reader = csv.reader(csvfile)
        pos_data = [list(map(float, row)) for row in reader]
    
    # Initialize scene and camera settings
    scene = bpy.context.scene
    scene.render.resolution_x = 512
    scene.render.resolution_y = 512
    scene.camera.data.angle = math.radians(75.0)
    scene.camera.rotation_mode = 'QUATERNION'
    
    # Set initial points and rotations
    point = 0
    update_points_and_rotations()
    
    # Initialize step counters
    steps = 1
    step = 0
    image_num = 0
    
    # Register the camera step function to run on a timer
    bpy.app.timers.register(camera_step)
                    
                

Spacecraft Docking Applications

In response to the rapid growth of the spaceflight industry, the Nonlinear Dynamics and Control Laboratory, in collaboration with Blue Origin, is developing an advanced control system.

This system integrates fiducial markers to enhance spacecraft docking by improving:
  • - Localization, guidance, and navigation for autonomous docking
  • - Efficiency in personnel transport, supply exchange, and refueling operations
  • - Effectiveness in repair, maintenance, and debris removal tasks

This initiative aims to optimize spacecraft maneuvers, ensuring safer and more reliable mission profiles across various applications within the space industry.

Space Team 2
Making docking of the future safer and more precise. Photo: Blue Origin.

Future Work

  • Next Steps for Robot Programming

    • - Development of the Gazebo model.
    • - Development of the inverse kinematics model (MoveIt).
    • - Implementation of a feedback loop into robotic controls.
  • Improving AprilTag Characterization

    To fully understand AprilTags' capabilities, we need to:
    • Conduct an expanded preliminary study to determine the optimal tag size relative to distance for better performance in various missions.
    • Consider the curvature of modern spacecraft fleets in our accuracy assessments.
    • Gather ample data within these parameters to enhance our understanding.
    • Establish guidelines for placing AprilTags on spacecraft to ensure precise motion tracking from every angle.

Past Work: Fiducial Markers

AprilTag is a type of fiducial marker, a specific collection of 2D barcodes. When placed on a known object, observation of the markers can be used to calculate relative distance and orientation of the object.

AprilTag accuracies were tested with several variables to predict spacecraft applicability: