步驟1:添加抓取器
一開始添加抓手有點(diǎn)讓人困惑,所以我在上一篇文章中跳過了這一部分。事實(shí)證明,這畢竟不是那么困難。
您將需要修改URDF文件以添加抓手鏈接和關(guān)節(jié)。
為我的機(jī)器人修改的URDF文件已附加到此步驟。基本上,它遵循與手臂零件相同的邏輯,我只添加了三個(gè)新鏈接(claw_base,claw_r和claw_l)和三個(gè)新關(guān)節(jié)(joint5是固定的,joint6,joint7是旋轉(zhuǎn)關(guān)節(jié))。
修改URDF文件后,還需要使用MoveIt安裝助手來更新MoveIt生成的軟件包和xacro文件。
使用以下命令啟動(dòng)安裝助手
roslaunch moveit_setup_assistant setup_assistant.launch
單擊“編輯現(xiàn)有MoveIt配置”,然后選擇包含MoveIt包的文件夾。
添加新的計(jì)劃組夾持器(帶有夾持器的鏈接和接頭)以及末端執(zhí)行器。我的設(shè)置在下面的屏幕截圖中。注意,您沒有為夾具選擇運(yùn)動(dòng)學(xué)求解器,這不是必需的。生成軟件包并覆蓋文件。
在catkin工作區(qū)中運(yùn)行
catkin make
命令。
好吧,現(xiàn)在我們有了一條帶有抓爪的手臂!
步驟2:構(gòu)建手臂
正如我在提到Juergenlessner創(chuàng)建手臂3D模型之前提到的那樣,感謝您所做的出色工作。如果您單擊鏈接,則可以找到詳細(xì)的組裝說明。
我不得不修改控制系統(tǒng)。我使用帶有傳感器護(hù)罩的Arduino Uno來控制伺服器。傳感器屏蔽層在簡化布線方面有很大幫助,并且還易于為伺服器提供外部電源。我使用通過降壓模塊(6V)連接到Sensor Shield的12V 6A電源適配器。
關(guān)于伺服器的注釋。我使用從淘寶購買的MG 996 HR伺服器,但是質(zhì)量真的很差。絕對(duì)是便宜的中國仿冒品。用于肘關(guān)節(jié)的那個(gè)沒有提供足夠的扭矩,甚至在重載下也開始發(fā)煙。我不得不用質(zhì)量更好的制造商的MG 946 HR替換肘關(guān)節(jié)伺服器。
長話短說-購買優(yōu)質(zhì)的伺服器。如果魔術(shù)煙霧從您的伺服器中冒出,請使用更好的伺服器。 6V是非常安全的電壓,請不要增加它。不會(huì)增加扭矩,但會(huì)損壞伺服器。
伺服器接線如下:
基座2
shoulder2 4
shoulder1 3
肘部6
抓爪8
手腕11
隨意更改它,只要您還記得要更改Arduino草圖即可。
使用完硬件后,讓我們看一看!
步驟3:MoveIt RobotCommander界面
那么,現(xiàn)在呢?為什么仍然需要MoveIt和ROS?是不是可以直接通過Arduino代碼控制手臂?
是的。
好吧,現(xiàn)在如何使用GUI或Python/C ++代碼提供機(jī)器人姿勢至? Arduino可以做到嗎?
排序。為此,您將需要編寫一個(gè)反向運(yùn)動(dòng)學(xué)求解器,它將采用機(jī)器人姿勢(3D空間中的平移和旋轉(zhuǎn)坐標(biāo))并將其轉(zhuǎn)換為伺服的關(guān)節(jié)角度消息。
盡管您可以自己做,但要做的工作卻很艱巨。因此,MoveIt和ROS為IK(逆運(yùn)動(dòng)學(xué))求解器提供了一個(gè)不錯(cuò)的接口,可以為您完成所有繁重的三角提升。
簡短的回答:是的,您可以做一個(gè)簡單的機(jī)械臂,它將執(zhí)行一個(gè)硬編碼的Arduino草圖,從一個(gè)姿勢變?yōu)榱硪粋€(gè)姿勢。但是,如果您想使機(jī)器人更加智能并增加計(jì)算機(jī)視覺功能,則必須使用MoveIt和ROS。
我制作了一個(gè)非常簡化的圖表,說明MoveIt框架的工作原理。在我們的情況下,它將變得更加簡單,因?yàn)槲覀儧]有來自伺服器的反饋,而是要使用/joint_states主題為機(jī)器人控制器提供伺服器的角度。我們只缺少一個(gè)組件,那就是機(jī)器人控制器。
我們還等什么呢?讓我們寫一些機(jī)器人控制器,以便我們的機(jī)器人可以……更加可控。
第4步:機(jī)器人控制器的Arduino代碼
在我們的情況下,使用rosserial運(yùn)行ROS節(jié)點(diǎn)的Arduino Uno將成為機(jī)器人控制器。 Arduino草圖代碼已附加到此步驟,也可以在GitHub上使用。從弧度到度,然后使用標(biāo)準(zhǔn)Servo.h庫將其傳遞給舵機(jī)。
該解決方案有點(diǎn)笨拙,而不是工業(yè)機(jī)器人的解決方案。理想情況下,應(yīng)該在/FollowJointState主題上發(fā)布運(yùn)動(dòng)軌跡,然后接收關(guān)于/JointState主題的反饋。但是在我們的手臂上,業(yè)余伺服器無法提供反饋,因此我們將直接訂閱由FakeRobotController節(jié)點(diǎn)發(fā)布的/JointState主題。基本上,我們將假設(shè)傳遞給伺服器的任何角度都可以理想地執(zhí)行。
有關(guān)rosserial如何工作的更多信息,請查閱以下教程
http://wiki .ros.org/rosserial_arduino/Tutorials
將草圖上傳到Arduino Uno之后,您需要使用串行電纜將其連接到運(yùn)行ROS安裝的計(jì)算機(jī)。
要啟動(dòng)整個(gè)系統(tǒng),請執(zhí)行以下命令
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
現(xiàn)在,您可以在RVIZ中使用交互式標(biāo)記將機(jī)器人手臂移動(dòng)到一個(gè)姿勢,然后按計(jì)劃并執(zhí)行,使其實(shí)際移至該位置。
魔術(shù)!
現(xiàn)在,我們可以編寫用于斜坡測試的Python代碼了。好吧,差不多。..
第5步:(可選)生成IKfast插件
默認(rèn)情況下,MoveIt建議使用KDL運(yùn)動(dòng)學(xué)求解器,它不會(huì)少于6個(gè)自由度臂真的可以工作。如果您緊跟本教程,那么您會(huì)注意到RVIZ中的手臂模型無法達(dá)到某些手臂配置應(yīng)支持的姿勢。
推薦的解決方案是使用OpenRave創(chuàng)建自定義運(yùn)動(dòng)學(xué)求解器。并不是那么困難,但是您必須構(gòu)建它,并且它是來自源的依賴項(xiàng),或者使用docker容器(無論您喜歡哪個(gè))。
該過程在本教程中有很好的記錄。確認(rèn)可以在運(yùn)行Ubuntu 16.04和ROS Kinetic的VM上運(yùn)行。
我使用以下命令生成了求解器
openrave.py --database inversekinematics --robot=arm.xml --iktype=translation3d --iktests=1000
然后運(yùn)行
rosrun moveit_kinematics create_ikfast_moveit_plugin.py test_robot arm my_arm_xacro ikfast0x1000004a.Translation3D.0_1_2_f3.cpp
生成MoveIt IKfast插件。
整個(gè)過程比較耗時(shí),但是如果您仔細(xì)閱讀本教程,并不是很困難。如果您對(duì)此部分有疑問,請?jiān)谠u(píng)論或PM中與我聯(lián)系。
第6步:斜坡測試!
現(xiàn)在我們可以嘗試進(jìn)行漸變測試了,我們將使用ROS MoveIt Python API執(zhí)行該測試。
該步驟附帶了Python代碼,該代碼也可以在github存儲(chǔ)庫中找到。如果您沒有坡道或想嘗試其他測試,則需要在代碼中更改機(jī)器人的姿勢。為此,在已經(jīng)運(yùn)行RVIZ和MoveIt的情況下,首先在終端中執(zhí)行
rostopic echo /rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/feedback
。然后將帶有交互式標(biāo)記的機(jī)器人移動(dòng)到所需位置。位置和方向值將顯示在終端中。只需將它們復(fù)制到Python代碼即可。
要在運(yùn)行RVIZ和rosserial節(jié)點(diǎn)的情況下執(zhí)行
rosrun my_arm_xacro pick/pick_2.py
進(jìn)行斜坡測試。
責(zé)任編輯:wv
-
控制器
+關(guān)注
關(guān)注
112文章
16412瀏覽量
178733 -
機(jī)器人
+關(guān)注
關(guān)注
211文章
28557瀏覽量
207662
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
評(píng)論