@@ -1807,7 +1807,7 @@ DxlError Dynamixel::SetDxlValueToSyncWrite()
1807
1807
param_write_value[added_byte + 2 ] = DXL_LOBYTE (DXL_HIWORD (goal_position));
1808
1808
param_write_value[added_byte + 3 ] = DXL_HIBYTE (DXL_HIWORD (goal_position));
1809
1809
} else if (indirect_info_write_[comm_id].item_name .at (item_index) == " Goal Velocity" ) {
1810
- int16_t goal_velocity = dxl_info_.ConvertVelocityRPSToValueRPM (data);
1810
+ int32_t goal_velocity = dxl_info_.ConvertVelocityRPSToValueRPM (data);
1811
1811
param_write_value[added_byte + 0 ] = DXL_LOBYTE (DXL_LOWORD (goal_velocity));
1812
1812
param_write_value[added_byte + 1 ] = DXL_HIBYTE (DXL_LOWORD (goal_velocity));
1813
1813
param_write_value[added_byte + 2 ] = DXL_LOBYTE (DXL_HIWORD (goal_velocity));
@@ -1975,19 +1975,22 @@ DxlError Dynamixel::SetBulkWriteHandler(std::vector<uint8_t> id_arr)
1975
1975
1976
1976
DxlError Dynamixel::SetDxlValueToBulkWrite ()
1977
1977
{
1978
+ if (write_data_list_.size () == 0 ) {
1979
+ return DxlError::OK;
1980
+ }
1981
+
1978
1982
for (auto it_write_data : write_data_list_) {
1979
- uint8_t ID = it_write_data.comm_id ;
1983
+ uint8_t comm_id = it_write_data.comm_id ;
1980
1984
uint8_t * param_write_value;
1981
1985
uint8_t added_byte = 0 ;
1982
1986
1983
1987
// Check if this is a direct write
1984
- if (direct_info_write_.find (ID ) != direct_info_write_.end ()) {
1985
- param_write_value = new uint8_t [direct_info_write_[ID ].size ];
1988
+ if (direct_info_write_.find (comm_id ) != direct_info_write_.end ()) {
1989
+ param_write_value = new uint8_t [direct_info_write_[comm_id ].size ];
1986
1990
1987
- for (uint16_t item_index = 0 ; item_index < direct_info_write_[ID ].cnt ; item_index++) {
1991
+ for (uint16_t item_index = 0 ; item_index < direct_info_write_[comm_id ].cnt ; item_index++) {
1988
1992
double data = *it_write_data.item_data_ptr_vec .at (item_index);
1989
- uint8_t size = direct_info_write_[ID].item_size .at (item_index);
1990
-
1993
+ uint8_t size = direct_info_write_[comm_id].item_size .at (item_index);
1991
1994
if (size == 4 ) {
1992
1995
int32_t value = static_cast <int32_t >(data);
1993
1996
param_write_value[added_byte + 0 ] = DXL_LOBYTE (DXL_LOWORD (value));
@@ -2005,47 +2008,48 @@ DxlError Dynamixel::SetDxlValueToBulkWrite()
2005
2008
}
2006
2009
2007
2010
if (group_bulk_write_->addParam (
2008
- ID ,
2009
- direct_info_write_[ID ].indirect_data_addr ,
2010
- direct_info_write_[ID ].size ,
2011
+ comm_id ,
2012
+ direct_info_write_[comm_id ].indirect_data_addr ,
2013
+ direct_info_write_[comm_id ].size ,
2011
2014
param_write_value) != true )
2012
2015
{
2013
- fprintf (stderr, " [ID:%03d] groupBulkWrite addparam failed\n " , ID );
2016
+ fprintf (stderr, " [ID:%03d] groupBulkWrite addparam failed\n " , comm_id );
2014
2017
return DxlError::BULK_WRITE_FAIL;
2015
2018
}
2016
2019
} else {
2017
2020
// Handle indirect write
2018
- param_write_value = new uint8_t [indirect_info_write_[ID ].size ];
2021
+ param_write_value = new uint8_t [indirect_info_write_[comm_id ].size ];
2019
2022
2020
- for (uint16_t item_index = 0 ; item_index < indirect_info_write_[ID ].cnt ; item_index++) {
2023
+ for (uint16_t item_index = 0 ; item_index < indirect_info_write_[comm_id ].cnt ; item_index++) {
2021
2024
double data = *it_write_data.item_data_ptr_vec .at (item_index);
2022
- if (indirect_info_write_[ID].item_name .at (item_index) == " Goal Position" ) {
2025
+ uint8_t ID = it_write_data.id_arr .at (item_index);
2026
+ if (indirect_info_write_[comm_id].item_name .at (item_index) == " Goal Position" ) {
2023
2027
int32_t goal_position = dxl_info_.ConvertRadianToValue (ID, data);
2024
2028
param_write_value[added_byte + 0 ] = DXL_LOBYTE (DXL_LOWORD (goal_position));
2025
2029
param_write_value[added_byte + 1 ] = DXL_HIBYTE (DXL_LOWORD (goal_position));
2026
2030
param_write_value[added_byte + 2 ] = DXL_LOBYTE (DXL_HIWORD (goal_position));
2027
2031
param_write_value[added_byte + 3 ] = DXL_HIBYTE (DXL_HIWORD (goal_position));
2028
- } else if (indirect_info_write_[ID ].item_name .at (item_index) == " Goal Velocity" ) {
2032
+ } else if (indirect_info_write_[comm_id ].item_name .at (item_index) == " Goal Velocity" ) {
2029
2033
int32_t goal_velocity = dxl_info_.ConvertVelocityRPSToValueRPM (data);
2030
2034
param_write_value[added_byte + 0 ] = DXL_LOBYTE (DXL_LOWORD (goal_velocity));
2031
2035
param_write_value[added_byte + 1 ] = DXL_HIBYTE (DXL_LOWORD (goal_velocity));
2032
2036
param_write_value[added_byte + 2 ] = DXL_LOBYTE (DXL_HIWORD (goal_velocity));
2033
2037
param_write_value[added_byte + 3 ] = DXL_HIBYTE (DXL_HIWORD (goal_velocity));
2034
- } else if (indirect_info_write_[ID ].item_name .at (item_index) == " Goal Current" ) {
2038
+ } else if (indirect_info_write_[comm_id ].item_name .at (item_index) == " Goal Current" ) {
2035
2039
int16_t goal_current = dxl_info_.ConvertEffortToCurrent (ID, data);
2036
2040
param_write_value[added_byte + 0 ] = DXL_LOBYTE (goal_current);
2037
2041
param_write_value[added_byte + 1 ] = DXL_HIBYTE (goal_current);
2038
2042
}
2039
- added_byte += indirect_info_write_[ID ].item_size .at (item_index);
2043
+ added_byte += indirect_info_write_[comm_id ].item_size .at (item_index);
2040
2044
}
2041
2045
2042
2046
if (group_bulk_write_->addParam (
2043
- ID ,
2044
- indirect_info_write_[ID ].indirect_data_addr ,
2045
- indirect_info_write_[ID ].size ,
2047
+ comm_id ,
2048
+ indirect_info_write_[comm_id ].indirect_data_addr ,
2049
+ indirect_info_write_[comm_id ].size ,
2046
2050
param_write_value) != true )
2047
2051
{
2048
- fprintf (stderr, " [ID:%03d] groupBulkWrite addparam failed\n " , ID );
2052
+ fprintf (stderr, " [ID:%03d] groupBulkWrite addparam failed\n " , comm_id );
2049
2053
return DxlError::BULK_WRITE_FAIL;
2050
2054
}
2051
2055
}
0 commit comments