MATLAB端控制Baxter机器人记录(1)
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);
%*******************************************************************************************
%% %%控制右臂运动,左臂同
相关文章
- 可控制左右切换的幻灯片轮换
- 第二十一章 控制进程(二)
- 73 python - 打飞机案例(显示控制玩具飞机-面向过程)
- 【ROS进阶篇】第九讲 基于Rviz和Arbotix控制的机器人模型运动
- HCIA第二次作业—— tcp阻塞控制,滑动窗口,http状态码,Nslookup
- vue 组件 单选切换控制模板 v-bind-is
- 基于微信硬件公众平台的智能控制开发流程
- Windows下给鼠标右键菜单添加获得完全控制权限的菜单项
- 通过虚拟现实实现操纵机器人的控制界面
- 【转载】 机器人仿生控制方法研究
- c# 普通打印机大致有三种方法(非热敏打印机及lpt1并口指令控制型)
- 他们实际上控制的定义很easy5/12
- 【项目实战】——USB双路继电器电脑控制灯的开关(Python)
- Windows 中的 UAC 用户账户控制