Obsah:
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
github.com/AIWintermuteAI/ros-moveit-arm.git
V předchozí části článku jsme pro naši robotickou ruku vytvořili soubory URDF a XACRO a spustili RVIZ pro ovládání naší robotické paže v simulovaném prostředí.
Tentokrát to zvládneme se skutečnou robotickou rukou! Přidáme chapadlo, napíšeme robotický ovladač a (volitelně) vygenerujeme řešič inverzní kinematiky IKfast.
Geronimo!
Krok 1: Přidání chapadla
Přidání chapadla bylo zpočátku trochu matoucí, takže jsem tuto část v předchozím článku přeskočil. Nakonec se ukázalo, že to není tak obtížné.
Budete muset upravit svůj soubor URDF, abyste přidali odkazy a spoje chapadla.
K tomuto kroku je připojen upravený soubor URDF pro mého robota. V zásadě se řídí stejnou logikou jako ramenní část, jen jsem přidal tři nové články (claw_base, claw_r a claw_l) a tři nové klouby (joint5 je pevný a joint6, joint7 jsou otočné klouby).
Poté, co upravíte soubor URDF, budete také muset aktualizovat generovaný balíček MoveIt a soubor xacro pomocí asistenta nastavení MoveIt.
Spusťte průvodce nastavením pomocí následujícího příkazu
roslaunch moveit_setup_assistant setup_assistant.launch
Klikněte na Upravit stávající konfiguraci MoveIt a vyberte složku s balíčkem MoveIt.
Přidejte nový plánovací skupinový chapač (s články a klouby pro chapadlo) a také koncový efektor. Moje nastavení je na níže uvedených screenshotech. Všimněte si, že pro chapadlo nevybíráte kinematický řešič, není to nutné. Vygenerujte balíček a přepište soubory.
Běh
jehněčí značka
ve svém pracovním prostoru Catkin.
Dobře, teď máme paži s chapadlem!
Krok 2: Budování paže
Jak jsem již zmínil, ramenní 3D model vyrábí společnost Juergenlessner, děkuji za úžasnou práci. Podrobný montážní návod najdete po kliknutí na odkaz.
Musel jsem však upravit řídicí systém. Pro ovládání serv používám Arduino Uno se senzorovým štítem. Senzorový štít hodně pomáhá se zjednodušením zapojení a také usnadňuje poskytování externího napájení servům. Používám napájecí adaptér 12 V 6 A zapojený přes sestupný modul (6 V) do štítového štítu.
Poznámka k servům. Používám serva MG 996 HR zakoupená od Taobao, ale kvalita je opravdu špatná. Je to rozhodně levný čínský knock-off. Ten pro loketní kloub neposkytoval dostatečný točivý moment a dokonce začal při velkém zatížení dýmat. Servo loketního kloubu jsem musel vyměnit za kvalitnější výrobce MG 946 HR.
Krátký příběh - kupte si kvalitní serva. Pokud z vašich serv vychází kouřový kouř, použijte lepší serva. 6V je velmi bezpečné napětí, nezvyšujte jej. Nezvýší točivý moment, ale může poškodit serva.
Zapojení serva následovně:
základna 2
rameno 2 4 ramena 1 3
loket 6
chapadlo 8
zápěstí 11
Nebojte se jej změnit, pokud si také pamatujete změnu náčrtu Arduino.
Poté, co skončíte s hardwarem, podívejme se na celkový obrázek!
Krok 3: Rozhraní MoveIt RobotCommander
Takže, co teď? Proč vůbec potřebujete MoveIt a ROS? Nemůžete jednoduše ovládat rameno přímo pomocí kódu Arduino?
Ano můžeš.
Dobře, co teď použít GUI nebo kód Pythonu/C ++ k poskytnutí pozice robota? Může to Arduino udělat?
Tak nějak. K tomu budete muset napsat inverzní kinematický řešič, který zaujme pozici robota (souřadnice translace a rotace v 3D prostoru) a převede ji na zprávy o úhlu kloubu pro serva.
Přestože to můžete udělat sami, je to sakra spousta práce. MoveIt a ROS tedy poskytují příjemné rozhraní pro řešiče IK (inverzní kinematika), které za vás provedou všechny těžké trigonometrické zvedání.
Krátká odpověď: Ano, můžete udělat jednoduchou robotickou ruku, která provede naprogramovaný skica Arduina a přejde z jedné pozice do druhé. Ale pokud chcete, aby byl váš robot inteligentnější a přidal možnosti počítačového vidění, MoveIt a ROS je tou správnou cestou.
Vytvořil jsem velmi zjednodušený diagram vysvětlující, jak framework MoveIt funguje. V našem případě to bude ještě jednodušší, protože nemáme zpětnou vazbu od našich serva a použijeme téma /joint_states, abychom poskytli ovladači robota úhly pro serva. Chybí nám pouze jedna součást, kterou je ovladač robota.
Na co čekáme? Pojďme napsat nějaké ovladače robotů, aby náš robot byl … víte, lépe ovladatelný.
Krok 4: Arduino kód pro ovladač robota
V našem případě bude ovladačem robota Arduino Uno provozující uzel ROS s rosserialem. K tomuto kroku je připojen kód skici Arduino a je také k dispozici na GitHubu.
Uzel ROS běžící na Arduino Uno se v zásadě přihlásí k tématu /JointState publikovaném na počítači se systémem MoveIt a poté převede úhly spojů z pole z radiánů na stupně a předá je servům pomocí standardní knihovny Servo.h.
Toto řešení je trochu hacknuté, a ne jak se to dělá s průmyslovými roboty. V ideálním případě byste měli publikovat trajektorii pohybu na téma /FollowJointState a poté získat zpětnou vazbu na téma /JointState. Ale v naší paži hobby servo nemůže poskytnout zpětnou vazbu, takže se přímo přihlásíme k odběru /JointState tématu, publikovaného uzlem FakeRobotController. V zásadě budeme předpokládat, že jakékoli úhly, které jsme předali servům, jsou provedeny ideálně.
Další informace o tom, jak rosserial funguje, naleznete v následujících tutoriálech
wiki.ros.org/rosserial_arduino/Návody
Poté, co načtete skicu do Arduino Uno, budete ji muset připojit pomocí sériového kabelu k počítači, na kterém běží instalace ROS.
Chcete -li vyvolat celý systém, spusťte následující příkazy
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
Nyní můžete pomocí interaktivních značek v RVIZ přesunout rameno robota do pozice a poté stisknout Plan a Execute, aby se skutečně přesunulo do pozice.
Kouzlo!
Nyní jsme připraveni napsat kód Pythonu pro náš test rampy. No, téměř…
Krok 5: (Volitelné) Generování modulu IKfast Plug-in
Ve výchozím nastavení MoveIt navrhuje použít kinematický řešič KDL, který ve skutečnosti nefunguje s méně než 6 rameny DOF. Pokud budete tento návod pozorně sledovat, pak si všimnete, že model ramene v RVIZ nemůže přejít do některých pozic, které by měla konfigurace ramene podporovat.
Doporučeným řešením je vytvořit vlastní řešení kinematiky pomocí OpenRave. Není to tak obtížné, ale budete to muset postavit a je to závislost ze zdroje nebo použít kontejner dockeru, podle toho, co dáváte přednost.
Postup je v tomto tutoriálu velmi dobře zdokumentován. Je potvrzeno, že funguje na VM se systémem Ubuntu 16.04 a ROS Kinetic.
K vygenerování řešiče jsem použil následující příkaz
openrave.py --database inversekinematics --robot = arm.xml --iktype = translation3d --iktests = 1000
a pak běžel
rosrun moveit_kinematics create_ikfast_moveit_plugin.py test_robot arm my_arm_xacro ikfast0x1000004a. Translation3D.0_1_2_f3.cpp
ke generování modulu MoveIt IKfast.
Celá procedura je trochu časově náročná, ale není příliš náročná, pokud budete pečlivě sledovat tutoriál. Pokud máte dotazy k této části, kontaktujte mě v komentářích nebo PM.
Krok 6: Test rampy
Nyní jsme připraveni vyzkoušet rampový test, který provedeme pomocí ROS MoveIt Python API.
K tomuto kroku je připojen kód Pythonu a je také k dispozici v úložišti github. Pokud nemáte rampu nebo chcete vyzkoušet jiný test, budete muset změnit pozice robota v kódu. K tomu prvnímu spuštění
rostopic echo/rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/feedback
v terminálu, když již běží RVIZ a MoveIt. Poté přesuňte robota s interaktivními značkami do požadované polohy. V terminálu se zobrazí hodnoty polohy a orientace. Stačí je zkopírovat do kódu Pythonu.
Proveďte testovací běh rampy
rosrun my_arm_xacro pick/pick_2.py
s RVIZ a rosserial uzlem již běží.
Zůstaňte naladěni na třetí část článku, kde použiji stereokameru pro detekci objektů a pro jednoduché objekty vyberu a umístím potrubí!