本文通过使用myCobot机械臂进行QR码视觉追踪的实践案例分析,介绍如何将 python 文件导入到 ROS 系统中。
 一、引言
 在过去的项目中,我主要使用 Python 独立实现各种功能。然而,随着机器人操作系统 (ROS) 的日益普及,我逐渐意识到将这些项目集成到 ROS 中的众多优势。ROS 提供的仿真环境不仅可以提高效率,还可以为项目测试提供安全且可扩展的平台。因此,在本文中,我将分享将基于 Python 的机械臂二维码跟踪系统引入 ROS 并在仿真环境中运行该项目的过程。
二、项目准备
 1、硬件组件
 M5Stack ESP32 基础核心物联网开发套件
 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-python pip install opencv-python pip install scipy pip install numpy pip install pymycobo
mkdir -p ~/catkin_ws/src
2. 进入 workspace 目录并初始化:
cd ~/catkin_ws catkin_make
3. 设置环境变量以确保 ROS 可以找到工作区
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc source~/.bashrc
 
 提示:此配置将在每次打开新终端时自动加载工作区设置。
 
 创建 ROS 包
 
 1. 在 src 目录中,创建一个名为 qr_tracking 的新 ROS 包,其中包含所需的依赖项(例如 rospy 和 std_msgs):
cd ~/catkin_ws/src catkin_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
   
 
  
   
    B
    SD
   
 
  
   
    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_ws catkin_make
cd ~/catkin_ws/src/qr_tracking mkdir scripts
将你的 Python 文件(比如 'camera_detect.py'、'uvc_camera.py'、'marker_utils.py' 等)移动到这个 '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/
import rospy from std_msgs.msg import String
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() 代码示例 
#!/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 > 注意:通过运行 'chmod  x ~/catkin_ws/src/qr_tracking/scripts/*.py' 确保 Python 文件是可执行的。 配置 '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
   ) 2. 安装 Python 脚本 使用 'catkin_install_python' 指定 Python 脚本的安装路径,并确保它们具有可执行权限。假设您的 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 目录下,并确保它们在编译后具有可执行权限。 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}) 
cd ~/catkin_ws
 
 2. 运行 'catkin_make' 编译工作区:
catkin_make
3.如果编译成功,您应该会看到类似于以下内容的输出:
[100%] Built target qr_tracking
启动 Node
 
 编译完成后,您可以使用 rosrun 启动 QR 码跟踪节点。
 
 1. 确保已加载工作区环境变量,然后启动仿真模型:
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 
关注
211文章
28695浏览量
208655免责声明:本文为转载,非本网原创内容,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如有疑问请发送邮件至:bangqikeconnect@gmail.com