Мазмуну:

ROS MoveIt Robotic Arm 2 -бөлүк: Роботту башкаруучу: 6 кадам
ROS MoveIt Robotic Arm 2 -бөлүк: Роботту башкаруучу: 6 кадам

Video: ROS MoveIt Robotic Arm 2 -бөлүк: Роботту башкаруучу: 6 кадам

Video: ROS MoveIt Robotic Arm 2 -бөлүк: Роботту башкаруучу: 6 кадам
Video: Загадка Титаника : Как они могли не заметить айсберг?! Самая подробная история! 2024, Ноябрь
Anonim
Image
Image

github.com/AIWintermuteAI/ros-moveit-arm.git

Макаланын мурунку бөлүгүндө биз робот колубуз үчүн URDF жана XACRO файлдарын түзүп, симуляцияланган чөйрөдө робот колубузду башкаруу үчүн RVIZди ишке киргиздик.

Бул жолу биз чыныгы робот колу менен жасайбыз! Биз туткунду кошобуз, робот контроллерин жазабыз жана (милдеттүү эмес) IKfast тескери кинематика чечүүчүсүн жаратабыз.

Geronimo!

1 -кадам: Gripper кошуу

Gripper кошуу
Gripper кошуу
Gripper кошуу
Gripper кошуу
Gripper кошуу
Gripper кошуу

Gripper кошуу башында бир аз түшүнүксүз болуп калды, ошондуктан мен мурунку макалада бул бөлүктү өткөрүп жибердим. Акыры анчалык деле кыйын эмес болуп чыкты.

Тутум шилтемелерин жана муундарды кошуу үчүн URDF файлыңызды өзгөртүүңүз керек болот.

Менин роботум үчүн өзгөртүлгөн URDF файлы бул кадамга тиркелет. Негизинен бул колтук логикасына ылайык келет, мен жөн эле үч жаңы шилтемени (claw_base, claw_r жана claw_l) жана үч жаңы муунду коштум (joint5 бекитилген, жана joint6, joint7 - революциялык муундар).

URDF файлыңызды өзгөрткөндөн кийин MoveIt түзүлгөн пакетин жана xacro файлын MoveIt орнотуу жардамчысы аркылуу жаңыртууңуз керек болот.

Төмөнкү буйрук менен орнотуу жардамчысын иштетиңиз

roslaunch moveit_setup_assistant setup_assistant.launch

Мурунку MoveIt конфигурациясын түзөтүүнү чыкылдатыңыз жана MoveIt пакетиңиз бар папканы тандаңыз.

Жаңы пландаштыруу тобунун туткасын кошуңуз (туткунун шилтемелери жана муундары менен), ошондой эле акыркы эффектор. Менин орнотууларым төмөндөгү скриншоттордо. Байкаңыз, сиз кинематиканы чечүүчү каражатты тандабайсыз, бул керек эмес. Топтомду түзүңүз жана файлдарды кайра жазыңыз.

Run

мышык жасоо

catkin жумушчу мейкиндигиңизде буйрук бериңиз.

Макул, азыр бизде кармагычы бар колубуз бар!

2 -кадам: Кол куруу

Кол куруу
Кол куруу
Кол куруу
Кол куруу
Кол куруу
Кол куруу
Кол куруу
Кол куруу

Кол 3D модели Юргенлеснер тарабынан жасалганынан мурун айтканымдай, укмуштуудай чыгарма үчүн рахмат. Эгерде сиз шилтемени карасаңыз, деталдуу чогултуу көрсөтмөлөрүн таба аласыз.

Бирок башкаруу системасын өзгөртүүгө туура келди. Мен Servo көзөмөлдөө үчүн Sensor калканч менен Arduino Uno колдоном. Сенсордук калкан зымдарды жөнөкөйлөтүүгө чоң жардам берет, ошондой эле сервоприёмниктерге тышкы кубат берүүнү жеңилдетет. Мен Sensor Shield үчүн басаңдатуучу модуль (6V) аркылуу өткөрүлгөн 12V 6A күч адаптерин колдоном.

Серво жөнүндө эскертүү. Мен Taobaoдон сатып алынган MG 996 HR сервосун колдоном, бирок сапаты чындыгында начар. Бул, албетте, арзан кытайлык нокаут. Чыканак муун үчүн жетиштүү моментти берген эмес, ал тургай, оор жүк астында бир жолу түтөп баштады. Мен чыканак муунунун сервосун жакшыраак сапаттагы өндүрүүчүнүн MG 946 HR менен алмаштырууга туура келди.

Кыскача айтканда - сапаттуу серволорду сатып алыңыз. Эгерде сыйкырдуу түтүн сиздин серволордон чыкса, жакшыраак серволорду колдонуңуз. 6V - бул абдан коопсуз чыңалуу, аны жогорулатпаңыз. Бул моментти көбөйтпөйт, бирок серволорду бузушу мүмкүн.

Серволордун зымдары төмөнкүчө:

база 2

плеч2 4 ийин1 3

чыканак 6

кармагыч 8

билек 11

Ардуинонун эскизин өзгөртүүнү унутпаганыңызда, аны өзгөртө аласыз.

Аппаратура менен бүткөндөн кийин, чоңураак сүрөттү карап көрөлү!

3 -кадам: MoveIt RobotCommander Interface

MoveIt RobotCommander Interface
MoveIt RobotCommander Interface

Эми, эмне? Эмнеге баары бир MoveIt жана ROS керек? Колуңузду Arduino коду аркылуу башкара албайсызбы?

Ооба сиз кыла аласыз.

Макул, эми GUI же Python/C ++ кодун роботтун позасына баруу үчүн кантип колдонсо болот? Ардуино муну кыла алабы?

Сыяктуу. Бул үчүн роботтун позасын (3D мейкиндигиндеги которуу жана айлануу координаттары) алып, аны сервос үчүн биргелешкен бурчтуу билдирүүлөргө айландыра турган тескери кинематика чечүүчүсүн жазышыңыз керек болот.

Муну өзүңүз жасай алсаңыз да, бул көп жумуш. Ошентип, MoveIt жана ROS сиз үчүн оор тригонометриялык көтөрүүнү жасоо үчүн IK (тескери кинематика) чечүүчүсү үчүн жакшы интерфейсти камсыз кылат.

Кыска жооп: Ооба, сиз бир позадан экинчисине өтүү үчүн катуу коддуу Arduino эскизин аткара турган жөнөкөй робот колун жасай аласыз. Бирок, эгер сиз роботту акылдуу кылып, компьютердин көрүү жөндөмүн кошкуңуз келсе, MoveIt жана ROS - бул эң туура жол.

Мен MoveIt алкагынын кантип иштээрин түшүндүргөн абдан жөнөкөйлөтүлгөн диаграмма түздүм. Биздин учурда, бул дагы жөнөкөй болуп калат, анткени бизде биздин серволордон эч кандай пикир жок жана робот контроллерди servo үчүн бурчтар менен камсыз кылуу үчүн /joint_states темасын колдонобуз. Бизде робот контроллери болгон бир гана компонент жок.

Биз эмнени күтүп жатабыз? Келгиле, кээ бир робот контроллерлерин жазалы, ошондо биздин робот… билесизби, дагы башкарылмак.

4 -кадам: Arduino робот көзөмөлдөөчү коду

Ардуино коду робот контроллери үчүн
Ардуино коду робот контроллери үчүн
Ардуино коду робот контроллери үчүн
Ардуино коду робот контроллери үчүн
Ардуино коду робот контроллери үчүн
Ардуино коду робот контроллери үчүн

Биздин учурда, Arduino Uno rosserial менен ROS түйүнүн иштетип, робот контроллери болот. Arduino эскиз коду бул кадамга тиркелет жана GitHubда да жеткиликтүү.

Arduino Uno менен иштеген ROS түйүнү негизинен MoveIt иштеп жаткан компьютерде жарыяланган /JointState темасына жазылат, андан кийин массивдеги биргелешкен бурчтарды радиандардан градуска чейин өзгөртөт жана аларды Servo.h стандарттык китепканасынын жардамы менен сервоско өткөрөт.

Бул чечим бир аз катаал жана ал өнөр жай роботтору менен кандай жасалат. Идеалында, сиз /FollowJointState темасында кыймылдын траекториясын жарыялап, анан /JointState темасы боюнча пикирлерди алышыңыз керек. Бирок биздин колубузда хобби сервосу кайтарым байланышты бере албайт, ошондуктан биз FakeRobotController түйүнү тарабынан чыгарылган /JointState темасына түздөн -түз жазылабыз. Негизинен, биз servosко өткөн бардык бурчтар идеалдуу түрдө аткарылган деп ойлоп калабыз.

Rosserialдин кантип иштээри жөнүндө көбүрөөк маалымат алуу үчүн, төмөнкү окуу куралдарына кайрылсаңыз болот

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деги интерактивдүү маркерлерди колдонуп, роботтун колун бир позага жылдырсаңыз болот, андан кийин бул планга өтүү үчүн План жана Аткаруу баскычын басыңыз.

Magic!

Эми биз пандус тестибиз үчүн Python кодун жазууга даярбыз. Ооба, дээрлик…

5-кадам: (Милдеттүү эмес) IKfast плагинин түзүү

Демейки боюнча MoveIt KDL кинематикалык чечүүчүсүн колдонууну сунуштайт, ал 6 DOFтан аз курал менен иштебейт. Эгер сиз бул үйрөткүчтү кылдат аткарсаңыз, анда RVIZдеги кол модели кол конфигурациясы тарабынан колдоого алынган кээ бир позаларга бара албасын байкайсыз.

Сунушталган чечим - OpenRaveдин жардамы менен бажы кинематикасын чечүүчү түзүү. Бул анча деле кыйын эмес, бирок аны курууга туура келет жана бул булактан көз карандылыкты же доккер контейнерди колдонууну каалайт.

Процедура бул окуу куралында абдан жакшы документтештирилген. Ubuntu 16.04 жана ROS Kinetic иштеп жаткан VMде иштөө ырасталды.

Чечүүчү чыгарыш үчүн мен төмөнкү буйрукту колдондум

openrave.py --маалыматтар базасы инверсекинематикасы --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 -кадам: Рампа тести

Ramp Test!
Ramp Test!
Ramp Test!
Ramp Test!

Эми биз ROS MoveIt Python API менен аткара турган пандус тестин сынап көрүүгө даярбыз.

Python коду бул кадамга тиркелет жана github репозиторийинде да бар. Эгерде сизде пандус жок болсо же башка тестти сынап көргүңүз келсе, анда роботтун коддогу позаларын өзгөртүү керек болот. Ал үчүн биринчи аткарыңыз

rostopic echo/rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/feedback

RVIZ жана MoveIt иштеп жатканда терминалда. Андан кийин интерактивдүү маркерлери бар роботту каалаган позицияга жылдырыңыз. Терминалда позиция жана багыт баалуулуктары көрсөтүлөт. Аларды Python кодуна көчүрүңүз.

Рампанын сыноо ишин аткаруу үчүн

rosrun my_arm_xacro pick/pick_2.py

RVIZ жана rosserial түйүнү мурунтан эле иштеп жатат.

Макаланын үчүнчү бөлүгүн байкап туруңуз, анда мен объекттерди аныктоо үчүн стерео камераны колдоном жана жөнөкөй объектилер үчүн тандоо жана жайгаштыруу түтүгүн аткарам!

Сунушталууда: