如何导入 python 中不属于通常 .msg 路径的 ROS .msg 文件?

how to import ROS .msg files in python which are not part of the usual .msg path?

我在这里为 ROS 使用 this 驱动程序。驱动程序在我的 ROS catkin 工作区内 (catkin_ws)。 在这个工作区内,我有另一个我想要 import TelloStatus 的包,它位于 tello_driver/msg/TelloStatus.msg

通常ROS中的消息(msg)是这样导入的:

示例:

from geometry_msgs.msg import Twist
from std_msgs.msg import Empty
from sensor_msgs.msg import Imu

我认为这些文件位于系统的以下路径中:

opt/ros/noetic/share

所以我的问题是如何导入 TelloStatus,它不是此路径的一部分,而是 tello_driver 包的一部分?

我尝试通过以下方式导入它:

import sys
sys.path.append('/home/usr/catkin_ws/src/tello_driver/msg/TelloStatus.msg')
import TelloStatus

但随后我收到此错误消息:

import TelloStatus
ModuleNotFoundError: No module named 'TelloStatus'

提前感谢您的帮助!

您仍然可以像导入任何其他消息一样导入它:from tello_driver.msg import TelloStatus.msg。重要的是你必须有正确的环境来源;这就是 source <install_dir/setup.bash> 的目的。确保你获取构建文件所在的任何 install 目录。请注意,你永远不应该尝试在 src/ 中添加文件以在运行时使用,这就是 installdevel 用于.

根据您的评论进行编辑:

这里有几件事要确保发生。首先在包 tello_driver 中确保消息文件实际设置为在 CMakeLists.txt 中构建。确保它包含用于添加消息文件的行

add_message_files(
  FILES
  TelloStatus.msg
)

然后确保正在构建消息

generate_messages(
  DEPENDENCIES
  std_msgs
)

还要确保 package.xml 具有通过添加(如果尚不存在)

来构建消息的依赖项
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>

最后,在再次构建之前,请确保使用 catkin_make clean 清理您的工作区,然后使用 catkin_make 重建。这样做并采购 devel/setup.bash 之后,您可以通过 rosmsg show TelloStatus

验证消息是否存在