11
2025
-
02
如何将python文件导入到ROS系统中
浏览:517
发布:2025-02-11 12:00:08
本文通过使用myCobot机械臂进行QR码视觉追踪的实践案例分析,介绍如何将 python 文件导入到 ROS 系统中。
一、引言
在过去的项目中,我主要使用 Python 独立实现各种功能。然而,随着机器人操作系统 (ROS) 的日益普及,我逐渐意识到将这些项目集成到 ROS 中的众多优势。ROS 提供的仿真环境不仅可以提高效率,还可以为项目(mù)测试提供安全且可扩展的平台。因此,在本文中,我将分享将基于 Python 的机械臂二维码跟踪系统引入 ROS 并在仿真环境中运行该项目的过程。
二、项目准备
1、硬件(jiàn)组(zǔ)件(jiàn)
M5Stack ESP32 基(jī)础(chǔ)核(hé)心(xīn)物(wù)联(lián)网(wǎng)开(kāi)发(fā)套件
Elephant Robotics myCobot-6 DOF 协作机器人
Raspberry Pi 4 B 型
2、软件应用程序和在线服务
ROS 机器人操作系统
3、手动工具和制造机
大象机器人 myCobot 280 M5Stack 2023
4、环境设置
对于本项目,建议使用以下开发环境和依赖版本:
● 操作系统:Ubuntu 20.04 LTS
● ROS 版本:Noetic
● Python 版本:Python 3.8 或更高版本
● 库版本要求:pymycobot 3.6 或更高版本
安装关键依赖项
在终端中运行以下命令以安装必要的 Python 库。
pip install stag-pythonpip install opencv-pythonpip install scipypip install numpypip install pymycobo
三、项目运行
在 ROS 中创建 Workspace 和 Package
1.打开终端并创建一个名为 catkin_ws 的新 ROS 工作区:
mkdir -p ~/catkin_ws/src
2. 进入 workspace 目录并初始化:
cd ~/catkin_wscatkin_make
3. 设置(zhì)环(huán)境(jìng)变(biàn)量(liàng)以(yǐ)确(què)保(bǎo) ROS 可(kě)以(yǐ)找(zhǎo)到(dào)工(gōng)作(zuò)区(qū)
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrcsource~/.bashrc
提(tí)示(shì):此(cǐ)配(pèi)置(zhì)将(jiāng)在(zài)每(měi)次(cì)打(dǎ)开(kāi)新(xīn)终(zhōng)端(duān)时(shí)自(zì)动(dòng)加(jiā)载(zài)工(gōng)作(zuò)区(qū)设(shè)置(zhì)。
创(chuàng)建(jiàn) ROS 包(bāo)
1. 在(zài) src 目(mù)录(lù)中(zhōng),创(chuàng)建(jiàn)一(yī)个(gè)名为(wèi) qr_tracking 的(de)新(xīn) ROS 包(bāo),其(qí)中(zhōng)包含所需的依赖项(例如(rú) rospy 和(hé) std_msgs):
cd ~/catkin_ws/srccatkin_create_pkg qr_tracking rospy std_msgs
2.验证包创建。qr_tracking 目录应包含标准的 ROS 包结构,包括 CMakeLists.txt 和 package.xml 文件。
3. 更新依赖项:打开 package.xml 文件并确保包含以下依赖项:
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. 重新构建工作区以应用 ROS 包配置更新:
cd ~/catkin_wscatkin_make
确保在 ROS 包中正确配置了机械臂的 URDF 文件,以准确显示模型。
将 Python 文件导入 ROS 包
设置 scripts 目录
在您的 ROS 包“qr_tracking”中,创建(jiàn)一(yī)个(gè)名为(wèi)“scripts”的(de)文件(jiàn)夹(jiā)来(lái)存(cún)储(chǔ) Python 脚(jiǎo)本(běn)。使(shǐ)用(yòng)以(yǐ)下(xià)命(mìng)令(lìng):
cd ~/catkin_ws/src/qr_trackingmkdir scripts
将(jiāng)你(nǐ)的(de) Python 文件(jiàn)(比(bǐ)如(rú) 'camera_detect.py'、'uvc_camera.py'、'marker_utils.py' 等(děng))移(yí)动(dòng)到(dào)这(zhè)个(gè) 'scripts' 目(mù)录(lù):
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 文件以实现 ROS 兼容性
为确保 Python 脚本与 ROS 兼容,您需要进行一些调整,例如导入 ROS 库、初始化 ROS 节点以及定义消息发布者/订阅者。以 'camera_detect.py' 为例,以下是所需的主要修改:
1. 导入 ROS 库
在 Python 文件的顶部,添加 'rospy' 的导入和任何必要的 ROS 消息类型:
import rospy from std_msgs.msg import String
2. 初始化 ROS 节点
在代码开始时初始化一个 ROS 节点:
rospy.init_node('camera_detection_node', anonymous=True)3. 定义 Topic 发布者/订阅者 根据要求,定义发布者或订阅者。例如,要发布 QR 码检测结果:pub = rospy.Publisher('qr_detection', String, queue_size=10) rate = rospy.Rate(10) # 10 Hz
然后,您可以设置一个函数来检测 QR 码并发布结果。例如:
# 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()代(dài)码(mǎ)示(shì)例(lì)
下(xià)面(miàn)是(shì)一(yī)个(gè)简(jiǎn)化(huà)的(de)代(dài)码(mǎ)片(piàn)段(duàn),显(xiǎn)示(shì)了(le)如(rú)何(hé)在(zài) 'camera_detect.py' 中发布 QR 码检测结果:
#!/usr/bin/env pythonimport rospyfrom 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 > 注意:通过运行 'chmod +x ~/catkin_ws/src/qr_tracking/scripts/*.py' 确保 Python 文件是可执行的。 配置 'CMakeLists.txt' 文件CMake 配置概述
在 ROS 中,“CMakeLists.txt”文件是每个包的核心配置文件,指定如何编译和安装包中的文件。它包括编译器选项、库依赖项和安装路径等配置详细信息。为了让 Python 脚本充当 ROS 节点,我们需要对(duì)此(cǐ)文件进行一些必要的调整。
修改 'CMakeLists.txt'
要使 Python 脚本在 ROS 中可执行,请执行(xíng)以(yǐ)下(xià)步(bù)骤(zhòu):
1. 添加 Catkin 构建依赖
确保 'CMakeLists.txt' 包含一个 'find_package' 语句来定位 'catkin' 和必要的 ROS 依赖项,例如 'rospy' 和 'std_msgs'。下面是一个示例:
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 脚本的安装路径,并确保它们具有可执行权限。假设您的 Python 脚本位(wèi)于(yú) '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' 目(mù)录(lù)中(zhōng),请(qǐng)将(jiāng)以(yǐ)下(xià)部(bù)分(fēn)添(tiān)加(jiā)到(dào) 'CMakeLists.txt': 此(cǐ)命(mìng)令(lìng)将(jiāng) Python 脚本安装到 ROS 包的 binary 目录下,并确保它们在编译后具有可执行权限。 3. 添加依赖项 在调用 'catkin_package()' 之前,请声明依赖项以确保 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 包的一部分,被赋予可执行权限,并且可以使用 ROS 工具(如 'rosrun')运行。
本节对于指导用户如何在 ROS 中编译、启动和验证项目的功能至关重要。
6. 编译和运行
编译工作区
配置 ROS 包的所有方面后,您需要编译工作区以生成和配置必要的资源。
1. 确保您位于工作区的根目录中:
cd ~/catkin_ws
2. 运行 'catkin_make' 编译工作区:
catkin_make
3.如果编译成功,您应该会看到类似于以下内容的输出:
[100%] Built target qr_tracking
启动 Node
编译完成后,您可以使用 rosrun 启动 QR 码跟踪节点。
1. 确保已加载工作区(qū)环(huán)境(jìng)变(biàn)量(liàng),然后启动仿真模型:
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
您应该会看到指示 ROS 节点已初始化的输出,并且它将开始发布 QR 码检测结果。
GitHub:
6.2.3 rivz Introduction and Use · GitBook
相关新闻