diff --git a/src/bioloid_motion_pages.cpp b/src/bioloid_motion_pages.cpp index fe6537c8223c556d78ce22cc10a64f90210c75e5..43233634d58114cb97f52ef5d22c73674b30fbe1 100755 --- a/src/bioloid_motion_pages.cpp +++ b/src/bioloid_motion_pages.cpp @@ -10,6 +10,7 @@ int main(const int argc,char *argv[]) { std::vector<unsigned short int> angles; + std::string servo_type="AX-12A"; MTN::CMtnFileParser mtn_parser; CBinFileParser bin_parser; CSTM32SrcMtn source; @@ -74,6 +75,8 @@ int main(const int argc,char *argv[]) std::cout << "step time: " << step.get_step_time() << std::endl; } } + for(i=0;i<motions.get_num_servos();i++) + motions.set_motor_type(i,servo_type); source.load_motions(motions); source.generate_src_file(std::string(argv[2])); diff --git a/src/stm32_src_mtn.cpp b/src/stm32_src_mtn.cpp index b89fade66c7e3872d180965e1e449f9ce56314f4..bc81b87ea67c8cd422e073c3377c24508f551fea 100644 --- a/src/stm32_src_mtn.cpp +++ b/src/stm32_src_mtn.cpp @@ -120,7 +120,7 @@ void CSTM32SrcMtn::generate_src_file(const std::string &filename) { std::vector<unsigned short int> word_vector; std::vector<unsigned char> byte_vector; - unsigned int i=0,j=0; + unsigned int i=0,j=0,k=0; CRobotisPage page; CRobotisStep step; std::ofstream file; @@ -131,20 +131,24 @@ void CSTM32SrcMtn::generate_src_file(const std::string &filename) file << "#include \"motion_pages.h\"\n" << std::endl << std::endl; file << "TPage motion_pages[MAX_PAGES] __attribute__ ((section (\".pages\")))=" << std::endl; file << "{" << std::endl; - for(i=0;i<this->motions.get_num_pages();i++) + for(i=0;i<=this->motions.get_num_pages();i++) { file << " {" << std::endl;// page start file << " {" << std::endl;// header start byte_vector.clear(); - page=this->motions.get_page(i); + if(i==0) + page.clear(); + else + page=this->motions.get_page(i-1); // motion name + byte_vector.clear(); byte_vector.resize(14); memcpy(byte_vector.data(),page.get_name().data(),page.get_name().size()); memset(&byte_vector.data()[page.get_name().size()],' ',14-page.get_name().size()); this->write_byte_vector(file,byte_vector,3); this->write_byte_vector(file,std::vector<unsigned char>(1,0),3); this->write_byte_vector(file,std::vector<unsigned char>(1,page.get_repetitions()),3); - this->write_byte_vector(file,std::vector<unsigned char>(1,0),3); + this->write_byte_vector(file,std::vector<unsigned char>(1,0x0A),3); this->write_byte_vector(file,std::vector<unsigned char>(3,0),3); this->write_byte_vector(file,std::vector<unsigned char>(1,page.get_num_steps()),3); this->write_byte_vector(file,std::vector<unsigned char>(1,0),3); @@ -155,6 +159,7 @@ void CSTM32SrcMtn::generate_src_file(const std::string &filename) this->write_byte_vector(file,std::vector<unsigned char>(1,page.get_exit_page()),3); this->write_byte_vector(file,std::vector<unsigned char>(4,0),3); this->write_byte_vector(file,std::vector<unsigned char>(1,this->compute_checksum(page)),3); + byte_vector.clear(); byte_vector.resize(PAGE_MAX_NUM_SERVOS); for(j=0;j<page.get_cw_compliances().size();j++) { @@ -172,8 +177,10 @@ void CSTM32SrcMtn::generate_src_file(const std::string &filename) if(j<page.get_num_steps()) { step=page.get_step(j); + word_vector.clear(); word_vector.resize(PAGE_MAX_NUM_SERVOS); - memcpy(word_vector.data(),step.get_angles().data(),step.get_angles().size()*sizeof(unsigned short int)); + for(k=0;k<motions.get_num_servos();k++) + word_vector[k]=(unsigned short int)(motions.get_angle(k,i-1,j)*128); memset(&word_vector.data()[step.get_angles().size()],0x00,(PAGE_MAX_NUM_SERVOS-step.get_angles().size())*sizeof(unsigned short int)); this->write_word_vector(file,word_vector,4); this->write_byte_vector(file,std::vector<unsigned char>(1,(unsigned char)(step.get_pause_time()/0.0078)),4); @@ -194,7 +201,7 @@ void CSTM32SrcMtn::generate_src_file(const std::string &filename) file << std::endl; } file << " }" << std::endl;// steps end - if(i<254) + if(i<255) file << " }," << std::endl;//page end else file << " }" << std::endl;//page end