def Record(r):

    model_data.delete() #clear the graph
    actual_data.delete()

    global time_at_max_stretch #these variables will be used to pass the info to the Model function
    global index_at_max_stretch
    global actual_list
    global max_stretch
    global dt
     
    spring_stretch_actual = 0 
    max_stretch = 0
    i=0
    t = 0.0
    dt = 0.05 #note gdx.start below where it sets the sampling period to 100ms (or 0.1 seconds)
 
    time_at_max_stretch = 0
    index_at_max_stretch = 0
    actual_list = []

    #gdx.start(period=50) #start data collection
    gdx.start(period = (dt*1000))
    
    while t < tmax + dt: #use the loop to read the data
    
        measurements = gdx.read() #returns a list of measurements from the sensors selected.
        if measurements == None: 
            break 
        print('distance (cm) = ', measurements[0]*100)
        spring_stretch_actual = measurements[0]*100 - starting_spring_position
        spring_actual.axis.y =  -spring_equilibrium_length + spring_stretch_actual
        mass_actual.pos.y = spring_actual.pos.y-spring_equilibrium_length + spring_stretch_actual
        actual_data.plot(t,spring_stretch_actual)
        actual_list.append(spring_stretch_actual) #create a list of all the measurements. Store in a variable to send to the Model function
    
        if spring_stretch_actual>max_stretch: #Capture the biggest stretch. Store in variables to send to the Model function
            max_stretch=spring_stretch_actual
            time_at_max_stretch = t
            index_at_max_stretch = i
    
        t = t + dt
        i = i + 1
    gdx.stop()  
Beispiel #2
0
    def __init__(self):
        #############################################################
        # Global Variables
        #############################################################
        #example: self.dx_1_read_position_data = 0
        self.sensor_status = 0
        #############################################################
        # Publisher Parts
        #############################################################
        self.pub_respiration_belt_data = rospy.Publisher(
            "respiration_belt/data", Float32MultiArray, queue_size=10)
        #############################################################
        # Subscriber Parts
        #############################################################
        # Set up your subscriber and define its callback
        self.sub_h10_request_state = rospy.Subscriber(
            "/respiration_belt/status", Bool,
            self.sub_respiration_belt_state_callback)

        #############################################################
        # ROS main loop
        #############################################################
        r = rospy.Rate(sensor_sampling_rate)  # 10hz
        while not rospy.is_shutdown():
            if self.sensor_status == True:
                gdx.start(sensor_sampling_rate)
                arr_resp_belt_data = gdx.read()
                self.pub_respiration_belt_data.publish(
                    Float32MultiArray(data=arr_resp_belt_data))
            else:
                gdx.stop()
                pass

            r.sleep()
        gdx.close()

        rospy.spin()  # Spin until ctrl + c
import csv
import os

#gdx.open_usb()
gdx.open_ble(
)  # Comment this out if you decide to use the gdx.open_usb() function instead.

gdx.select_sensors()

with open('csvexample.csv', 'w', newline='') as my_data_file:
    # The commented-out code below would be used if you want to hard-code in an absolute file path for the location of the csv file...
    #with open('C:/full/path/to/your/documents/folder/csvexample2.csv', 'w', newline='') as my_data_file:
    csv_writer = csv.writer(my_data_file)

    gdx.start(period=200)
    column_headers = gdx.enabled_sensor_info()
    csv_writer.writerow(column_headers)

    for i in range(0, 40):
        measurements = gdx.read()
        if measurements == None:
            break
        csv_writer.writerow(measurements)
        print(measurements)

gdx.stop()
gdx.close()

# If you did not hard-code in an absolute path, this is where the file should be found.
print("location of current working directory = ", os.getcwd())
Beispiel #4
0
def simulation(q):

    import time
    from gdx import gdx  #The gdx function calls are from a gdx.py file inside the gdx folder, which must be with this program.

    gdx = gdx.gdx()

    time_between_readings_in_seconds = 0.2
    number_of_readings = 500
    digits_of_precision = 2

    gdx.open_usb()
    gdx.select_sensors(
        [1]
    )  # You will be asked to select the sensors to be used. You can select up to three.

    sensor_times = []
    sensor_readings = []
    period_in_ms = time_between_readings_in_seconds * 1000

    gdx.start(period_in_ms)

    # Data Collection:

    collection_complete = False
    while not collection_complete:
        try:
            time = 0
            print('Starting...')

            for i in range(0, number_of_readings):

                # This is where we are reading the list of measurements from the sensors.
                measurements = gdx.read()
                if measurements == None:
                    break

                q.put([time, measurements[0]])

                # Update the time variable with the new time for the next data point
                time = time + time_between_readings_in_seconds

            # The data collection loop is finished
            collection_complete = True
            print('Data collection complete.')

            #stop sensor readings and disconnect device
            gdx.stop()
            gdx.close()

            q.put('Q')
            exit()

        except KeyboardInterrupt:
            collection_complete = True
            gdx.stop()  #Stop sensor readings
            gdx.close()  #Disconnect the device
            print('data  collection stopped by keypress')
            print('Number of readings: ', i + 1)
            q.put('Q')
            exit()
                # Call the plot_graph() function to update the graph with the new data set.
                plot_graph()

            # Update the time variable with the new time for the next data point
            time = time + time_between_readings_in_seconds

        # The data collection loop is finished
        collection_complete = True
        print('data  collection complete')
        print('Number of readings: ', i + 1)
        print('Time between readings: ', time_between_readings_in_seconds,
              " s")
        print('Total time for data collection ', time, ' s')

        # Stop sensor readings and disconnect the device.
        gdx.stop()
        gdx.close()

        # For fast collection we did not print to the graph during data collection. Now that all data
        # have been collected, send the data to the print_table() and plot_graph() function.
        if time_between_readings_in_seconds <= 0.4:
            print_table()
            plt.title(column_headers[0] + ' vs ' +
                      'Time (s)')  #put a title on the top of graph
            plot_graph()

    except KeyboardInterrupt:
        collection_complete = True
        gdx.stop()  #Stop sensor readings
        gdx.close()  #Disconnect the device
        print('data  collection stopped by keypress')