Hi,
My matlab code as well as the read-write matlab code are showing the following error.
“[TxRxResult] There is no status packet!”
Can someone please help me on this issue?
the code is (read-write example, modified)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Copyright 2017 ROBOTIS CO., LTD.
%
% Licensed under the Apache License, Version 2.0 (the “License”);
% you may not use this file except in compliance with the License.
% You may obtain a copy of the License at
%
% Apache License, Version 2.0
%
% Unless required by applicable law or agreed to in writing, software
% distributed under the License is distributed on an “AS IS” BASIS,
% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
% See the License for the specific language governing permissions and
% limitations under the License.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Author: Ryu Woon Jung (Leon)
%
% ********* Read and Write Example *********
%
%
% Available Dynamixel model on this example : All models using Protocol 2.0
% This example is designed for using a Dynamixel PRO 54-200, and an USB2DYNAMIXEL.
% To use another Dynamixel model, such as X series, see their details in E-Manual(emanual.robotis.com) and edit below variables yourself.
% Be sure that Dynamixel PRO properties are already set as %% ID : 1 / Baudnum : 1 (Baudrate : 57600)
%
clc;
clear all;
lib_name = ‘’;
if strcmp(computer, ‘PCWIN’)
lib_name = ‘dxl_x86_c’;
elseif strcmp(computer, ‘PCWIN64’)
lib_name = ‘dxl_x64_c’;
elseif strcmp(computer, ‘GLNX86’)
lib_name = ‘libdxl_x86_c’;
elseif strcmp(computer, ‘GLNXA64’)
lib_name = ‘libdxl_x64_c’;
elseif strcmp(computer, ‘MACI64’)
lib_name = ‘libdxl_mac_c’;
end
% Load Libraries
if ~libisloaded(lib_name)
[notfound, warnings] = loadlibrary(lib_name, ‘dynamixel_sdk.h’, ‘addheader’, ‘port_handler.h’, ‘addheader’, ‘packet_handler.h’);
end
% Control table address
ADDR_PRO_TORQUE_ENABLE = 64; %562; % Control table address is different in Dynamixel model
ADDR_PRO_GOAL_POSITION = 116; %596;
ADDR_PRO_PRESENT_POSITION = 132; %R611;
% Protocol version
PROTOCOL_VERSION = 2.0; % See which protocol version is used in the Dynamixel
% Default setting
DXL_ID = 1; % Dynamixel ID: 1
BAUDRATE = 57600;
DEVICENAME = ‘COM5’; % Check which port is being used on your controller
% ex) Windows: ‘COM1’ Linux: ‘/dev/ttyUSB0’ Mac: ‘/dev/tty.usbserial-*’
TORQUE_ENABLE = 1; % Value for enabling the torque
TORQUE_DISABLE = 0; % Value for disabling the torque
DESIRED_ANGLE = 162; % Desired angle in degrees, this must be always less than 360 degree.
CORRESPONDING_DECIMEL = (4096 - (((360-DESIRED_ANGLE)/360)*4096));
MINIMUM_ANGLE =0;
% (4096 - (((360-MINIMUM_ANGLE)/360)*4096))
DXL_MINIMUM_POSITION_VALUE = (4096 - (((360-MINIMUM_ANGLE)/360)*4096)); % Dynamixel will rotate between this value
DXL_MAXIMUM_POSITION_VALUE = CORRESPONDING_DECIMEL; % and this value (note that the Dynamixel would not move when the position value is out of movable range. Check e-manual about the range of the Dynamixel you use.)
DXL_MOVING_STATUS_THRESHOLD = 20; % Dynamixel moving status threshold
ESC_CHARACTER = ‘e’; % Key for escaping loop
COMM_SUCCESS = 0; % Communication Success result value
COMM_TX_FAIL = -1001; % Communication Tx Failed
% Initialize PortHandler Structs
% Set the port path
% Get methods and members of PortHandlerLinux or PortHandlerWindows
port_num = portHandler(DEVICENAME);
% Initialize PacketHandler Structs
packetHandler();
index = 1;
dxl_comm_result = COMM_TX_FAIL; % Communication result
dxl_goal_position = [DXL_MINIMUM_POSITION_VALUE DXL_MAXIMUM_POSITION_VALUE]; % Goal position
dxl_error = 0; % Dynamixel error
dxl_present_position = 0; % Present position
% Open port
if (openPort(port_num))
fprintf(‘Succeeded to open the port!\n’);
else
unloadlibrary(lib_name);
fprintf(‘Failed to open the port!\n’);
input(‘Press any key to terminate…\n’);
return;
end
% Set port baudrate
if (setBaudRate(port_num, BAUDRATE))
fprintf(‘Succeeded to change the baudrate!\n’);
else
unloadlibrary(lib_name);
fprintf(‘Failed to change the baudrate!\n’);
input(‘Press any key to terminate…\n’);
return;
end
% Enable Dynamixel Torque
write1ByteTxRx(port_num, PROTOCOL_VERSION, DXL_ID, ADDR_PRO_TORQUE_ENABLE, TORQUE_ENABLE);
dxl_comm_result = getLastTxRxResult(port_num, PROTOCOL_VERSION);
dxl_error = getLastRxPacketError(port_num, PROTOCOL_VERSION);
if dxl_comm_result ~= COMM_SUCCESS
fprintf(‘%s\n’, getTxRxResult(PROTOCOL_VERSION, dxl_comm_result));
elseif dxl_error ~= 0
fprintf(‘%s\n’, getRxPacketError(PROTOCOL_VERSION, dxl_error));
else
fprintf(‘Dynamixel has been successfully connected \n’);
end
while 1
if input(‘Press any key to continue! (or input e to quit!)\n’, ‘s’) == ESC_CHARACTER
break;
end
% Write goal position
write4ByteTxRx(port_num, PROTOCOL_VERSION, DXL_ID, ADDR_PRO_GOAL_POSITION, typecast(int32(dxl_goal_position(index)), 'uint32'));
dxl_comm_result = getLastTxRxResult(port_num, PROTOCOL_VERSION);
dxl_error = getLastRxPacketError(port_num, PROTOCOL_VERSION);
if dxl_comm_result ~= COMM_SUCCESS
fprintf('%s\n', getTxRxResult(PROTOCOL_VERSION, dxl_comm_result));
elseif dxl_error ~= 0
fprintf('%s\n', getRxPacketError(PROTOCOL_VERSION, dxl_error));
end
while 1
% Read present position
dxl_present_position = read4ByteTxRx(port_num, PROTOCOL_VERSION, DXL_ID, ADDR_PRO_PRESENT_POSITION);
dxl_comm_result = getLastTxRxResult(port_num, PROTOCOL_VERSION);
dxl_error = getLastRxPacketError(port_num, PROTOCOL_VERSION);
if dxl_comm_result ~= COMM_SUCCESS
fprintf('%s\n', getTxRxResult(PROTOCOL_VERSION, dxl_comm_result));
elseif dxl_error ~= 0
fprintf('%s\n', getRxPacketError(PROTOCOL_VERSION, dxl_error));
end
fprintf('[ID:%03d] GoalPos:%03d PresPos:%03d\n', DXL_ID, dxl_goal_position(index), typecast(uint32(dxl_present_position), 'int32'));
if ~(abs(dxl_goal_position(index) - typecast(uint32(dxl_present_position), 'int32')) > DXL_MOVING_STATUS_THRESHOLD)
break;
end
end
% Change goal position
if index == 1
index = 2;
else
index = 1;
end
end
% Disable Dynamixel Torque
write1ByteTxRx(port_num, PROTOCOL_VERSION, DXL_ID, ADDR_PRO_TORQUE_ENABLE, TORQUE_DISABLE);
dxl_comm_result = getLastTxRxResult(port_num, PROTOCOL_VERSION);
dxl_error = getLastRxPacketError(port_num, PROTOCOL_VERSION);
if dxl_comm_result ~= COMM_SUCCESS
fprintf(‘%s\n’, getTxRxResult(PROTOCOL_VERSION, dxl_comm_result));
elseif dxl_error ~= 0
fprintf(‘%s\n’, getRxPacketError(PROTOCOL_VERSION, dxl_error));
end
% Close port
closePort(port_num);
% Unload Library
unloadlibrary(lib_name);
disp (DESIRED_ANGLE);
disp (CORRESPONDING_DECIMEL);
close all;
clear all;
Regards,
Muhammed Sadique