في هذه الصفحة
إعداد ذراع روبوت Lwa4p
خلال تجاربي مع ذراع روبوت Powerball Lightweight lwa4p من Schunk، واجهت صعوبات كثيرة لتحريكها باستخدام moveit. في هذه المقالة أشارك هذه التجربة.
جمعت جميع الخطوات اللازمة في نص bash، وسأشرح هنا بالتفصيل العملية التي اتبعتها.
اختيار بطاقة/محرك CAN
بما أن ذراع روبوت lwa4p تستخدم بروتولول اتصال CAN-bus، يلزم وجود بطاقة CAN للتواصل مع الذراع. في مشروع آخر، استخدم Bryant Pong بطاقة Peak PCAN من Peak غير المتاحة لي، ووفقاً لـ صفحة الويكي لواجهة socketcan، يمكنني أيضاً استخدام بطاقات CAN esd مع محرك النواة، وهو ما فعلته.
اختيار إصدار البرنامج
أولاً، كان يجب اختيار نظام التشغيل سأعمل عليه. المشروع الآخر يستخدم ros-hydro، الذي يدعم فقط Precise و Quantal و Raring لحزم debian كما هو مذكور في صفحة الويكي. فكانت الفكرة الأولى هي تطبيق نهج مشابه للمشروع المذكور. بالطبع، التعامل مع البرامج القديمة يجلب الكثير من المشاكل، مثل الحاجة لتثبيت بعض الحزم من المصادر لأنها غير مدعومة في مستودعات البرنامج الرئيسية، وسيكون عليك التعامل مع التبعيات.
باختصار، لم ينجح الأمر. فتواصلت مع أحد مؤلفي ipa320/ipa_canopen، السيد Mathias Luedtke @ipa-mdl، الذي أبدى لطفاً وأعطاني بعض الإرشادات المفيدة.
تم اقتراح استخدام ros-industrial/ros_canopen لأنه يدعم ros-indigo على Ubuntu-14.04. فانتهى الأمر بالتكوين التالي:
- Ubuntu-14.04-64bit
- ROS-Indigo (أحدث تحديث)
- Socketcan (بطاقة ESD CAN (PLX90xx)، محرك النواة sja1000)
- وحدة أ shell Bash.
تثبيت حزم ROS
لتثبيت ROS، اتبعت تعليمات التثبيت المذكورة في صفحة الويكي.
- كمسؤول أو مستخدم sudo، أضف مستودعات ROS إلى قائمة المصادر واستورد المفتاح المناسب:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net --recv-key 0xB01FA116
- حدّث ذاكرة التخزين المؤقت للحزم في النظام:
sudo apt-get update
- ثبّت ROS Desktop:
sudo apt-get install -y ros-indigo-desktop
- ثبّت الحزم التكميلية الأخرى:
sudo apt-get install -y git ros-indigo-libntcan ros-indigo-libpcan \
ros-indigo-controller-manager ros-indigo-controller-manager-msgs \
ros-indigo-joint-limits-interface ros-indigo-cob-srvs \
ros-indigo-cob-control-mode-adapter ros-indigo-cob-dashboard \
ros-indigo-cob-command-gui libmuparser-dev python-rosinstall \
python-wstool
تهيئة rosdep
يتيح لك rosdep تثبيت تبعيات النظام بسهولة للمصدر الذي تريد تجميعه وهو مطلوب لتشغيل بعض المكونات الأساسية في ROS.
لتهيئته:
sudo rosdep init
rosdep update
لاحظ أن الأمر الثاني يجب تشغيله كمستخدم عادي.
إعداد البيئة
لتشغيل أي أمر ROS، يجب أن متغيرات البيئة ROS متاحة، ويمكن فعل ذلك بتحميل ملفات محددة:
echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
source ~/.bashrc
احرص على تحميل ملف الإعداد هذا في كل طرفية تستخدمها لـ ROS، وإذا كنت تستخدم screen أو tmux، تأكد من أن كل جزء تفتحه يحمل ملف الإعداد، وإلا قد تحصل على أخطاء غير متوقعة.
مساحة عمل Catkin
- أنشئ دليلاً لمساحة عمل Catkin. عادة أسميه
catkin_wsوأضعه في دليل home الخاص بي:
mkdir -p $HOME/catkin_ws/src
cd $HOME/catkin_ws/src
catkin_init_workspace
- استنسخ الحزم المطلوبة من GitHub:
git clone https://github.com/ammarnajjar/ros_canopen.git -b no-lost-arbitration-handling
git clone https://github.com/ipa320/schunk_robots.git -b indigo_dev
cd ..
لاحظ أنني عملت fork لـ ros-industrial/ros_canopen الأصلي وطبّقت عليه رقعة، لأنني كنت أحصل باستمرار على الخطأ internal_error: 2 (lost arbitration;) عند محاولة تهيئة ذراع الروبوت. إذا كنت فضولياً، اطلع على السجلات الكاملة للخطأ المذكور.
الرقعة معروضة هنا لإظهار أين علّقت التعامل مع ذلك الخطأ. افعل هذا فقط إذا كان ضرورياً وكملاذ أخير.
- ثبّت تبعيات تلك الحزم باستخدام:
rosdep install --from-paths src --ignore-src --rosdistro indigo -y
- ابنِ مساحة عمل Catkin:
catkin_make
echo "source $HOME/catkin_ws/devel/setup.bash" >> $HOME/.bashrc
source $HOME/catkin_ws/devel/setup.bash
واجهة CAN
جاء إعداد واجهة CAN بشكل صحيح بعد بعض الأبحاث حول ros/socket_interface وبعض التعليمات المذكورة في Bug #59 المفتوح من ipa320/schunk_robots.
أنا أوصل ذراع الروبوت بـ can0 فيمكن تلخيص الخطوات كالتالي:
- اضبط سرعة البت على 500k. يجب أن يتم هذا أثناء تعطيل الواجهة، ف تعطّلها أولاً، ثم اضبط قيمة سرعة البت، ثم قم بتشغيلها مرة أخرى:
sudo ip link set dev can0 down
sudo ip link set can0 type can bitrate 500000
sudo ip link set dev can0 up
- اضبط طول طابور الإرسال بين 15 و 20:
sudo ifconfig can0 txqueuelen 20
لاحظ أن حزمة schunk_robots تستخدم can0 افتراضياً، فإذا كنت تستخدم واجهة مختلفة مثل can1 أو can2، تأكد من تعديل ملف الإعداد lwa4p.yml في حزمة schunk_robots الخاصة بك لاستخدام واجهة CAN المناسبة.
MoveIt
لاستخدام moveit، اتبعت الخطوات المذكورة في التوثيق. اخترت أن تكون مساحة عمل Catkin في دليل home الخاص بي:
mkdir -p $HOME/moveit/src
cd $HOME/moveit/src
wstool init .
wstool merge https://raw.github.com/ros-planning/moveit_docs/indigo-devel/moveit.rosinstall
wstool update
cd ..
rosdep install --from-paths src --ignore-src --rosdistro indigo -y
catkin_make
echo "source $HOME/moveit/devel/setup.bash" >> $HOME/.bashrc
source $HOME/moveit/devel/setup.bash
في الوقت الذي كنت أستخدم فيه moveit، واجهت بعض أخطاء التجميع، لكنني اكتشفت المشكلة وقدمت طلب سحب بحل مقترح، وتم دمجه بسرعة في فرع indigo-devel من ros-planning/moveit-ros، وتم حل المشكلة.
بعد اكتمال التثبيت، استخدمت مساعد إعداد MoveIt لإنشاء تكوينات moveit. لقد فعلت ذلك بالفعل ووضعته على GitHub، مع جميع تعديلاته.
إذا كنت لا تريد فعل ذلك بنفسك، اذهب إلى دليل src الخاص بك في مساحة عمل catkin واستنسخه:
git clone https://github.com/ammarnajjar/lwa4p_moveit_config.git
ثم أعد البناء لتتمكن من استخدامه.
تهيئة ذراع الروبوت
لتهيئة ذراع الروبوت، أشغّل الكنترولر أولاً
roslaunch schunk_lwa4p robot.launch
ثم أناديخدمة init:
rosservice call /arm/driver/init
يجب أن ينتج هذا المخرجات التالية:
success: True
message: ''
تحريك ذراع الروبوت
شغّل rviz واستخدمه للتحكم في ذراع الروبوت:
roslaunch lwa4p_movit_config moveit_planning_execution.launch
الصور التالية تُظهر ذراع الروبوت في موضعين مختلفين:
موضع البداية
موضع عشوائي صالح