Esempio n. 1
0
//----------------------------------------------------------------------------
//    Summary: Constructor for dmEnvironment class loads in all sorts of stuff
// Parameters: cfg_ptr - ifstream containing the necessary parameters to
//                initialize this class
//    Returns: none
//----------------------------------------------------------------------------
void setEnvironmentParameters(dmEnvironment *env, ifstream &cfg_ptr)
{
   char flname[FILENAME_SIZE];            // filename w/ gridded terrain data

   CartesianVector gravity;
   readConfigParameterLabel(cfg_ptr, "Gravity_Vector");
   cfg_ptr >> gravity[0] >> gravity[1] >> gravity[2];
   env->setGravity(gravity);

   // get terrain model.
   readConfigParameterLabel(cfg_ptr, "Terrain_Data_Filename");
   readFilename(cfg_ptr, flname);
#ifdef DEBUG
   cout << "Terrain data file: " << flname << endl << flush;
#endif
   env->loadTerrainData(flname);

   // get ground characteristics.
   Float constant;
   readConfigParameterLabel(cfg_ptr, "Ground_Planar_Spring_Constant");
   cfg_ptr >> constant;
   env->setGroundPlanarSpringConstant(constant);

   readConfigParameterLabel(cfg_ptr, "Ground_Normal_Spring_Constant");
   cfg_ptr >> constant;
   env->setGroundNormalSpringConstant(constant);

   readConfigParameterLabel(cfg_ptr, "Ground_Planar_Damper_Constant");
   cfg_ptr >> constant;
   env->setGroundPlanarDamperConstant(constant);

   readConfigParameterLabel(cfg_ptr, "Ground_Normal_Damper_Constant");
   cfg_ptr >> constant;
   env->setGroundNormalDamperConstant(constant);

   float u_s, u_k;
   readConfigParameterLabel(cfg_ptr, "Ground_Static_Friction_Coeff");
   cfg_ptr >> u_s;
   readConfigParameterLabel(cfg_ptr, "Ground_Kinetic_Friction_Coeff");
   cfg_ptr >> u_k;

   if (u_k > u_s)
   {
      cerr << "dmEnvironment warning: u_k > u_s friction coefficient.\n";
   }
   env->setFrictionCoeffs(u_s, u_k);

#ifdef DM_HYDRODYNAMICS
   setEnvironmentParameters((dmEnvironment*)env, cfg_ptr);

   Float fluid_density;
   readConfigParameterLabel(cfg_ptr, "Fluid_Density");
   cfg_ptr >> fluid_density;

   env->setFluidDensity(fluid_density);
#endif
}
Esempio n. 2
0
//----------------------------------------------------------------------------
//    Summary:
// Parameters:
//    Returns:
//----------------------------------------------------------------------------
int main(int argc, char** argv)
{
   int i, j;

   glutInit(&argc, argv);

   //=========================
   char *filename = "simulation.cfg";
   if (argc > 1)
   {
      filename = argv[1];
   }

   glutInitWindowSize(640,480);
   glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
   glutCreateWindow("DynaMechs Example");

   myinit();
   mouse = dmGLMouse::dmInitGLMouse();

   for (i=0; i<4; i++)
   {
      for (j=0; j<4; j++)
      {
         view_mat[i][j] = 0.0;
      }
      view_mat[i][i] = 1.0;
   }
   //view_mat[3][2] = -10.0;
   camera = new dmGLPolarCamera_zup();
   camera->setRadius(8.0);
   camera->setCOI(8.0, 10.0, 2.0);
   camera->setTranslationScale(0.02f);

   // load robot stuff
   ifstream cfg_ptr;
   cfg_ptr.open(filename);

   // Read simulation timing information.
   readConfigParameterLabel(cfg_ptr,"Integration_Stepsize");
   cfg_ptr >> idt;
   if (idt <= 0.0)
   {
      cerr << "main error: invalid integration stepsize: " << idt << endl;
      exit(3);
   }
   motion_plan_rate  = (int) (0.5 + 0.01/idt);  // fixed rate of 100Hz

   readConfigParameterLabel(cfg_ptr,"Display_Update_Rate");
   cfg_ptr >> render_rate;
   if (render_rate < 1) render_rate = 1;

// ===========================================================================
// Initialize DynaMechs environment - must occur before any linkage systems
   char env_flname[FILENAME_SIZE];
   readConfigParameterLabel(cfg_ptr,"Environment_Parameter_File");
   readFilename(cfg_ptr, env_flname);
   dmEnvironment *environment = dmuLoadFile_env(env_flname);
   environment->drawInit();
   dmEnvironment::setEnvironment(environment);

// ===========================================================================
// Initialize a DynaMechs linkage system
   char robot_flname[FILENAME_SIZE];
   readConfigParameterLabel(cfg_ptr,"Robot_Parameter_File");
   readFilename(cfg_ptr, robot_flname);
   G_robot = dynamic_cast<dmArticulation*>(dmuLoadFile_dm(robot_flname));

   G_integrator = new dmIntegRK4();
   G_integrator->addSystem(G_robot);

   initAquaControl(G_robot);

   glutReshapeFunc(myReshape);
   glutKeyboardFunc(processKeyboard);
   glutSpecialFunc(processSpecialKeys);
   glutDisplayFunc(display);
   glutIdleFunc(updateSim);

   dmGetSysTime(&last_tv);

   cout << endl;
   cout << "               p - toggles dynamic simulation" << endl;
   cout << "   UP/DOWN ARROW - increases/decreases velocity command" << endl;
   cout << "RIGHT/LEFT ARROW - changes heading command" << endl << endl;

   glutMainLoop();
   return 0;             /* ANSI C requires main to return int. */
}
Esempio n. 3
0
//Считаем энтропию текста, формируем кодовые слова для символом алфавита файла
void FreqOne()
{
	UINT8 ch = 0;
	UINT8 K = 0;
	lengthText = 0;
	H = 0;
	Lmean = 0;
	readFilename();



	ArrayInit(ArrAlfa);

	while (!feof(fi))
	{

		fscanf_s(fi, "%c", &ch);
		if (feof(fi))
		{
			break;
		}
		if (strchr(rusUp, ch))
		{
			ch = ch - 0xC0 + 0xE0;
			ArrAlfa[ch].p += 1.0;
			lengthText++;
		}
		else
		if (strchr(rusDown, ch))
		{
			ArrAlfa[ch].p += 1.0;
			lengthText++;
		}
		else
		if (strchr(engUp, ch))
		{
			ch = ch - 'A' + 'a';
			ArrAlfa[ch].p += 1.0;
			lengthText++;
		}
		else
		if (strchr(engDown, ch))
		{
			ArrAlfa[ch].p += 1.0;
			lengthText++;
		}
		else
		if (strchr("-.,:!?;", ch))
		{
			ch = '.';
			ArrAlfa[ch].p += 1.0;
			lengthText++;
		}
		else
		if (ch == ' ')
		{
			ArrAlfa[ch].p += 1.0;
			lengthText++;
		}
		else
		if (ch == 0xA8 || ch == 0xB8)
		{
			ch = 0xE5;
			ArrAlfa[ch].p += 1.0;
			lengthText++;
		}

	}
	fclose(fi);

	printf_s("The file was closed\n");
	for (int i = 0; i < n_Alfa; i++)
	{

		if (ArrAlfa[i].p != (float)0)
		{
			ArrAlfa[i].p = ArrAlfa[i].p / lengthText;
			printf_s("P[%c] = %1.4f\n", i, ArrAlfa[i].p);
			H = H + ArrAlfa[i].p * log2(ArrAlfa[i].p);
			K++;
		}
	}
	Hmax = log2((float)K);
	if (Hmax == 0)Hmax = 1;
	printf_s("Всего символов в файле: %d\n", lengthText);
	printf("Всего символов в алфавите: %d\n", K);
	printf("Энтропия файла: %3.3f\n", (-1)*H);
	printf("Максимальная Энтропия файла: %3.3f\n", Hmax);
	printf("Избыточность текста составила: %3.3f\n", (float)1 + H / Hmax);

	Gilbert_Mur();

	system("pause");
	for (int i = 0; i < n_Alfa; i++)
	{

		if (ArrAlfa[i].p != (float)0)
		{
			printf_s("P[%c] = %1.4f kod = ", i, ArrAlfa[i].p);
			for (int j = 0; j<ArrAlfa[i].length; j++) printf("%c", ArrAlfa[i].code[j]);
			printf_s("\n");
		}
	}
	printf("Средняя длина кодового слова: %3.3f\n", Lmean);
	printf("Избыточность кодирования составила: %3.3f\n", Lmean - (-1.0)*H);
	system("pause");
}
Esempio n. 4
0
void WriteCodeFile()
{
	int numclosed;
	errno_t err;
	UINT8 ch = 0;
	readFilename();

	err = fopen_s(&fcode, "code.txt", "wb");
	if (err == 0)
	{
		printf_s("The file CODE.txt was opened\n");
	}
	else
	{
		printf_s("The file CODE.txt was not opened\n");
		numclosed = _fcloseall();
	}
	while (!feof(fi))
	{

		fscanf_s(fi, "%c", &ch);
		if (feof(fi))
		{
			break;
		}
		if (strchr(rusUp, ch))
		{
			ch = ch - 0xC0 + 0xE0;
			fwrite(ArrAlfa[ch].code, ArrAlfa[ch].length, 1, fcode);

		}
		else
		if (strchr(rusDown, ch))
		{
			fwrite(ArrAlfa[ch].code, ArrAlfa[ch].length, 1, fcode);
		}
		else
		if (strchr(engUp, ch))
		{
			ch = ch - 'A' + 'a';
			fwrite(ArrAlfa[ch].code, ArrAlfa[ch].length, 1, fcode);
		}
		else
		if (strchr(engDown, ch))
		{
			fwrite(ArrAlfa[ch].code, ArrAlfa[ch].length, 1, fcode);
		}
		else
		if (strchr("-.,:!?;", ch))
		{
			ch = '.';
			fwrite(ArrAlfa[ch].code, ArrAlfa[ch].length, 1, fcode);
		}
		else
		if (ch == ' ')
		{
			fwrite(ArrAlfa[ch].code, ArrAlfa[ch].length, 1, fcode);
		}
		else
		if (ch == 0xA8 || ch == 0xB8)
		{
			ch = 0xE5;
			fwrite(ArrAlfa[ch].code, ArrAlfa[ch].length, 1, fcode);
		}

	}
	numclosed = _fcloseall();

	system("pause");
}
Esempio n. 5
0
int main() {
	char 	line[BUFSIZ];
	int 	row[BUFSIZ];

	int 	opt = 0;
	FILE*	file= NULL;
	//char*	fn 	= NULL;
	int 	ncol= 0;
	int 	tmp = 0;
	graph*	g 	= NULL;
	int*	ap 	= NULL;	// pointer within g->adjmtx
	router*	r 	= NULL;
	int 	fromto[2] = { 0, 0 };
	for (;;) {
		printf("\n%s\n", menu);
		switch (readNat(&opt)) {
		case 0:
			freegraph(&g);
			goto END;
		case 1:
			printf("%s\n", prompt1);
			//fn = readFilename();
			if ((file = fopen(readFilename(), "r")) == NULL) {
				printf("File not found.\n");
				break;
			}
			// file is opened
			while (getaline(line, BUFSIZ, file)) {//printf("while ...\n");
				tmp = 0;
				if ((tmp = linetoints(line, row)) > 0) {
					if (ncol == 0) {// 1st row
						ncol = tmp;
						if (g != NULL)
							freegraph(&g);	// g == NULL
						g = makegraph(ncol);
						ap = g->adjmtx + intcpy(g->adjmtx, row, ncol);
					} else if (ncol == tmp) {
						ap += intcpy(ap, row, ncol);
					} else {
						printf("File content invalid: different number of elements on different rows.\n");
						break;
					}
				}
			}
			ncol = 0;
			fclose(file);
			//if (isvalidgraph(g)) {// graph is created
				printf("Original routing table is as follows:\n");
				printgraph(g);
			/*} else {
				freegraph(&g);
				printf("File content invalid: elements on upper-left to bottom-right diagonal are not all-zero, ");
				printf("or, the upper-right half of the matrix and the bottom-left half are not symmetric.\n");
			}*/
			
			break;
		case 2:
			if (g == NULL) {
				printf("There is no data currently.\nPlease use option 1 to read a routing table data file first.\n");
				break;
			}
			printf("%s\n", prompt2);
			if (readNat(&tmp) < 0 || tmp > g->size) {
				printf("Not a valid router id.\n");
				break;
			}
			r = makerouter(tmp, g->size);
			buildtable(r, g);
			printf("The routing table for router %d is:\n", r->id);
			printrouter(r);
			freerouter(r);
			break;
		case 3:
			if (g == NULL) {
				printf("There is no data currently.\nPlease use option 1 to read a routing table data file first.\n");
				break;
			}
			printf("%s\n", prompt3);
			if (read2Nats(fromto) < 0 || fromto[0] > g->size || fromto[1] > g->size) {
				printf("Invalid input. Please follow the format:\n\tvalid_src_router_id valid_dest_router_id.\n");
				break;
			}
			// fromto[2] is valid
			r = makerouter(fromto[0], g->size);
			dijkstra(g, r->id, r->varray);
			printpath(r, fromto[1]);
			freerouter(r);
			break;
		default:
			printf("%s\n", prompt0);
			break;
		}
	}
END:
	return 0;
}
Esempio n. 6
0
bool MyApp::OnInit()
{	
	wxCmdLineParser parser(argc,argv);
	parser.AddOption(wxT("c"), wxT("config-file"));
	parser.Parse();
	

	
	simThread = new SimulationThread();
	simThread->Create();
	simThread->SetPriority(100);

	// Populate GUI
	{
		//cout << "Frame" << endl;
		frame = new MainFrame(wxT("Huboplus Control Test 1"), wxPoint(50,50), wxSize(600,400));
		
		
	}
	
	frame->Show();
	
	wxClientDC(frame->glPane);
	frame->glPane->SetCurrent();
	
	
	// Load configurations
	{
		// load robot stuff
		const char *filename;
		wxString configFileName;
		if(parser.Found(wxT("c"), &configFileName))
		{
			//filename = configFileName.mb_str();  //not working on Linux
			char cstring[256];
			strncpy(cstring, (const char*)configFileName.mb_str(wxConvUTF8), 255);
			filename = (const char *) cstring;
		}
		else 
		{
			cout<< "Error: cfg file not supplied !\n\n";
			exit(1);
		}
		cout<<filename<<endl;
		
		ifstream cfg_ptr;
		cfg_ptr.open(filename);
		
		Float tmp;
		// Read simulation timing information.
		readConfigParameterLabel(cfg_ptr,"Integration_Stepsize");
		cfg_ptr >> tmp;
		simThread->idt = tmp;
		if (simThread->idt <= 0.0)
		{
			cerr << "main error: invalid integration stepsize: " << simThread->idt << endl;
			exit(3);
		}
		
		readConfigParameterLabel(cfg_ptr,"Control_Stepsize");
		cfg_ptr >> tmp;
		simThread->cdt = tmp;
		simThread->last_control_time = -2*simThread->cdt;
		if (simThread->cdt <= 0.0)
		{
			cerr << "main error: invalid control stepsize: " << simThread->cdt << endl;
			exit(3);
		}
		
		readConfigParameterLabel(cfg_ptr,"Display_Update_Rate");
		cfg_ptr >> frame->glPane->render_rate;
		
		
		if (frame->glPane->render_rate < 1) frame->glPane->render_rate = 1;
		
		// ------------------------------------------------------------------
		// Initialize DynaMechs environment - must occur before any linkage systems
		char env_flname[FILENAME_SIZE];
		readConfigParameterLabel(cfg_ptr,"Environment_Parameter_File");
		readFilename(cfg_ptr, env_flname);
		dmEnvironment *environment = dmuLoadFile_env(env_flname);
		dmEnvironment::setEnvironment(environment);
		
		// ------------------------------------------------------------------
		// Initialize a DynaMechs linkage system
		char robot_flname[FILENAME_SIZE];
		readConfigParameterLabel(cfg_ptr,"Robot_Parameter_File");
		readFilename(cfg_ptr, robot_flname);

		cout<<"Robot parameter file: [\033[1;34m"<< robot_flname<< "\033[0m]"<<endl;
		G_robot = dynamic_cast<dmArticulation*>(dmuLoadFile_dm(robot_flname));
		cout << "Robot created" << endl;

		huboCtrl = (HuboController *) new HuboBalanceController(G_robot);
		cout << "Robot controller created" << endl;

		// set status bar
    	wxString s;
    	s.Printf(wxT("idt = %1.1e s"), simThread->idt);
		frame->SetStatusText(s,1);
		s.Printf(_T("cdt = %f s" ), simThread->cdt);
		frame->SetStatusText(s,2);
		s.Printf(_T("refresh every %.2f ms"), 1000/(frame->glPane->render_rate) );
		frame->SetStatusText(s,3);
		
		// ------------------------
		// Read in data directory
		char data_dir[FILENAME_SIZE];
		readConfigParameterLabel(cfg_ptr, "Data_Save_Directory");
		readFilename(cfg_ptr, data_dir);
		// std::string(data_dir)

		// ...


		cout<<"Add robot to integrator "<<endl;
		simThread->G_integrator->addSystem(G_robot);


	}
	

	// -----------------------
	{
		cout<<"Initilize scene..."<<endl;
		
		frame->glPane->camera->setRadius(8.0);
		frame->glPane->camera->setCOI(3.0, 3.0, 0.0);
		frame->glPane->camera->setTranslationScale(0.02f);
		
		frame->glPane->glInit();
		
		dmEnvironment::getEnvironment()->drawInit();
		
		frame->glPane->model_loaded = true;

	}

	cout << "Restart Timer" << endl;
	frame->glPane->restartTimer();

	cout << "Start Sim Thread" << endl;
	simThread->Run();

    return true;
} 
Esempio n. 7
0
bool MyApp::OnInit()
{
    wxCmdLineParser parser(argc,argv);
    parser.AddOption(wxT("c"), wxT("Config File"));
    parser.Parse();



    simThread = new SimulationThread();
    simThread->Create();
    simThread->SetPriority(100);

    // Populate GUI
    {
        //cout << "Frame" << endl;
        frame = new MainFrame(wxT("Hello GL World"), wxPoint(50,50), wxSize(600,400));


    }

    frame->Show();

    wxClientDC(frame->glPane);
    frame->glPane->SetCurrent();


    // Load DM File
    {
        // load robot stuff
        const char *filename;
        wxString configFileName;
        if(parser.Found(wxT("c"), &configFileName))
        {
            filename = "humanoid.cfg";//configFileName.mb_str();
        }
        else {
            filename = (char *) "config.cfg";
        }
        cout<<filename<<endl;

        ifstream cfg_ptr;
        cfg_ptr.open(filename);

        Float tmp;
        // Read simulation timing information.
        readConfigParameterLabel(cfg_ptr,"Integration_Stepsize");
        cfg_ptr >> tmp;
        simThread->idt = tmp;
        if (simThread->idt <= 0.0)
        {
            cerr << "main error: invalid integration stepsize: " << simThread->idt << endl;
            exit(3);
        }

        readConfigParameterLabel(cfg_ptr,"Control_Stepsize");
        cfg_ptr >> tmp;
        simThread->cdt = tmp;
        simThread->last_control_time = -2*simThread->cdt;
        if (simThread->cdt <= 0.0)
        {
            cerr << "main error: invalid control stepsize: " << simThread->cdt << endl;
            exit(3);
        }

        readConfigParameterLabel(cfg_ptr,"Display_Update_Rate");
        cfg_ptr >> frame->glPane->render_rate;


        if (frame->glPane->render_rate < 1) frame->glPane->render_rate = 1;

        // ------------------------------------------------------------------
        // Initialize DynaMechs environment - must occur before any linkage systems
        char env_flname[FILENAME_SIZE];
        readConfigParameterLabel(cfg_ptr,"Environment_Parameter_File");
        readFilename(cfg_ptr, env_flname);
        dmEnvironment *environment = dmuLoadFile_env(env_flname);
        dmEnvironment::setEnvironment(environment);

        // ------------------------------------------------------------------
        // Initialize a DynaMechs linkage system
        char robot_flname[FILENAME_SIZE];
        readConfigParameterLabel(cfg_ptr,"Robot_Parameter_File");
        readFilename(cfg_ptr, robot_flname);


        G_robot = dynamic_cast<dmArticulation*>(dmuLoadFile_dm(robot_flname));
        humanoid = (HumanoidDataLogger *) new BalanceDemoStateMachine(G_robot);

        // --------
        // Read in data directory
        char data_dir[FILENAME_SIZE];
        readConfigParameterLabel(cfg_ptr, "Data_Save_Directory");
        readFilename(cfg_ptr, data_dir);
        humanoid->dataSaveDirectory = std::string(data_dir);


        simThread->G_integrator->addSystem(G_robot);

        grfInfo.localContacts = 0;
    }



    // -- Project specific --
    //initControl();
    // -----------------------
    {
        cout<<"initilize scene..."<<endl;

        frame->glPane->camera->setRadius(8.0);
        frame->glPane->camera->setCOI(3.0, 3.0, 0.0);
        frame->glPane->camera->setTranslationScale(0.02f);

        frame->glPane->glInit();

        dmEnvironment::getEnvironment()->drawInit();

        frame->glPane->model_loaded = true;
    }
    frame->glPane->restartTimer();
    simThread->Run();
    return true;
}