步驟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文章
16437瀏覽量
178988 -
機器人
+關注
關注
211文章
28620瀏覽量
207932
發布評論請先 登錄
相關推薦
評論