usb2ax icon indicating copy to clipboard operation
usb2ax copied to clipboard

Can send use a sync_write

Open metropt opened this issue 9 years ago • 3 comments

I'm trying to write the goal pos to two motors however I need to send the following packet two times to make it work whatever id I choose first only the first motor on the chain is activated :sa:

            dxl_set_txpacket_id( 254 );
            dxl_set_txpacket_length( 10 ); //Length (L+1) X N + 4   (L: Data Length per RX-64, N: the number of RX-64s)
            dxl_set_txpacket_instruction( 131 );
            dxl_set_txpacket_parameter( 0, GOAL_POSITION_L );
            dxl_set_txpacket_parameter( 1, 2 );
            dxl_set_txpacket_parameter( 2, 2 );
            dxl_set_txpacket_parameter( 3, dxl_get_lowbyte( goal_pos_[0] ) );
            dxl_set_txpacket_parameter( 4, dxl_get_highbyte( goal_pos_[0] ) );
            dxl_set_txpacket_parameter( 5, 1 );
            dxl_set_txpacket_parameter( 6, dxl_get_lowbyte( goal_pos_[0] ) );
            dxl_set_txpacket_parameter( 7, dxl_get_highbyte( goal_pos_[0] ) );

metropt avatar Sep 08 '16 16:09 metropt

Hi! I'm not really sure what is going wrong here, are you sure the rest of the setup is OK? Can you move the second servo with a write_data packet?

And also, if you are using the version of the lib I have on this repo, why don't you simply use the sync_write functions instead of building the packet yourself (less error-prone)? Sync_read example that also shows the sync_write

Xevel avatar Sep 08 '16 20:09 Xevel

Hello,

I tried the sync_write from you lib and it works well however now I'm getting problems with sync_read. I got a lot incorrect status packet:

[ INFO] [1473761250.694434838]: 1=559 [ INFO] [1473761250.694477383]: 2=300

[ INFO] [1473761250.714561671]: 1=559 [ INFO] [1473761250.714606049]: 2=300

[ INFO] [1473761250.734441294]: 1=559 [ INFO] [1473761250.734487448]: 2=300

[ INFO] [1473761250.754562067]: 1=559 [ INFO] [1473761250.754605699]: 2=300

[ INFO] [1473761250.774435077]: 1=559 [ INFO] [1473761250.774478255]: 2=300

[ INFO] [1473761250.794558795]: 1=559 [ INFO] [1473761250.794600594]: 2=300

...

[ INFO] [1473761251.274591423]: 1=559 [ INFO] [1473761251.274632121]: 2=300

[ INFO] [1473761251.294593208]: 1=559 [ INFO] [1473761251.294635295]: 2=300

[ INFO] [1473761251.314467278]: 1=559 [ INFO] [1473761251.314507783]: 2=65535

[ INFO] [1473761251.334477456]: 1=559 [ INFO] [1473761251.334546297]: 2=300

[ INFO] [1473761251.354603917]: 1=559 [ INFO] [1473761251.354650028]: 2=65535

[ INFO] [1473761251.374588057]: 1=559 [ INFO] [1473761251.374633864]: 2=300

[ INFO] [1473761251.394576031]: 1=559 [ INFO] [1473761251.394620455]: 2=300

[ INFO] [1473761251.414601759]: 1=559 [ INFO] [1473761251.414647350]: 2=300

[ INFO] [1473761251.434592444]: 1=559 [ INFO] [1473761251.434632395]: 2=65535

[ INFO] [1473761251.454596015]: 1=559 [ INFO] [1473761251.454638298]: 2=300

[ INFO] [1473761251.474575276]: 1=559 [ INFO] [1473761251.474634469]: 2=65535

[ INFO] [1473761251.494566517]: 1=559 [ INFO] [1473761251.494618563]: 2=300

[ INFO] [1473761251.514566383]: 1=559 [ INFO] [1473761251.514618284]: 2=65535

[ INFO] [1473761251.534442431]: 1=559 [ INFO] [1473761251.534496357]: 2=301

[ INFO] [1473761251.554566425]: 1=559 [ INFO] [1473761251.554617983]: 2=65535

[ INFO] [1473761251.574567989]: 1=559 [ INFO] [1473761251.574622302]: 2=300

[ INFO] [1473761251.594581237]: 1=559 [ INFO] [1473761251.594637699]: 2=65535

[ INFO] [1473761251.614568112]: 1=559 [ INFO] [1473761251.614619575]: 2=300

[ INFO] [1473761251.634567871]: 1=559 [ INFO] [1473761251.634619959]: 2=65535

[ INFO] [1473761251.654570137]: 1=559 [ INFO] [1473761251.654623414]: 2=300

[ INFO] [1473761251.674563754]: 1=559 [ INFO] [1473761251.674613520]: 2=65535

[ INFO] [1473761251.694447221]: 1=559 [ INFO] [1473761251.694503734]: 2=300

[ INFO] [1473761251.714566023]: 1=559 [ INFO] [1473761251.714616845]: 2=65535

COMM_RXCORRUPT: Incorrect status packet!

[ INFO] [1473761251.754587500]: 1=559 [ INFO] [1473761251.754662450]: 2=65535

COMM_RXCORRUPT: Incorrect status packet!

[ INFO] [1473761251.794586438]: 1=559 [ INFO] [1473761251.794654394]: 2=65535

^CCOMM_RXCORRUPT: Incorrect status packet!

[ INFO] [1473761251.834603526]: 1=559 [ INFO] [1473761251.834656415]: 2=65535

COMM_RXCORRUPT: Incorrect status packet!

[wiigo_active_camera-1] killing on exit [ INFO] [1473761251.874591459]: 1=559 [ INFO] [1473761251.874650561]: 2=300

COMM_RXCORRUPT: Incorrect status packet!

The code I'm using:

dxl_sync_read_start( PRESENT_POSITION_L, 2 );
dxl_sync_read_push_id( 1 );
dxl_sync_read_push_id( 2 );
dxl_sync_read_send();

CommStatus = dxl_get_result();
if( CommStatus == COMM_RXSUCCESS )
{
   ROS_INFO("%d=%d ", 1 , dxl_sync_read_pop_word());
   ROS_INFO("%d=%d ", 2 , dxl_sync_read_pop_word());
 }
 else
 {
   PrintCommStatus(CommStatus);
 }

If I read only one sensor like this:

ROS_INFO("%d=%d ", 1 , dxl_read_word(1,PRESENT_POSITION_L) );

it works ok.

Any idea?

My setup: image

metropt avatar Sep 13 '16 10:09 metropt

Hello,

I tried the sync_write from you lib and it works well however now I'm getting problems with sync_read. I got a lot incorrect status packet:

[ INFO] [1473761250.694434838]: 1=559 [ INFO] [1473761250.694477383]: 2=300

[ INFO] [1473761250.714561671]: 1=559 [ INFO] [1473761250.714606049]: 2=300

[ INFO] [1473761250.734441294]: 1=559 [ INFO] [1473761250.734487448]: 2=300

[ INFO] [1473761250.754562067]: 1=559 [ INFO] [1473761250.754605699]: 2=300

[ INFO] [1473761250.774435077]: 1=559 [ INFO] [1473761250.774478255]: 2=300

[ INFO] [1473761250.794558795]: 1=559 [ INFO] [1473761250.794600594]: 2=300

...

[ INFO] [1473761251.274591423]: 1=559 [ INFO] [1473761251.274632121]: 2=300

[ INFO] [1473761251.294593208]: 1=559 [ INFO] [1473761251.294635295]: 2=300

[ INFO] [1473761251.314467278]: 1=559 [ INFO] [1473761251.314507783]: 2=65535

[ INFO] [1473761251.334477456]: 1=559 [ INFO] [1473761251.334546297]: 2=300

[ INFO] [1473761251.354603917]: 1=559 [ INFO] [1473761251.354650028]: 2=65535

[ INFO] [1473761251.374588057]: 1=559 [ INFO] [1473761251.374633864]: 2=300

[ INFO] [1473761251.394576031]: 1=559 [ INFO] [1473761251.394620455]: 2=300

[ INFO] [1473761251.414601759]: 1=559 [ INFO] [1473761251.414647350]: 2=300

[ INFO] [1473761251.434592444]: 1=559 [ INFO] [1473761251.434632395]: 2=65535

[ INFO] [1473761251.454596015]: 1=559 [ INFO] [1473761251.454638298]: 2=300

[ INFO] [1473761251.474575276]: 1=559 [ INFO] [1473761251.474634469]: 2=65535

[ INFO] [1473761251.494566517]: 1=559 [ INFO] [1473761251.494618563]: 2=300

[ INFO] [1473761251.514566383]: 1=559 [ INFO] [1473761251.514618284]: 2=65535

[ INFO] [1473761251.534442431]: 1=559 [ INFO] [1473761251.534496357]: 2=301

[ INFO] [1473761251.554566425]: 1=559 [ INFO] [1473761251.554617983]: 2=65535

[ INFO] [1473761251.574567989]: 1=559 [ INFO] [1473761251.574622302]: 2=300

[ INFO] [1473761251.594581237]: 1=559 [ INFO] [1473761251.594637699]: 2=65535

[ INFO] [1473761251.614568112]: 1=559 [ INFO] [1473761251.614619575]: 2=300

[ INFO] [1473761251.634567871]: 1=559 [ INFO] [1473761251.634619959]: 2=65535

[ INFO] [1473761251.654570137]: 1=559 [ INFO] [1473761251.654623414]: 2=300

[ INFO] [1473761251.674563754]: 1=559 [ INFO] [1473761251.674613520]: 2=65535

[ INFO] [1473761251.694447221]: 1=559 [ INFO] [1473761251.694503734]: 2=300

[ INFO] [1473761251.714566023]: 1=559 [ INFO] [1473761251.714616845]: 2=65535

COMM_RXCORRUPT: Incorrect status packet!

[ INFO] [1473761251.754587500]: 1=559 [ INFO] [1473761251.754662450]: 2=65535

COMM_RXCORRUPT: Incorrect status packet!

[ INFO] [1473761251.794586438]: 1=559 [ INFO] [1473761251.794654394]: 2=65535

^CCOMM_RXCORRUPT: Incorrect status packet!

[ INFO] [1473761251.834603526]: 1=559 [ INFO] [1473761251.834656415]: 2=65535

COMM_RXCORRUPT: Incorrect status packet!

[wiigo_active_camera-1] killing on exit [ INFO] [1473761251.874591459]: 1=559 [ INFO] [1473761251.874650561]: 2=300

COMM_RXCORRUPT: Incorrect status packet!

The code I'm using:

dxl_sync_read_start( PRESENT_POSITION_L, 2 );
dxl_sync_read_push_id( 1 );
dxl_sync_read_push_id( 2 );
dxl_sync_read_send();

CommStatus = dxl_get_result();
if( CommStatus == COMM_RXSUCCESS )
{
   ROS_INFO("%d=%d ", 1 , dxl_sync_read_pop_word());
   ROS_INFO("%d=%d ", 2 , dxl_sync_read_pop_word());
 }
 else
 {
   PrintCommStatus(CommStatus);
 }

If I read only one sensor like this:

ROS_INFO("%d=%d ", 1 , dxl_read_word(1,PRESENT_POSITION_L) );

it works ok.

Any idea?

My setup: image

metropt avatar Sep 13 '16 10:09 metropt

Hmm, not sure, but have you set Return Delay Time to zero on all servos? the timeout in the sync_read code is pretty short, could have something to do with it...

Xevel avatar Sep 13 '16 13:09 Xevel