Commit 1885564b authored by Nicolas Peslerbe's avatar Nicolas Peslerbe

WORKING graph based

parent efd7ac0c
No preview for this file type
......@@ -25,6 +25,7 @@
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
......@@ -37,7 +38,9 @@
#define ROBOT_TO_MONITOR 0
#define TIME_STEP 64 // [ms] Length of time step
#define EPS 0.8
#define MIGR_SPEED 0.5
#define SPEED_CORR 0.05
// ********
#define NB_SENSORS 8 // Number of distance sensors
......@@ -55,8 +58,8 @@ static void reset(){
robot_name=(char*) wb_robot_get_name();
sscanf(robot_name,"epuck%d",&robot_id_u);
robot_id = robot_id_u%FLOCK_SIZE;
if((int)(robot_name[5]-'0') == ROBOT_TO_MONITOR)
utilities_changeDebugState(1);
//if((int)(robot_name[5]-'0') == ROBOT_TO_MONITOR)
// utilities_changeDebugState(1);
printf("Reset: robot %d\n",robot_id_u);
deadReckoning_init();
......@@ -65,55 +68,62 @@ static void reset(){
motors_init();
}
void transformSpeedReferential(double* speed, double theta){
double tmp_speed[2];
tmp_speed[0] = speed[0]*cos(theta) + speed[1]*sin(theta);
tmp_speed[1] = - speed[0]*sin(theta) + speed[1]*cos(theta);
speed[0] = tmp_speed[0];
speed[1] = tmp_speed[1];
}
void migratory(my_speed, my_position){
void migratory(float* my_speed, float* my_position){
// realign migration
if (my_position[1] > EPS) my_speed[1]-=SPEED_CORR;
if (my_position[1] < -EPS) my_speed[1]+=SPEED_CORR;
if (my_position[Y] > EPS) my_speed[Y] -= SPEED_CORR;
if (my_position[Y] < -EPS) my_speed[Y] += SPEED_CORR;
// add constant migration to the other side
my_position[0] = MIGR_SPEED;
my_speed[X] += MIGR_SPEED;
}
int main(){
reset(); // Resetting the robot
float my_speed[2] = {0,0};
float vel_migr[2] = {0.5,0};
float weights[2] = {1,-2};
float weights[2] = {1,-20};
float my_position[3] = {0,0,0};
int msr = 0;
int msl = 0;
(int msr, int msl, float my_position, float* vel_mig)
int applied_speed[2] = {0,0};
for(;;){
numberPrint++;
int obstacle = 0;
if(utilities_debug()) printf("___________________\n");
if(utilities_debug()) printf("Robot %d\n",robot_id);
Measurement* list = rangeAndBearing_getRelativeRobotPositions(robot_name);
infrared_updateList(list);
deadReckoning_updateSelfPosition(my_position, msr, msl);
list = infrared_updateList(list, &obstacle);
deadReckoning_updateSelfPosition(my_position, applied_speed);
float my_speed_tmp[2];
// compute new speed according to laplace method in initial referential
laplace_compute(list, my_speed, weights);
transformSpeedReferential(my_speed, -my_position[2]); //from Rt to R0
laplace_compute(list, my_speed, weights, my_position);
utilities_transformReferential(my_speed, my_speed_tmp, -my_position[2]); //from Rt to R0
// add migration urge and realignment in intial referential
migratory(my_speed, my_position);
if(utilities_debug()) printf("Before migr x = %f, y = %f\n", my_speed_tmp[X], my_speed_tmp[Y]);
if(!obstacle) migratory(my_speed_tmp, my_position);
// change speed in inital referential to current referential
transformSpeedReferential(my_speed, my_position[2]); //from R0 to Rt
utilities_transformReferential(my_speed_tmp, my_speed, my_position[2]); //from R0 to Rt
if(utilities_debug()) printf("After migr x = %f, y = %f\n", my_speed[X], my_speed[Y]);
// apply speed to motors
motors_applySpeed(my_speed, &msr, &msl);
motors_applySpeed(my_speed, applied_speed);
// Emptying data
Measurement* element = NULL;
while(list != NULL){
element = list->next;
free(list);
list = element;
}
wb_robot_step(TIME_STEP);
}
......
......@@ -17,16 +17,16 @@ void deadReckoning_init(){
}
void deadReckoning_updateSelfPosition(float my_position, int msr, int msl){
void deadReckoning_updateSelfPosition(float* my_position, int* applied_speed){
// Compute deltas of the robot
float dr = (float)msr * SPEED_UNIT_RADS * WHEEL_RADIUS * DELTA_T;
float dl = (float)msl * SPEED_UNIT_RADS * WHEEL_RADIUS * DELTA_T;
float dr = (float) applied_speed[RIGHT] * SPEED_UNIT_RADS * WHEEL_RADIUS * DELTA_T;
float dl = (float) applied_speed[LEFT] * SPEED_UNIT_RADS * WHEEL_RADIUS * DELTA_T;
float du = (dr + dl)/2.0;
float dtheta = (dr - dl)/AXLE_LENGTH;
// Compute deltas in the environment
float dx = -du * sinf(theta);
float dy = -du * cosf(theta);
float dx = du * cosf(dtheta);
float dy = du * sinf(dtheta);
// Update position ??? maybe add time step???
my_position[0] += dx;
......@@ -34,49 +34,9 @@ void deadReckoning_updateSelfPosition(float my_position, int msr, int msl){
my_position[2] += dtheta;
// Keep orientation within 0, 2pi
if (my_position[2] > 2*M_PI) my_position[2] -= 2.0*M_PI;
if (my_position[2] < 0) my_position[2] += 2.0*M_PI;
}
void deadReckoning_realign(int msr, int msl, float my_position, float* vel_mig){
// webots method : updates robot position with wheel speeds
// real world method
// update dead reckoning via motor steps since last call
// e_do_dr();
// retrieve new position
// e_get_dr_position(&x, &y, &theta);
// compute new velocity to realign according to the migratory urge
if (dy < -EPS) // too low
{
vel_mig[Y] = V0;
}
while (my_position[2] > 2*M_PI) my_position[2] -= 2.0*M_PI;
while (my_position[2] < 0) my_position[2] += 2.0*M_PI;
if (dy > EPS) // too high
{
vel_mig[Y] = -V0;
}
vel_mig[X] = V0;
if(utilities_debug()) printf("Dear reckoning: %f, %f, %f\n", x, y, theta );
if(utilities_debug()) printf("deadReck location: x = %f, y= %f, theta= %f\n", my_position[0], my_position[1], my_position[2]);
}
//void deadReckoning(float* vel_mig){
//
//
// // compute new velocity to realign according to the migratory urge
// vel_mig[X] = 0.5;
// vel_mig[Y] = 0;
//
//}
void deadReckoning_updateSteps(float* speed, double time){
}
\ No newline at end of file
......@@ -5,6 +5,6 @@
void deadReckoning_init();
void deadReckoning(float* vel_mig);
void deadReckoning_updateSteps(float* speed, double time);
void deadReckoning_updateSelfPosition(float* my_position, int* applied_speed);
#endif
\ No newline at end of file
......@@ -4,6 +4,6 @@
#include "measurements.h"
void infrared_init();
void infrared_updateList(Measurement* measurementList);
Measurement* infrared_updateList(Measurement* measurementList, int* obstacle);
#endif
\ No newline at end of file
......@@ -11,7 +11,7 @@
* Returns:
* --
*/
void laplace_compute(Measurement* objectsInSurround, float* newSpeed, float* velMigration, float* weights);
void laplace_compute(Measurement* objectsInSurround, float* newSpeed, float* weights, float* my_position);
#endif
#ifndef MEASUREMENTS
#define MEASUREMENTS
#define DISTANCE 0
#define THETA 1
#define X 0
#define Y 1
......@@ -9,7 +12,7 @@ typedef struct Measurement_t Measurement;
struct Measurement_t{
int robotID; // -1 if not a robot
float relativePosition[2];
int biasPosition[2]; // position in the graph of the robot
float biasPosition[2]; // position in the graph of the robot
Measurement* next;
};
......
......@@ -5,6 +5,6 @@
void motors_init();
void motors_applySpeed();
void motors_applySpeed(float* speed, int* appliedSpeed);
#endif
\ No newline at end of file
......@@ -4,6 +4,11 @@
extern int enabledDebug;
extern int numberPrint;
#define LEFT 0
#define RIGHT 1
void utilities_changeDebugState(int enableDebugTemp);
int utilities_debug();
void utilities_transformReferential(float* speed, float* new_speed, float theta);
#endif
\ No newline at end of file
......@@ -11,6 +11,7 @@
* Inclusions
*/
#include "inc/infrared.h"
#include "inc/utilities.h"
#include <webots/robot.h>
#include <webots/distance_sensor.h>
......@@ -19,6 +20,10 @@
#include <stdio.h>
#define NB_SENSORS 8
#define DISTANCE_THRESHOLD 150
#define EPS 0.78
float ps_orientations[8] = {-0.3,-0.8,-1.57,3.64,2.64,1.57,0.8,0.3}; //proximity sensors orientations
static WbDeviceTag ds[NB_SENSORS];
......@@ -35,10 +40,59 @@ void infrared_init(){
wb_distance_sensor_enable(ds[i],64);
}
void infrared_updateList(Measurement* measurementList){
int distances[NB_SENSORS];
Measurement* infrared_updateList(Measurement* measurementList, int* obstacle){
double intensity;
for(int i=0;i<NB_SENSORS;i++)
{
distances[i] = wb_distance_sensor_get_value(ds[i]);
intensity = wb_distance_sensor_get_value(ds[i]);
if (intensity > DISTANCE_THRESHOLD){
float distance = sqrt(1/intensity);
float theta = ps_orientations[i];
bool isRobot = false;
if(measurementList){ // BUG ifno element in list
Measurement* element = measurementList;
do{
// Check if element overlaps
/*if( element->robotID != -1 &&
element->relativePosition[DISTANCE] < 0.12 &&
( element->relativePosition[THETA] > theta - EPS ||
element->relativePosition[THETA] < theta + EPS ) ){
isRobot = true;
break;
}*/
element = element->next;
}while(element != NULL);
}
if(isRobot) continue;
*obstacle = 1;
Measurement* temp = malloc(sizeof(Measurement));
temp->next = measurementList;
temp->robotID = -1;
temp->biasPosition[X] = 0;
temp->biasPosition[Y] = 0;
temp->relativePosition[DISTANCE] = distance; // relative x pos
temp->relativePosition[THETA] = theta; // relative y pos
if(utilities_debug()) printf("Object detected: distance = %f, theta = %f\n", temp->relativePosition[DISTANCE], temp->relativePosition[THETA]);
measurementList = temp;
}
}
return measurementList;
}
\ No newline at end of file
......@@ -71,13 +71,6 @@ void printMatrix(char* name, float* matrix, int m, int n);
*/
void transformBiases(my_id, int* b){
b[0] = bias[id];
for (int i=1;i<my_id;i++){
b[i+1] = bias[i];
}
}
void transpose(float* input, float* output, int m, int n)
{
for(int i=0; i<m; i++)
......@@ -112,7 +105,7 @@ void printMatrix(char* name, float* matrix, int m, int n){
}
}
void laplace_compute(Measurement* objectsInSurround, float* newSpeed, float* velMigration, float* weights){
void laplace_compute(Measurement* objectsInSurround, float* newSpeed, float* weights, float* my_position){
// Compute neighborhood by range and bearing (contains neighbors robots and obstacles)
// X contains relative positions of each neighbors (size = (num_neighbors * 2)
......@@ -131,7 +124,7 @@ void laplace_compute(Measurement* objectsInSurround, float* newSpeed, float* vel
float incidenceMatrix[(numberOfObjects+1) * numberOfObjects];
for(int i = 0; i < (numberOfObjects+1) * numberOfObjects; i++)
incidenceMatrix[i] = 0.;
incidenceMatrix[i] = 0.;
float weightsMatrix[numberOfObjects*numberOfObjects];
for(int i = 0; i < numberOfObjects * numberOfObjects; i++)
......@@ -140,8 +133,8 @@ void laplace_compute(Measurement* objectsInSurround, float* newSpeed, float* vel
// Compute incidence matrix of size (num_neighbors+1 x num_neighbors)
for (int j=0; j<numberOfObjects; j++)
{
incidenceMatrix[j] = -1;
incidenceMatrix[(j+1)*numberOfObjects+j] = 1;
incidenceMatrix[j] = 1;
incidenceMatrix[(j+1)*numberOfObjects+j] = -1;
}
printMatrix("incidenceMatrix", incidenceMatrix, numberOfObjects+1, numberOfObjects);
......@@ -185,54 +178,35 @@ void laplace_compute(Measurement* objectsInSurround, float* newSpeed, float* vel
// Compute velocity of current robot with v = -L(x-B)
{
Measurement* nextObject = objectsInSurround;
int i = 0;
int i = 1;
while(nextObject){
float distance = nextObject->relativePosition[DISTANCE];
float theta = nextObject->relativePosition[THETA];
float bias_trans[2];
nextObject->biasPosition[X] /= 10;
nextObject->biasPosition[Y] /= 10;
utilities_transformReferential(nextObject->biasPosition, bias_trans, my_position[2]);
// if it does not work like that, maybe try to rotate the bias position to get right referential (orientation)
vel_graph[X] += -L[i] * (nextObject->relativePosition[X] - nextObject->biasPosition[X]);
vel_graph[Y] += -L[i] * (nextObject->relativePosition[Y] - nextObject->biasPosition[Y]);
if(utilities_debug()) printf("id = %d, x = %f, y = %f\n",nextObject->robotID,nextObject->biasPosition[0], nextObject->biasPosition[1]);
if(utilities_debug()) printf("bias x = %f, y = %f\n", bias_trans[X], bias_trans[Y]);
if(utilities_debug()) printf("sub x = %f, y = %f\n", distance*cosf(theta), distance*sinf(theta));
if(utilities_debug()) printf("L = %f\n", L[i]);
vel_graph[X] += -L[i] * ( distance*cosf(theta) - bias_trans[X]);
vel_graph[Y] += -L[i] * ( distance*sinf(theta) - bias_trans[Y]);
nextObject = nextObject->next;
i++;
}
}
if(utilities_debug()) printf("Vel graph x = %f, y = %f\n", vel_graph[X], vel_graph[Y]);
if(utilities_debug()) printf("Vel migration x = %f, y = %f\n", velMigration[X], velMigration[Y]);
newSpeed[X] = vel_graph[X];
newSpeed[Y] = vel_graph[Y];
if(utilities_debug()) printf("Speed x = %f, y = %f\n", newSpeed[X], newSpeed[Y]);
if(utilities_debug()) printf("Speed laplacian x = %f, y = %f\n", newSpeed[X], newSpeed[Y]);
}
/***********************
* Test mathods - Usable using IS_TEST constant
*/
#ifdef IS_TEST
int main(){
float velTot[2];
Measurement* robotsMeasurements = malloc(sizeof(Measurement));
robotsMeasurements[0] = malloc(sizeof(Measurement));
robotsMeasurements[0].robotID = 1;
robotsMeasurements[0].relativePosition[X] = 0.;
robotsMeasurements[0].relativePosition[Y] = 0.;
robotsMeasurements[1].robotID = 2;
robotsMeasurements[1].relativePosition[X] = 0.;
robotsMeasurements[1].relativePosition[Y] = 1.;
robotsMeasurements[2].robotID = 3;
robotsMeasurements[2].relativePosition[X] = 1.;
robotsMeasurements[2].relativePosition[Y] = 1.;
robotsMeasurements[3].robotID = -1;
robotsMeasurements[3].relativePosition[X] = 1.;
robotsMeasurements[3].relativePosition[Y] = 0.;
robotsMeasurements[4].robotID = -1;
robotsMeasurements[4].relativePosition[X] = 1.;
robotsMeasurements[4].relativePosition[Y] = 2.;
laplacian(robotsMeasurements, 5, velTot);
printf("Output: %f %f\n", velTot[X], velTot[Y]);
return 0;
}
#endif
......@@ -17,11 +17,12 @@
#include <stdio.h>
#include <math.h>
#define KU 0.2
#define KU 1
#define KW 1
#define AXLE_LENGTH 0.052
#define WHEEL_RADIUS 0.0205
#define MAX_SPEED 1000
//#define MAX_SPEED 1000
#define MAX_SPEED 628
static WbDeviceTag left_motor;
static WbDeviceTag right_motor;
......@@ -36,34 +37,41 @@ void motors_limit(int *number, int limit) {
void motors_init(){
left_motor = wb_robot_get_device("left wheel motor");
right_motor = wb_robot_get_device("right wheel motor");
wb_motor_set_position(left_motor, 0);
wb_motor_set_position(right_motor, 0);
wb_motor_set_position(left_motor, INFINITY);
wb_motor_set_position(right_motor, INFINITY);
wb_motor_set_velocity(left_motor, 0);
wb_motor_set_velocity(right_motor, 0);
}
void motors_transformSpeed(float* speed, int *msr, int *msl){
float linearSpeed = KU * sqrt(pow(speed[X],2)+pow(speed[Y],2)) * cos(atan2(speed[Y],speed[X]));
void motors_transformSpeed(float* speed, int *speed_for_motors){
float linearSpeed = KU * sqrt(pow(speed[X],2)+pow(speed[Y],2)) * cosf(atan2(speed[Y],speed[X]));
float rotationalSpeed = KW * atan2(speed[Y],speed[X]);
*msl = (linearSpeed - AXLE_LENGTH * rotationalSpeed/2.0) * (50 / WHEEL_RADIUS);
*msr = (linearSpeed + AXLE_LENGTH * rotationalSpeed/2.0) * (50 / WHEEL_RADIUS);
if(utilities_debug()) printf("linearSpeed = %f and rotationalSpeed = %f\n", linearSpeed, rotationalSpeed);
speed_for_motors[RIGHT] = (linearSpeed + AXLE_LENGTH * rotationalSpeed)/2.0 * (10 / WHEEL_RADIUS);
speed_for_motors[LEFT] = (linearSpeed - AXLE_LENGTH * rotationalSpeed)/2.0 * (10 / WHEEL_RADIUS);
if(utilities_debug()) printf("After apply trans (motor cmd) left = %d, right = %d\n", speed_for_motors[LEFT], speed_for_motors[RIGHT]);
//For epuck
motors_limit(&(speed_for_motors[LEFT]),MAX_SPEED);
motors_limit(&(speed_for_motors[RIGHT]),MAX_SPEED);
if(utilities_debug()) printf("After limiting apply trans (motor cmd) left = %d, right = %d\n", speed_for_motors[LEFT], speed_for_motors[RIGHT]);
motors_limit(msl,MAX_SPEED);
motors_limit(msr,MAX_SPEED);
if(utilities_debug()) printf("Motor speed left = %d, right = %d\n", *msl, *msr);
}
int last_msl = 0;
int last_msr = 0;
double start_time = 0;
void motors_applySpeed(float* speed, int* msr, int* msl){
motors_transformSpeed(speed, msr, msl);
void motors_applySpeed(float* speed, int* appliedSpeed){
motors_transformSpeed(speed, appliedSpeed);
last_msl = *msl;
last_msr = *msr;
start_time = wb_robot_get_time();
if(utilities_debug()) printf("Motor speed left = %d, right = %d\n", appliedSpeed[LEFT], appliedSpeed[RIGHT]);
wb_motor_set_position(left_motor, *msl);
wb_motor_set_position(right_motor, *msr);
wb_motor_set_velocity(left_motor, (double) appliedSpeed[LEFT]/100);
wb_motor_set_velocity(right_motor, (double) appliedSpeed[RIGHT]/100);
}
\ No newline at end of file
......@@ -26,10 +26,10 @@
#include <math.h>
#define MAX_BOUNDARY 0.3
#define FIRST_GROUP_SIZE 10
#define FIRST_GROUP_SIZE 5
// define bias matrix with at most 9 robots
int bias[10][2] = {{4,0},{3,1},{3,-1},{2,0},{2,-2}
float bias[10][2] = {{4,0},{3,1},{3,-1},{2,0},{2,-2},
{2,2},{1,1},{1,-1},{0,0}};
/***********************
......@@ -72,8 +72,6 @@ void rangeAndBearing_init(){
}
bias =
static void send_ping(char* robot_name)
{
char out[10];
......@@ -105,13 +103,14 @@ static Measurement* process_received_ping_messages(char* robot_name)
double y = message_direction[2];
double x = message_direction[1];
theta = -atan2(y,x);
theta = -atan2(y,x) - 1.5707;
range = sqrt((1/message_rssi));
double x_rel = range*cos(theta);
double y_rel = -1.0 * range*sin(theta);
int receivedId = (int)(inbuffer[5]-'0');
if( (myId < FIRST_GROUP_SIZE && receivedId < FIRST_GROUP_SIZE) ||
(myId >= FIRST_GROUP_SIZE && receivedId >= FIRST_GROUP_SIZE)){
if(sqrt(x_rel*x_rel + y_rel*y_rel) < MAX_BOUNDARY){
if(listStart == NULL){
element = malloc(sizeof(Measurement));
listStart = element;
......@@ -119,26 +118,21 @@ static Measurement* process_received_ping_messages(char* robot_name)
element->next = malloc(sizeof(Measurement));
element = element->next;
}
int receivedId = (int)(inbuffer[5]-'0');
if((myId < 5 && receivedId < 5) || (myId >= 5 && receivedId >= 5) ){
element->robotID = receivedId;
element->biasPosition[X] = bias[myId%FIRST_GROUP_SIZE][0];
element->biasPosition[Y] = bias[myId%FIRST_GROUP_SIZE][1];
if(utilities_debug()) printf("%d: ",receivedId);
}
else{
element->robotID = -1;
element->biasPosition[X] = 0;
element->biasPosition[Y] = 0;
if(utilities_debug()) printf("%d (ennemy): ",receivedId);
}
element->relativePosition[X] = x_rel; // relative x pos
element->relativePosition[Y] = y_rel; // relative y pos
element->robotID = receivedId%FIRST_GROUP_SIZE;
element->biasPosition[X] = bias[receivedId%FIRST_GROUP_SIZE][0] - bias[myId%FIRST_GROUP_SIZE][0];
element->biasPosition[Y] = bias[receivedId%FIRST_GROUP_SIZE][1] - bias[myId%FIRST_GROUP_SIZE][1];
element->relativePosition[THETA] = theta; // relative x pos
element->relativePosition[DISTANCE] = range; // relative y pos
if(utilities_debug()) printf("%d: ",receivedId);
element->next = NULL;
if(utilities_debug()) printf("%f, %f\n", element->relativePosition[X], element->relativePosition[Y] );
if(utilities_debug()) printf("r&b %d: distance: %f, theta:%f\n", receivedId, element->relativePosition[DISTANCE], element->relativePosition[THETA] );
if(utilities_debug()) printf("bias: x: %f, y:%f\n", element->biasPosition[X], element->biasPosition[Y]);
}
wb_receiver_next_packet(receiver);
}
......
#include "inc/utilities.h"
#include "inc/measurements.h"
#include <math.h>
int enabledDebug = 0;
int numberPrint = 0;
......@@ -9,5 +13,11 @@ void utilities_changeDebugState(int enabledDebugTemp){
}
int utilities_debug(){
return ((numberPrint%50 == 45) && enabledDebug);
return ((numberPrint%10 == 0) && enabledDebug);
}
void utilities_transformReferential(float* speed, float* new_speed, float theta){
new_speed[X] = speed[X]*cosf(theta) + speed[Y]*sinf(theta);
new_speed[Y] = - speed[X]*sinf(theta) + speed[Y]*cosf(theta);
}
\ No newline at end of file
Webots Project File version R2019b
perspectives: 000000ff00000000fd00000003000000000000000000000000fc0100000001fb0000001a0044006f00630075006d0065006e0074006100740069006f006e0000000000ffffffff0000008700ffffff0000000100000236000002e8fc0200000001fb0000001400540065007800740045006400690074006f00720100000000000002e80000008b00ffffff0000000300000780000001abfc0100000001fb0000000e0043006f006e0073006f006c00650100000000000007800000008700ffffff00000548000002e800000001000000020000000100000008fc00000000
perspectives: 000000ff00000000fd00000003000000000000000000000000fc0100000001fb0000001a0044006f00630075006d0065006e0074006100740069006f006e0000000000ffffffff0000008700ffffff0000000100000236000001d5fc0200000001fb0000001400540065007800740045006400690074006f00720100000000000001d50000008b00ffffff000000030000078000000259fc0100000001fb0000000e0043006f006e0073006f006c00650100000000000007800000008700ffffff00000548000001d500000001000000020000000100000008fc00000000
simulationViewPerspectives: 000000ff00000001000000020000016b000007750100000002010000000101
sceneTreePerspectives: 000000ff0000000100000002000000c0000000fa0100000002010000000201
maximizedDockId: -1
......@@ -10,13 +10,13 @@ selectionDisabled: 0
viewpointLocked: 0
orthographicViewHeight: 1
textFiles: 0 "controllers/ctrl1/ctrl1.c"
renderingDevicePerspectives: epuck0:camera;1;1;0;0
renderingDevicePerspectives: epuck5:camera;1;1;0;0
renderingDevicePerspectives: epuck9:camera;1;1;0;0
renderingDevicePerspectives: epuck8:camera;1;1;0;0
renderingDevicePerspectives: epuck6:camera;1;1;0;0
renderingDevicePerspectives: epuck0:camera;1;1;0;0
renderingDevicePerspectives: epuck4:camera;1;1;0;0
renderingDevicePerspectives: epuck2:camera;1;1;0;0
renderingDevicePerspectives: epuck1:camera;1;1;0;0
renderingDevicePerspectives: epuck5:camera;1;1;0;0
renderingDevicePerspectives: epuck3:camera;1;1;0;0
renderingDevicePerspectives: epuck8:camera;1;1;0;0
renderingDevicePerspectives: epuck4:camera;1;1;0;0
renderingDevicePerspectives: epuck7:camera;1;1;0;0
renderingDevicePerspectives: epuck2:camera;1;1;0;0
......@@ -7,9 +7,9 @@ centralWidgetVisible: 1
selectionDisabled: 0
viewpointLocked: 0
orthographicViewHeight: 1
textFiles: 1 "controllers/ctrl1/ctrl1.c" "../../../../../Applications/Webots.app/projects/default/controllers/braitenberg/braitenberg.c"
textFiles: 2 "controllers/ctrl1/ctrl1.c" "../../../../../Applications/Webots.app/projects/default/controllers/braitenberg/braitenberg.c" "controllers/ctrl1/inc/utilities.h"
renderingDevicePerspectives: epuck0:camera;1;1;0;0
renderingDevicePerspectives: epuck1:camera;1;1;0;0
renderingDevicePerspectives: epuck3:camera;1;1;0;0
renderingDevicePerspectives: epuck4:camera;1;1;0;0
renderingDevicePerspectives: epuck2:camera;1;1;0;0
renderingDevicePerspectives: epuck1:camera;1;1;0;0
renderingDevicePerspectives: epuck3:camera;1;1;0;0
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment