I am sort of curious on how many people are using the RPI2 versus the Edison and I wondering about how well the Arbotix Pro is talking to the the Raspberry PI.
When I try to run some of the different project programs, such as the PS3 demo as well as the DXL manager, probably over 50 percent of the time when I try to run one of these programs, the system fails to initialize properly and errors out. Example:
Code:
[ID:200(SUB_BOARD)] ^[email protected] ~/HROS1-Framework-Kurte/Linux/project/dxl_monitor $ ./dxl_monitor
[Dynamixel Monitor for DARwIn v1.00]
Failed to connect CM-730!
Terminated DXL Manager.
[email protected] ~/HROS1-Framework-Kurte/
If I try to run it again it often will work. I am pretty sure it is a timeout issue.
Likewise most of the time I can not reliably switch to different IDS. For example:
Code:
[email protected] ~/HROS1-Framework-Kurte/Linux/project/dxl_monitor $ ./dxl_monitor
[Dynamixel Monitor for DARwIn v1.00]
Check ID:1(R_SHOULDER_PITCH) ... OK
Check ID:2(L_SHOULDER_PITCH) ... OK
Check ID:3(R_SHOULDER_ROLL) ... OK
Check ID:4(L_SHOULDER_ROLL) ... OK
Check ID:5(R_ELBOW) ... OK
Check ID:6(L_ELBOW) ... OK
Check ID:7(R_HIP_YAW) ... OK
Check ID:8(L_HIP_YAW) ... OK
Check ID:9(R_HIP_ROLL) ... OK
Check ID:10(L_HIP_ROLL) ... OK
Check ID:11(R_HIP_PITCH) ... OK
Check ID:12(L_HIP_PITCH) ... OK
Check ID:13(R_KNEE) ... OK
Check ID:14(L_KNEE) ... OK
Check ID:15(R_ANKLE_PITCH) ... OK
Check ID:16(L_ANKLE_PITCH) ... OK
Check ID:17(R_ANKLE_ROLL) ... OK
Check ID:18(L_ANKLE_ROLL) ... OK
Check ID:19(HEAD_PAN) ... OK
Check ID:20(HEAD_TILT) ... OK
Check ID:200(SUB_BOARD) ... OK
[ID:200(SUB_BOARD)] id 1
[ID:1(R_SHOULDER_PITCH)] wr 30 400
Fail to write!
[ID:1(R_SHOULDER_PITCH)] id 2
Invalid ID(2):4!
[ID:1(R_SHOULDER_PITCH)]
The first set of id works, I am also able to write to servo, but then if I try to switch to different ID it most often fails.
I updated the code to print out error code (4), which is timeout.
Looking at the underlying code, it tries to switch servos by doing a ping of it. The ping is failing. The underlying code that ping is calling, sets a timeout of 2* (length of ping packet)*time_to_send_a_byte + 5 ms.
I am not sure how this equation was decided on. It looks semi-reasonable to me if I was talking directly to the servos locally on the processor, as you need the amount of time to actually send the transmit the packet, plus the time the servo says to delay starting to send a response, plus the times it takes to send the bytes back over the UART. But this does not take into account the overhead for sending the packet over USB to the Arbotix, and then once the Arbotix gets the response back you have the delay to send the data back over USB... Also when I was earlier debugging some stuff using USB2AX, I also saw that at times there were some reasonable gaps in the servo response bytes...
So again I was wondering if others have already run into this and debugged it? Also wondering if those running using the Edison are also seeing similar issues?
Otherwise I will probably start debugging this more. Will probably use a logic analyzer to see how if valid packets are actually being returned and if so how long are they taking.
Other suggestions?
Kurt
Bookmarks