在ROS docker容器上运行自定义python代码

2024-06-17 10:16:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我是ROS的初学者,我正在尝试运行一些listener/talker节点,用python运行一个非常简单的代码,在Docker容器上使用ROS

我遵循中描述的指南: https://hub.docker.com/_/ros

我得到了这个结构:

./
    Dockerfile
    docker-compose.yml
    ./teste/
            listener.py

我当前的目标是传递listener.py代码并在“listener”节点中运行,作为服务容器运行

我的Dockerfile是:

FROM ros:foxy        
 # install ros package 
    RUN apt-get update && apt-get install -y \
              ros-${ROS_DISTRO}-demo-nodes-cpp \
              ros-${ROS_DISTRO}-demo-nodes-py && \
            rm -rf /var/lib/apt/lists/*
        
# launch ros package

CMD ["ros2", "launch", "demo_nodes_cpp", "talker_listener.launch.py"]

我的docker-compose.yml文件是:

version: '3'

services:
  talker:
    build: ./
    command: ros2 run demo_nodes_py talker

  listener:
    build: ./
    environment:
      - "PYTHONUNBUFFERED=1"
    volumes:
      - ./teste:/teste
    command: ros2 run demo_nodes_py listener

volumes:
  teste:

使用此默认代码,这两个服务运行来自原始ros示例的listener/talker,但我想运行自己的python代码。我该怎么做?如果我打开一个shell并尝试执行它,即使侦听器服务可以访问listener.py代码(通过./teste),ros2 run命令也无法识别

我做错了什么?我应该在ros2上运行python代码之前做些什么吗?有什么想法吗

谢谢

编辑:如果我打开shell终端,则无法识别ros2命令,但通过Dockerfile上的cmd命令,使用talker_listener.launch.py代码,它可以工作

Edit2:我通过“/bin/bash-source/opt/ros/foxy/setup.bash”运行了setup.sh。即使如此,我也不能运行ros2命令。我使用了“python3/teste/listener.py”,但随后出现了错误:

ModuleNotFoundError: No module named 'rospy'

如果我运行默认的命令选项(通过Dockerfile,ros2运行demo_nodes_py listener)并正常工作,这怎么可能呢


Tags: docker代码py命令dockerfiledemoaptros