步骤1:添加抓取器
一开始添加抓手有点让人困惑,所以我在上一篇文章中跳过了这一部分。事实证明,这毕竟不是那么困难。
您将需要修改URDF文件以添加抓手链接和关节。
为我的机器人修改的URDF文件已附加到此步骤。基本上,它遵循与手臂零件相同的逻辑,我只添加了三个新链接(claw_base,claw_r和claw_l)和三个新关节(joint5是固定的,joint6,joint7是旋转关节)。
修改URDF文件后,还需要使用MoveIt安装助手来更新MoveIt生成的软件包和xacro文件。
使用以下命令启动安装助手
roslaunch moveit_setup_assistant setup_assistant.launch
单击“编辑现有MoveIt配置”,然后选择包含MoveIt包的文件夹。
添加新的计划组夹持器(带有夹持器的链接和接头)以及末端执行器。我的设置在下面的屏幕截图中。注意,您没有为夹具选择运动学求解器,这不是必需的。生成软件包并覆盖文件。
在catkin工作区中运行
catkin make
命令。
好吧,现在我们有了一条带有抓爪的手臂!
步骤2:构建手臂
正如我在提到Juergenlessner创建手臂3D模型之前提到的那样,感谢您所做的出色工作。如果您单击链接,则可以找到详细的组装说明。
我不得不修改控制系统。我使用带有传感器护罩的Arduino Uno来控制伺服器。传感器屏蔽层在简化布线方面有很大帮助,并且还易于为伺服器提供外部电源。我使用通过降压模块(6V)连接到Sensor Shield的12V 6A电源适配器。
关于伺服器的注释。我使用从淘宝购买的MG 996 HR伺服器,但是质量真的很差。绝对是便宜的中国仿冒品。用于肘关节的那个没有提供足够的扭矩,甚至在重载下也开始发烟。我不得不用质量更好的制造商的MG 946 HR替换肘关节伺服器。
长话短说-购买优质的伺服器。如果魔术烟雾从您的伺服器中冒出,请使用更好的伺服器。 6V是非常安全的电压,请不要增加它。不会增加扭矩,但会损坏伺服器。
伺服器接线如下:
基座2
shoulder2 4
shoulder1 3
肘部6
抓爪8
手腕11
随意更改它,只要您还记得要更改Arduino草图即可。
使用完硬件后,让我们看一看!
步骤3:MoveIt RobotCommander界面
那么,现在呢?为什么仍然需要MoveIt和ROS?是不是可以直接通过Arduino代码控制手臂?
是的。
好吧,现在如何使用GUI或Python/C ++代码提供机器人姿势至? Arduino可以做到吗?
排序。为此,您将需要编写一个反向运动学求解器,它将采用机器人姿势(3D空间中的平移和旋转坐标)并将其转换为伺服的关节角度消息。
尽管您可以自己做,但要做的工作却很艰巨。因此,MoveIt和ROS为IK(逆运动学)求解器提供了一个不错的接口,可以为您完成所有繁重的三角提升。
简短的回答:是的,您可以做一个简单的机械臂,它将执行一个硬编码的Arduino草图,从一个姿势变为另一个姿势。但是,如果您想使机器人更加智能并增加计算机视觉功能,则必须使用MoveIt和ROS。
我制作了一个非常简化的图表,说明MoveIt框架的工作原理。在我们的情况下,它将变得更加简单,因为我们没有来自伺服器的反馈,而是要使用/joint_states主题为机器人控制器提供伺服器的角度。我们只缺少一个组件,那就是机器人控制器。
我们还等什么呢?让我们写一些机器人控制器,以便我们的机器人可以……更加可控。
第4步:机器人控制器的Arduino代码
在我们的情况下,使用rosserial运行ROS节点的Arduino Uno将成为机器人控制器。 Arduino草图代码已附加到此步骤,也可以在GitHub上使用。从弧度到度,然后使用标准Servo.h库将其传递给舵机。
该解决方案有点笨拙,而不是工业机器人的解决方案。理想情况下,应该在/FollowJointState主题上发布运动轨迹,然后接收关于/JointState主题的反馈。但是在我们的手臂上,业余伺服器无法提供反馈,因此我们将直接订阅由FakeRobotController节点发布的/JointState主题。基本上,我们将假设传递给伺服器的任何角度都可以理想地执行。
http://wiki .ros.org/rosserial_arduino/Tutorials
将草图上传到Arduino Uno之后,您需要使用串行电缆将其连接到运行ROS安装的计算机。
要启动整个系统,请执行以下命令
roslaunch my_arm_xacro demo.launch rviz_tutorial:=true sudo chmod -R 777 /dev/ttyUSB0 rosrun rosserial_python serial_node.py _port:=/dev/ttyUSB0 _baud:=115200
现在,您可以在RVIZ中使用交互式标记将机器人手臂移动到一个姿势,然后按计划并执行,使其实际移至该位置。
魔术!
现在,我们可以编写用于斜坡测试的Python代码了。好吧,差不多。..
第5步:(可选)生成IKfast插件
默认情况下,MoveIt建议使用KDL运动学求解器,它不会少于6个自由度臂真的可以工作。如果您紧跟本教程,那么您会注意到RVIZ中的手臂模型无法达到某些手臂配置应支持的姿势。
推荐的解决方案是使用OpenRave创建自定义运动学求解器。并不是那么困难,但是您必须构建它,并且它是来自源的依赖项,或者使用docker容器(无论您喜欢哪个)。
该过程在本教程中有很好的记录。确认可以在运行Ubuntu 16.04和ROS Kinetic的VM上运行。
我使用以下命令生成了求解器
openrave.py --database inversekinematics --robot=arm.xml --iktype=translation3d --iktests=1000
然后运行
rosrun moveit_kinematics create_ikfast_moveit_plugin.py test_robot arm my_arm_xacro ikfast0x1000004a.Translation3D.0_1_2_f3.cpp
生成MoveIt IKfast插件。
整个过程比较耗时,但是如果您仔细阅读本教程,并不是很困难。如果您对此部分有疑问,请在评论或PM中与我联系。
第6步:斜坡测试!
现在我们可以尝试进行渐变测试了,我们将使用ROS MoveIt Python API执行该测试。
该步骤附带了Python代码,该代码也可以在github存储库中找到。如果您没有坡道或想尝试其他测试,则需要在代码中更改机器人的姿势。为此,在已经运行RVIZ和MoveIt的情况下,首先在终端中执行
rostopic echo /rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/feedback
。然后将带有交互式标记的机器人移动到所需位置。位置和方向值将显示在终端中。只需将它们复制到Python代码即可。
要在运行RVIZ和rosserial节点的情况下执行
rosrun my_arm_xacro pick/pick_2.py
进行斜坡测试。
责任编辑:wv
-
控制器
+关注
关注
112文章
16316浏览量
177788 -
机器人
+关注
关注
211文章
28373浏览量
206893
发布评论请先 登录
相关推荐
评论