本文通過使用myCobot機(jī)械臂進(jìn)行QR碼視覺追蹤的實(shí)踐案例分析,介紹如何將 python 文件導(dǎo)入到 ROS 系統(tǒng)中。
一、引言
在過去的項(xiàng)目中,我主要使用 Python 獨(dú)立實(shí)現(xiàn)各種功能。然而,隨著機(jī)器人操作系統(tǒng) (ROS) 的日益普及,我逐漸意識到將這些項(xiàng)目集成到 ROS 中的眾多優(yōu)勢。ROS 提供的仿真環(huán)境不僅可以提高效率,還可以為項(xiàng)目測試提供安全且可擴(kuò)展的平臺。因此,在本文中,我將分享將基于 Python 的機(jī)械臂二維碼跟蹤系統(tǒng)引入 ROS 并在仿真環(huán)境中運(yùn)行該項(xiàng)目的過程。
二、項(xiàng)目準(zhǔn)備
1、硬件組件
M5Stack ESP32 基礎(chǔ)核心物聯(lián)網(wǎng)開發(fā)套件
Elephant Robotics myCobot-6 DOF 協(xié)作機(jī)器人
Raspberry Pi 4 B 型
2、軟件應(yīng)用程序和在線服務(wù)
ROS 機(jī)器人操作系統(tǒng)
3、手動工具和制造機(jī)
大象機(jī)器人 myCobot 280 M5Stack 2023
4、環(huán)境設(shè)置
對于本項(xiàng)目,建議使用以下開發(fā)環(huán)境和依賴版本:
● 操作系統(tǒng):Ubuntu 20.04 LTS
● ROS 版本:Noetic
● Python 版本:Python 3.8 或更高版本
● 庫版本要求:pymycobot 3.6 或更高版本
安裝關(guān)鍵依賴項(xiàng)
在終端中運(yùn)行以下命令以安裝必要的 Python 庫。
pip install stag-python pip install opencv-python pip install scipy pip install numpy pip install pymycobo
三、項(xiàng)目運(yùn)行
在 ROS 中創(chuàng)建 Workspace 和 Package
1.打開終端并創(chuàng)建一個(gè)名為 catkin_ws 的新 ROS 工作區(qū):
mkdir -p ~/catkin_ws/src
2. 進(jìn)入 workspace 目錄并初始化:
cd ~/catkin_ws catkin_make
3. 設(shè)置環(huán)境變量以確保 ROS 可以找到工作區(qū)
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc source~/.bashrc
提示:此配置將在每次打開新終端時(shí)自動加載工作區(qū)設(shè)置。
創(chuàng)建 ROS 包
1. 在 src 目錄中,創(chuàng)建一個(gè)名為 qr_tracking 的新 ROS 包,其中包含所需的依賴項(xiàng)(例如 rospy 和 std_msgs):
cd ~/catkin_ws/src catkin_create_pkg qr_tracking rospy std_msgs
2.驗(yàn)證包創(chuàng)建。qr_tracking 目錄應(yīng)包含標(biāo)準(zhǔn)的 ROS 包結(jié)構(gòu),包括 CMakeLists.txt 和 package.xml 文件。
3. 更新依賴項(xiàng):打開 package.xml 文件并確保包含以下依賴項(xiàng):
mycobot_280 0.3.0 The mycobot 280 package ZhangLijun ZhangLijun BSD https://github.com/elephantrobotics/mycobot_ros catkin roscpp rospy std_msgs actionlib mycobot_description mycobot_communication mycobot_communication mycobot_description roscpp rospy std_msgs actionlib joint_state_publisher joint_state_publisher_gui robot_state_publisher xacro joy rviz controller_manager python-tk mycobot_description mycobot_communication
4. 重新構(gòu)建工作區(qū)以應(yīng)用 ROS 包配置更新:
cd ~/catkin_ws catkin_make
確保在 ROS 包中正確配置了機(jī)械臂的 URDF 文件,以準(zhǔn)確顯示模型。
將 Python 文件導(dǎo)入 ROS 包
設(shè)置 scripts 目錄
在您的 ROS 包“qr_tracking”中,創(chuàng)建一個(gè)名為“scripts”的文件夾來存儲 Python 腳本。使用以下命令:
cd ~/catkin_ws/src/qr_tracking mkdir scripts
將你的 Python 文件(比如 'camera_detect.py'、'uvc_camera.py'、'marker_utils.py' 等)移動到這個(gè) 'scripts' 目錄:
mv /path/to/camera_detect.py ~/catkin_ws/src/qr_tracking/scripts/ mv /path/to/uvc_camera.py ~/catkin_ws/src/qr_tracking/scripts/ mv /path/to/marker_utils.py ~/catkin_ws/src/qr_tracking/scripts/
修改 Python 文件以實(shí)現(xiàn) ROS 兼容性
為確保 Python 腳本與 ROS 兼容,您需要進(jìn)行一些調(diào)整,例如導(dǎo)入 ROS 庫、初始化 ROS 節(jié)點(diǎn)以及定義消息發(fā)布者/訂閱者。以 'camera_detect.py' 為例,以下是所需的主要修改:
1. 導(dǎo)入 ROS 庫
在 Python 文件的頂部,添加 'rospy' 的導(dǎo)入和任何必要的 ROS 消息類型:
import rospy from std_msgs.msg import String
2. 初始化 ROS 節(jié)點(diǎn)
在代碼開始時(shí)初始化一個(gè) ROS 節(jié)點(diǎn):
rospy.init_node('camera_detection_node', anonymous=True)3. 定義 Topic 發(fā)布者/訂閱者 根據(jù)要求,定義發(fā)布者或訂閱者。例如,要發(fā)布 QR 碼檢測結(jié)果:
pub = rospy.Publisher('qr_detection', String, queue_size=10) rate = rospy.Rate(10) # 10 Hz
然后,您可以設(shè)置一個(gè)函數(shù)來檢測 QR 碼并發(fā)布結(jié)果。例如:
# Assuming there is a function to detect QR codes def detect_qr_code(): while not rospy.is_shutdown(): # Detection logic here detection_result = "QR code detected" # This is the detection result rospy.loginfo(detection_result) pub.publish(detection_result) rate.sleep()代碼示例
下面是一個(gè)簡化的代碼片段,顯示了如何在 'camera_detect.py' 中發(fā)布 QR 碼檢測結(jié)果:
#!/usr/bin/env python import rospy from std_msgs.msg import String def detect_qr_code(): pub = rospy.Publisher('qr_detection', String, queue_size=10) rospy.init_node('camera_detection_node', anonymous=True) rate = rospy.Rate(10) # 10 Hz while not rospy.is_shutdown(): # Replace with actual detection logic detection_result = "QR code detected" # Simulated detection result rospy.loginfo(detection_result) pub.publish(detection_result) rate.sleep() if __name__ == '__main__': try: detect_qr_code() except rospy.ROSInterruptException: pass> 注意:通過運(yùn)行 'chmod +x ~/catkin_ws/src/qr_tracking/scripts/*.py' 確保 Python 文件是可執(zhí)行的。 配置 'CMakeLists.txt' 文件
CMake 配置概述
在 ROS 中,“CMakeLists.txt”文件是每個(gè)包的核心配置文件,指定如何編譯和安裝包中的文件。它包括編譯器選項(xiàng)、庫依賴項(xiàng)和安裝路徑等配置詳細(xì)信息。為了讓 Python 腳本充當(dāng) ROS 節(jié)點(diǎn),我們需要對此文件進(jìn)行一些必要的調(diào)整。
修改 'CMakeLists.txt'
要使 Python 腳本在 ROS 中可執(zhí)行,請執(zhí)行以下步驟:
1. 添加 Catkin 構(gòu)建依賴
確保 'CMakeLists.txt' 包含一個(gè) 'find_package' 語句來定位 'catkin' 和必要的 ROS 依賴項(xiàng),例如 'rospy' 和 'std_msgs'。下面是一個(gè)示例:
cmake_minimum_required(VERSION 2.8.3) project(mycobot_280) add_compile_options(-std=c++11) ## Find catkin and any catkin packages find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs actionlib image_transport cv_bridge )2. 安裝 Python 腳本 使用 'catkin_install_python' 指定 Python 腳本的安裝路徑,并確保它們具有可執(zhí)行權(quán)限。假設(shè)您的 Python 腳本位于 'scrip
catkin_install_python(PROGRAMS scripts/follow_display.py scripts/slider_control.py scripts/teleop_keyboard.py scripts/listen_real.py scripts/listen_real_of_topic.py scripts/simple_gui.py scripts/follow_display_gripper.py scripts/slider_control_gripper.py scripts/listen_real_gripper.py scripts/detect_stag.py DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} )ts' 目錄中,請將以下部分添加到 'CMakeLists.txt': 此命令將 Python 腳本安裝到 ROS 包的 binary 目錄下,并確保它們在編譯后具有可執(zhí)行權(quán)限。 3. 添加依賴項(xiàng) 在調(diào)用 'catkin_package()' 之前,請聲明依賴項(xiàng)以確保 ROS 正確解析它們。例如:
catkin_package( CATKIN_DEPENDS std_msgs actionlib )4. 完整示例 以下是 'CMakeLists.txt' 文件的示例配置:
cmake_minimum_required(VERSION 2.8.3) project(mycobot_280) add_compile_options(-std=c++11) ## Find catkin and any catkin packages find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs actionlib image_transport cv_bridge ) ## Declare a catkin package catkin_package( CATKIN_DEPENDS std_msgs actionlib ) ## Include directories include_directories(include ${catkin_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS}) ## Install Python scripts catkin_install_python(PROGRAMS scripts/follow_display.py scripts/slider_control.py scripts/teleop_keyboard.py scripts/listen_real.py scripts/listen_real_of_topic.py scripts/simple_gui.py scripts/follow_display_gripper.py scripts/slider_control_gripper.py scripts/listen_real_gripper.py scripts/detect_stag.py DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} ) ## Install launch and config directories install(DIRECTORY launch DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} PATTERN "setup_assistant.launch" EXCLUDE) install(DIRECTORY config DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}) ## OpenCV requirements find_package(OpenCV REQUIRED) add_executable(opencv_camera src/opencv_camera) target_link_libraries(opencv_camera ${catkin_LIBRARIES} ${OpenCV_LIBRARIES}) add_executable(camera_display src/camera_display) target_link_libraries(camera_display ${catkin_LIBRARIES} ${OpenCV_LIBRARIES})
通過這些修改,Python 腳本將成為 ROS 包的一部分,被賦予可執(zhí)行權(quán)限,并且可以使用 ROS 工具(如 'rosrun')運(yùn)行。
本節(jié)對于指導(dǎo)用戶如何在 ROS 中編譯、啟動和驗(yàn)證項(xiàng)目的功能至關(guān)重要。
6. 編譯和運(yùn)行
編譯工作區(qū)
配置 ROS 包的所有方面后,您需要編譯工作區(qū)以生成和配置必要的資源。
1. 確保您位于工作區(qū)的根目錄中:
cd ~/catkin_ws
2. 運(yùn)行 'catkin_make' 編譯工作區(qū):
catkin_make
3.如果編譯成功,您應(yīng)該會看到類似于以下內(nèi)容的輸出:
[100%] Built target qr_tracking
啟動 Node
編譯完成后,您可以使用 rosrun 啟動 QR 碼跟蹤節(jié)點(diǎn)。
1. 確保已加載工作區(qū)環(huán)境變量,然后啟動仿真模型:
cd ~/catkin_ws source devel/setup.bash roslaunch mycobot_280 detect_marker_with_topic.launch port:=/dev/ttyUSB0 baud:=115200
2. 使用 'rosrun' 啟動 'camera_detect.py' 腳本: rosrun qr_tracking camera_detect.py
您應(yīng)該會看到指示 ROS 節(jié)點(diǎn)已初始化的輸出,并且它將開始發(fā)布 QR 碼檢測結(jié)果。
GitHub:
6.2.3 rivz Introduction and Use · GitBook
-
機(jī)器人
+關(guān)注
關(guān)注
211文章
28704瀏覽量
208678 -
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2914文章
44978瀏覽量
377474 -
python
+關(guān)注
關(guān)注
56文章
4811瀏覽量
85076 -
ROS
+關(guān)注
關(guān)注
1文章
281瀏覽量
17126
原文標(biāo)題:QR 碼視覺追蹤案例分享:如何輕松將Python 集成到 ROS 中
文章出處:【微信號:ElephantRobotics,微信公眾號:大象機(jī)器人】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
TARGET3001!用法篇-如何將Altium文件導(dǎo)入到TARGET中
新手求教:請高手指點(diǎn)如何將.DXF文件導(dǎo)入到Allegro pcb aditor中? 是否還可以導(dǎo)入其
如何將solidworks文件導(dǎo)入到labview中
請問怎樣講一個(gè)波形圖的圖像或者一個(gè)多列列表導(dǎo)入到EXCEL文件中
【案例9】如何將HFSS模型導(dǎo)入到ADS生成可加工的Gerber文件等
如何將ADI公司的Spice模型導(dǎo)入到Multisim仿真軟件呢?
如何將AD庫轉(zhuǎn)換導(dǎo)入到PADS中使用
如何使用python將txt文件導(dǎo)入到mysql的應(yīng)用實(shí)例
![如何使用<b class='flag-5'>python</b><b class='flag-5'>將</b>txt<b class='flag-5'>文件</b><b class='flag-5'>導(dǎo)入到</b>mysql的應(yīng)用實(shí)例](https://file.elecfans.com/web1/M00/C6/87/pIYBAF9YpvCAAkuLAAEEYGmAQso848.png)
HLS導(dǎo)出的.xo文件如何導(dǎo)入到Vitis里面
將Python腳本集成到GUI工具包
SNP Glue:SAP數(shù)據(jù)導(dǎo)入到其他系統(tǒng)的多種方式
如何將Klayout Cell動態(tài)導(dǎo)入Lumerical Multiphysics
![<b class='flag-5'>如何將</b>Klayout Cell動態(tài)<b class='flag-5'>導(dǎo)入</b>Lumerical Multiphysics](https://file1.elecfans.com/web2/M00/BE/AE/wKgaomWuCyyADTvNAAApyulFE8I582.png)
TARGET3001!用法篇-如何將Altium文件導(dǎo)入到TARGET中
![TARGET3001!用法篇-<b class='flag-5'>如何將</b>Altium<b class='flag-5'>文件</b><b class='flag-5'>導(dǎo)入到</b>TARGET<b class='flag-5'>中</b>](https://file1.elecfans.com//web2/M00/C1/37/wKgaomXUSa-AaDqVAABiWKB3220555.png)
評論