zl程序教程

您现在的位置是:首页 >  其他

当前栏目

MATLAB端控制Baxter机器人记录(1)

2023-09-27 14:20:36 时间

1、前记:ROS action client sendGoalAndWait error: 出错,之前使用sendGoalAndWait发送命令控制机器人的运动或抓手,在虚拟机试过可以,之后修改过虚拟机的环境配置,想从虚拟机中启动实际机器人的服务程序节点

代码:( rosrun baxter_interface joint_trajectory_action_server.py),就不需要在Ubuntu中的ros上启动了,但改后失败了。

失败(1):虚拟机启动实际机器人的节点失败,在虚拟机中rosmaster提示不再本机中,桥接等方式没有试过。

失败(2):是不能使用sendGoalAndWait控制虚拟机中的Baxter机器人,在MATLAB中出现错误如下,

在官网中查到相关的错误,https://ww2.mathworks.cn/matlabcentral/answers/378186-ros-action-client-sendgoalandwait-error-java-exception-occurred-java-lang-nullpointe-rexception但没有解决。因为MATLAB与ROS开始(3)---PR2机器人运动控制(翻译)中使用代码sendGoalAndWait可以控制虚拟机中的pr2机器人,因为在 MATLAB与ROS开始(2)中已经将需要的配置建好了,而且没有进行其他修改,所以不是msg包中的错误。

于是将虚拟机的配置还原成最初如下,(1)终端代码:sudo gedit ~/.bashrc

修改为:

(2)在虚拟机Home-ros_ws中的baxter.sh中

修改为

这样就可以通过MATLAB与ROS开始(3)---PR2机器人运动控制(翻译)的方式使用sendGoalAndWait来控制虚拟机中的机器人,另外在控制实际baxter机器人时,在另有一个装有Ubuntu ros的电脑上启动节点,在MATLAB上可以实现控制了。

仿照MATLAB与ROS开始(3)---PR2机器人运动控制(翻译)控制baxter的代码:

%% close last rosmaster
rosshutdown
%% connect ros
rosinit('192.168.60.128')%VMware robot
%%
rosinit('192.168.1.100')%real robot
%%
rosaction list
%如果无反应,则在虚拟机终端输入: rosrun baxter_interface gripper_action_server.py --抓手的服务
                         %或 : rosrun baxter_interface head_action_server.py
                               %或 : rosrun baxter_interface joint_trajectory_action_server.py
%控制实际机器人,则在另一个电脑上打开baxter的rosmaster,然后运行对应的interface server.py
% 再次MATLAB端输入 rosaction list   /robot/end_effector/left_gripper/gripper_action 
%                                  /robot/end_effector/right_gripper/gripper_action
%                                  /robot/head/head_action   
%                                  /robot/limb/left/follow_joint_trajectory        
%                                  /robot/limb/right/follow_joint_trajectory  
%%
%控制右臂
[actClient2,goalMsg2] = rosactionclient('/robot/limb/right/follow_joint_trajectory');
waitForServer(actClient2)
%%
disp(goalMsg2)
%%
disp(goalMsg2.Trajectory)
%%
%查看右臂关节名字,在虚拟机终端下输入命令:rosparam get /robot_config/left_config/joint_names
%                            左臂--->或:rosparam get /robot_config/right_config/joint_names
goalMsg2.Trajectory.JointNames ={'right_s0', 'right_s1', 'right_e0', 'right_e1','right_w0', 'right_w1', 'right_w2'};
           %point1
tjPoint1 = rosmessage('trajectory_msgs/JointTrajectoryPoint');
tjPoint1.Positions = [0.02, -0.8,  1.0, 1.0, -0.67, 0.8,  0];
tjPoint1.Velocities = zeros(1,7);
tjPoint1.TimeFromStart = rosduration(2.0);
 goalMsg2.Trajectory.Points = tjPoint1;
 sendGoalAndWait(actClient2,goalMsg2);
%%
% sendGoalAndWait(actClient2,goalMsg2);
           %point2
tjPoint2 = rosmessage('trajectory_msgs/JointTrajectoryPoint');
tjPoint2.Positions=[0.1, -1.0,  1.19, 1, -0.67, 1.03,  0.50];
tjPoint2.Velocities = zeros(1,7);
tjPoint2.TimeFromStart = rosduration(2.0);
goalMsg2.Trajectory.Points = tjPoint2;
sendGoalAndWait(actClient2,goalMsg2);
%*******************************************************************************************
%%   %%控制右臂运动,左臂同