@@ -485,6 +485,8 @@ void RobotisController::initializeDevice(const std::string init_file_path)
485
485
{
486
486
if (dxl->bulk_read_items_ .size () != 0 )
487
487
{
488
+ uint16_t data16 = 0 ;
489
+
488
490
bulkread_start_addr = dxl->bulk_read_items_ [0 ]->address_ ;
489
491
bulkread_data_length = 0 ;
490
492
@@ -497,8 +499,12 @@ void RobotisController::initializeDevice(const std::string init_file_path)
497
499
bulkread_data_length += addr_leng;
498
500
for (int l = 0 ; l < addr_leng; l++)
499
501
{
500
- // ROS_WARN("[%12s] INDIR_ADDR: %d, ITEM_ADDR: %d", joint_name.c_str(), indirect_addr, dxl->ctrl_table[dxl->bulk_read_items[i]->item_name]->address + _l);
501
- write2Byte (joint_name, indirect_addr, dxl->ctrl_table_ [dxl->bulk_read_items_ [i]->item_name_ ]->address_ + l);
502
+ // ROS_WARN("[%12s] INDIR_ADDR: %d, ITEM_ADDR: %d", joint_name.c_str(), indirect_addr, dxl->ctrl_table_[dxl->bulk_read_items_[i]->item_name_]->address_ + l);
503
+ read2Byte (joint_name, indirect_addr, &data16);
504
+ if (data16 != dxl->ctrl_table_ [dxl->bulk_read_items_ [i]->item_name_ ]->address_ + l)
505
+ {
506
+ write2Byte (joint_name, indirect_addr, dxl->ctrl_table_ [dxl->bulk_read_items_ [i]->item_name_ ]->address_ + l);
507
+ }
502
508
indirect_addr += 2 ;
503
509
}
504
510
}
@@ -552,6 +558,8 @@ void RobotisController::initializeDevice(const std::string init_file_path)
552
558
{
553
559
if (sensor->bulk_read_items_ .size () != 0 )
554
560
{
561
+ uint16_t data16 = 0 ;
562
+
555
563
bulkread_start_addr = sensor->bulk_read_items_ [0 ]->address_ ;
556
564
bulkread_data_length = 0 ;
557
565
@@ -565,9 +573,13 @@ void RobotisController::initializeDevice(const std::string init_file_path)
565
573
for (int l = 0 ; l < addr_leng; l++)
566
574
{
567
575
// ROS_WARN("[%12s] INDIR_ADDR: %d, ITEM_ADDR: %d", sensor_name.c_str(), indirect_addr, sensor->ctrl_table[sensor->bulk_read_items[i]->item_name]->address + _l);
568
- write2Byte (sensor_name,
569
- indirect_addr,
570
- sensor->ctrl_table_ [sensor->bulk_read_items_ [i]->item_name_ ]->address_ + l);
576
+ read2Byte (sensor_name, indirect_addr, &data16);
577
+ if (data16 != sensor->ctrl_table_ [sensor->bulk_read_items_ [i]->item_name_ ]->address_ + l)
578
+ {
579
+ write2Byte (sensor_name,
580
+ indirect_addr,
581
+ sensor->ctrl_table_ [sensor->bulk_read_items_ [i]->item_name_ ]->address_ + l);
582
+ }
571
583
indirect_addr += 2 ;
572
584
}
573
585
}
@@ -934,8 +946,8 @@ void RobotisController::process()
934
946
dxl->dxl_state_ ->goal_velocity_ = dxl->convertValue2Velocity (data);
935
947
else if (dxl->goal_current_item_ != 0 && item->item_name_ == dxl->goal_current_item_ ->item_name_ )
936
948
dxl->dxl_state_ ->goal_torque_ = dxl->convertValue2Torque (data);
937
- else
938
- dxl->dxl_state_ ->bulk_read_table_ [item->item_name_ ] = data;
949
+
950
+ dxl->dxl_state_ ->bulk_read_table_ [item->item_name_ ] = data;
939
951
}
940
952
}
941
953
@@ -1154,8 +1166,8 @@ void RobotisController::process()
1154
1166
dxl->dxl_state_ ->goal_velocity_ = dxl->convertValue2Velocity (data);
1155
1167
else if (dxl->goal_current_item_ != 0 && item->item_name_ == dxl->goal_current_item_ ->item_name_ )
1156
1168
dxl->dxl_state_ ->goal_torque_ = dxl->convertValue2Torque (data);
1157
- else
1158
- dxl->dxl_state_ ->bulk_read_table_ [item->item_name_ ] = data;
1169
+
1170
+ dxl->dxl_state_ ->bulk_read_table_ [item->item_name_ ] = data;
1159
1171
}
1160
1172
}
1161
1173
@@ -1239,7 +1251,7 @@ void RobotisController::process()
1239
1251
1240
1252
if (result_state == NULL )
1241
1253
{
1242
- fprintf (stderr, " [%s] %s" , (*module_it)->getModuleName ().c_str (), joint_name.c_str ());
1254
+ ROS_ERROR ( " [%s] %s " , (*module_it)->getModuleName ().c_str (), joint_name.c_str ());
1243
1255
continue ;
1244
1256
}
1245
1257
0 commit comments