对于利用moveit控制真实的机械臂的流程
一、首先假设你的底层的硬件控制是完成了的
这里的假设,就是说你现在能够得到关节的jointstate,同时你需要的也是jointstate。前一个jointstate指的是你自己获取到的机械臂的实时的关节状态,而后一个指的就是我们最终在文章结束后得到的一系列的路点。
二、保证你的moveit_setup_assistant已经做好
具体可以看看这个网站:链接: http://docs.ros.org/en/melodic/api/moveit_tutorials/html/doc/setup_assistant/setup_assistant_tutorial.html.
但是你发现这些都是仿真的,然而仿真中用的控制器是fake_controller,要用到实际中,需要改动一些文件参数。不多BB,直接上我查到的博客,感谢这些先行者。
这里我就用一个比较典型的博客着手,链接: https://blog.csdn.net/qq_34935373/article/details/95916111l.
如果你仔细看完,你就会对moveit生成的那个config和launch文件夹的内容有个大概的了解。
但是,注意,当你按照他的步骤来时,然后改自己的,会发现出现一些各种错误。我认为这应该是版本的更迭,还有moveit_setup_assistant的时候和原作者有些差别。所以我主要就是说一下更改的内容。
三、更改内容
要注意的是,我们若按照在那个教程网站中,他的控制器设置为position_controllers/JointPositionController,但是我们在后边需要的是FollowJointTrajectory,。在上面的链接2中是直接在controller.yaml(他好像是自己新建,但是现在好像自动生成了一个ros_controller.yaml文件和fake_controller.yaml对应)中 重写控制器的参数。但是我发现我好像用了就出现一些错误。所以我想到,在moveit_setup_assistant设置时,不就设置了ros_controller么,我直接设不就行了,所以我返回去,将控制器的type选的FollowJointTrajectory,然后保存。你会发现在ros_controller.yaml中就有type为FollowJointTrajectory的控制器,这时候就不需要更改,直接用就行。
四、解决follow_joint_trajectory的server端的问题
这里就如链接2所说,缺少一各action_server端,自己写一个就是,我用python写的,代码太丑了,就不拿上来了。
五、重点来了
当你一切弄完,重新运行demo文件,再运行action_server文件时,当点击 planandexecute时,就出现Unable to identify any set of controllers that can actuate the specified joints: [ joint1 joint2…,
反正我找半天不知道具体的解释和原因。
最后我发现先运行action_server文件,再运行demo文件,再操作,就没问题了。
运行$ rostopic echo /redwall_arm(自己设置的名称)/follow_joint_trajectory/goal,就会出现内容了。这时候,用FollowJointTrajestory,就可以去规划自己的机械的关节运动了
第二次写博客,希望有大佬指正有误的地方,谢谢。