diff --git a/src/bioloid_motion_pages.cpp b/src/bioloid_motion_pages.cpp index 43233634d58114cb97f52ef5d22c73674b30fbe1..e093ce6840a95d89355462fad239855a97107dc6 100755 --- a/src/bioloid_motion_pages.cpp +++ b/src/bioloid_motion_pages.cpp @@ -51,34 +51,39 @@ int main(const int argc,char *argv[]) std::cout << e.what() << std::endl; } } - /* show motion pages */ - std::cout << "Num. pages: " << motions.get_num_pages() << std::endl; - for(i=0;i<motions.get_num_pages();i++) - { - page=motions.get_page(i); - std::cout << "name: " << page.get_name() << std::endl; - std::cout << "next page: " << page.get_next_page() << std::endl; - std::cout << "exit page: " << page.get_exit_page() << std::endl; - std::cout << "repetitions: " << page.get_repetitions() << std::endl; - std::cout << "speed rate: " << page.get_speed_rate() << std::endl; - std::cout << "inertial force: " << page.get_inertial() << std::endl; - std::cout << "Num. steps: " << page.get_num_steps() << std::endl; - for(j=0;j<page.get_num_steps();j++) + try{ + /* show motion pages */ + std::cout << "Num. pages: " << motions.get_num_pages() << std::endl; + for(i=0;i<motions.get_num_pages();i++) { - step=page.get_step(j); - std::cout << "angles: "; - angles=step.get_angles(); - for(k=0;k<angles.size();k++) - std::cout << angles[k] << ","; - std::cout << std::endl; - std::cout << "pausetime: " << step.get_pause_time() << std::endl; - std::cout << "step time: " << step.get_step_time() << std::endl; + std::cout << i << std::endl; + page=motions.get_page(i); + std::cout << "name: " << page.get_name() << std::endl; + std::cout << "next page: " << page.get_next_page() << std::endl; + std::cout << "exit page: " << page.get_exit_page() << std::endl; + std::cout << "repetitions: " << page.get_repetitions() << std::endl; + std::cout << "speed rate: " << page.get_speed_rate() << std::endl; + std::cout << "inertial force: " << page.get_inertial() << std::endl; + std::cout << "Num. steps: " << page.get_num_steps() << std::endl; + for(j=0;j<page.get_num_steps();j++) + { + step=page.get_step(j); + std::cout << "angles: "; + angles=step.get_angles(); + for(k=0;k<angles.size();k++) + std::cout << angles[k] << ","; + std::cout << std::endl; + std::cout << "pausetime: " << step.get_pause_time() << std::endl; + 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])); + }catch(CMtnException &e){ + std::cout << e.what() << 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])); return(EXIT_SUCCESS); } diff --git a/src/stm32_src_mtn.cpp b/src/stm32_src_mtn.cpp index bc81b87ea67c8cd422e073c3377c24508f551fea..cbd0c5b213b16d11496670410de0e7c8ed44b5b9 100644 --- a/src/stm32_src_mtn.cpp +++ b/src/stm32_src_mtn.cpp @@ -65,16 +65,18 @@ void CSTM32SrcMtn::write_word_vector(std::ofstream &file,const std::vector<unsig file << std::endl; } -unsigned char CSTM32SrcMtn::compute_checksum(CRobotisPage &page) +unsigned char CSTM32SrcMtn::compute_checksum(int page_id) { std::vector<unsigned short int> angles; std::vector<unsigned char> cw_compliance; std::vector<unsigned char> ccw_compliance; unsigned char checksum=0x00; unsigned int i=0,j=0; + CRobotisPage page; CRobotisStep step; std::string name; + page=this->motions.get_page(page_id); name=page.get_name(); for(i=0;i<14;i++) { @@ -84,6 +86,7 @@ unsigned char CSTM32SrcMtn::compute_checksum(CRobotisPage &page) checksum+=' '; } checksum+=(unsigned char)page.get_repetitions(); + checksum+=0x0A; checksum+=(unsigned char)page.get_num_steps(); checksum+=(unsigned char)page.get_speed_rate()*32; checksum+=(unsigned char)page.get_inertial(); @@ -98,16 +101,15 @@ unsigned char CSTM32SrcMtn::compute_checksum(CRobotisPage &page) for(i=0;i<page.get_num_steps();i++) { step=page.get_step(i); - angles=step.get_angles(); - for(j=0;j<angles.size();j++) + for(j=0;j<motions.get_num_servos();j++) { - checksum+=(unsigned char)angles[i]&0x00FF; - checksum+=(unsigned char)(angles[i]/256)&0x00FF; + checksum+=(unsigned char)(motions.get_angle(j,page_id,i)*128)&0x00FF; + checksum+=(unsigned char)(((unsigned short)(motions.get_angle(j,page_id,i)*128))>>8)&0x00FF; } checksum+=(unsigned char)(step.get_pause_time()/0.0078); checksum+=(unsigned char)(step.get_step_time()/0.0078); } - return checksum; + return 256-checksum; } void CSTM32SrcMtn::load_motions(CRobotisMtn &motions) @@ -158,7 +160,10 @@ void CSTM32SrcMtn::generate_src_file(const std::string &filename) this->write_byte_vector(file,std::vector<unsigned char>(1,page.get_next_page()),3); 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); + if(i==0) + this->write_byte_vector(file,std::vector<unsigned char>(1,0),3); + else + this->write_byte_vector(file,std::vector<unsigned char>(1,this->compute_checksum(i-1)),3); byte_vector.clear(); byte_vector.resize(PAGE_MAX_NUM_SERVOS); for(j=0;j<page.get_cw_compliances().size();j++) diff --git a/src/stm32_src_mtn.h b/src/stm32_src_mtn.h index 7514450a8000dd7faa624ffeb9af4256eec7d092..490113befe494f065794e8c04ae55d16bf73e385 100644 --- a/src/stm32_src_mtn.h +++ b/src/stm32_src_mtn.h @@ -10,7 +10,7 @@ class CSTM32SrcMtn CRobotisMtn motions; void write_byte_vector(std::ofstream &file,const std::vector<unsigned char> &vector,unsigned int level=0,bool last=false); void write_word_vector(std::ofstream &file,const std::vector<unsigned short int> &vector,unsigned int level=0,bool last=false); - unsigned char compute_checksum(CRobotisPage &page); + unsigned char compute_checksum(int page_id); public: CSTM32SrcMtn(); void load_motions(CRobotisMtn &motions);