无法为软件包“sensor_msgs”导入“rosidl_typesupport_c”ROS2 python NavSatFix

问题描述 投票:0回答:3

我正在尝试为 Ublox GPS 传感器创建发布者,但我收到此 ROS 错误:

ubuntu@fieldrover:~/field-rover-gps/gps/gps_pkg$ cd ~/field-rover-gps/gps/gps_pkg/ && colcon 构建 && 。安装/setup.bash && ros2 运行 gps_pkg gps

开始 >>> gps_pkg 完成 <<< gps_pkg [2.98s]

摘要:1 个包完成 [3.49s] 回溯(最近一次调用最后一次): 文件 “/opt/ros/gactic/lib/python3.8/site-packages/rosidl_generator_py/import_type_support_impl.py”, 第 46 行,在 import_type_support 中 return importlib.import_module(module_name, package=pkg_name) 文件“/usr/lib/python3.8/importlib/init.py”,第 127 行,位于 导入模块 return _bootstrap._gcd_import(name[level:], package, level) 文件 "",第 1014 行,在 _gcd_import 文件中 "",第 991 行,位于 _find_and_load 文件中 "",第 975 行,位于 _find_and_load_unlocked 中 文件“”,第 657 行,位于 _load_unlocked
文件“”,第 556 行,位于 module_from_spec
文件“”,第 1166 行,位于 create_module 文件“”,第 219 行,位于 _call_with_frames_removed 导入错误:/opt/ros/gactic/lib/libgeometry_msgs__rosidl_generator_c.so: 未定义的符号:std_msgs__msg__Header__copy

在处理上述异常的过程中,又发生了一个异常:

回溯(最近一次调用最后一次):文件 “/home/ubuntu/field-rover-gps/gps/gps_pkg/install/gps_pkg/lib/gps_pkg/gps”, 第 33 行,在 sys.exit(load_entry_point('gps-pkg==0.0.0', 'console_scripts', 'gps')()) 文件 “/home/ubuntu/field-rover-gps/gps/gps_pkg/install/gps_pkg/lib/python3.8/site-packages/gps_pkg/gps.py”, 第 49 行,主要 gps_node = GpsNode() 文件“/home/ubuntu/field-rover-gps/gps/gps_pkg/install/gps_pkg/lib/python3.8/site-packages/gps_pkg/gps.py”, 第 17 行,在 init 中 self.publisher_ = self.create_publisher(NavSatFix, 'gps/fix', 10) 文件 "/opt/ros/gactic/lib/python3.8/site-packages/rclpy/node.py", 第 1282 行,在 create_publisher 中 check_is_valid_msg_type(msg_type) 文件“/opt/ros/gactic/lib/python3.8/site-packages/rclpy/type_support.py”, 第 35 行,在 check_is_valid_msg_type 中 check_for_type_support(msg_type) 文件“/opt/ros/gactic/lib/python3.8/site-packages/rclpy/type_support.py”, 第 29 行,在 check_for_type_support 中 msg_or_srv_type.class.import_type_support() 文件“/opt/ros/gactic/lib/python3.8/site-packages/sensor_msgs/msg/_nav_sat_fix.py”, 第 34 行,位于 import_type_support 模块= import_type_support('sensor_msgs') 文件“/opt/ros/gactic/lib/python3.8/site-packages/rosidl_generator_py/import_type_support_impl.py”, 第 48 行,在 import_type_support 中 引发 UnsupportedTypeSupport(pkg_name) rosidl_generator_py.import_type_support_impl.UnsupportedTypeSupport: 无法为包“sensor_msgs”导入“rosidl_typesupport_c”

NavSatFix 似乎有问题。我已经在同一包中测试了其他sensor_msgs类型,例如Image,并且效果很好。这是我尝试运行的代码。

import rclpy
import os
from rclpy.node import Node
from sensor_msgs.msg import NavSatFix
from sensor_msgs.msg import NavSatStatus
from std_msgs.msg import Header
import serial
from ublox_gps import UbloxGps

port = serial.Serial('/dev/ttyACM0', baudrate=38400, timeout=1)
gps = UbloxGps(port)

class GpsNode(Node):

    def __init__(self):
        super().__init__('gps_node')
        self.publisher_ = self.create_publisher(NavSatFix, 'gps/fix', 10)
        timer_period = 0.5  # seconds
        self.timer = self.create_timer(timer_period, self.timer_callback)

    def timer_callback(self):
            msg = NavSatFix()
            msg.header = Header()
            msg.header.stamp = self.get_clock().now().to_msg()
            msg.header.frame_id = "gps"

            msg.status.status = NavSatStatus.STATUS_FIX
            msg.status.service = NavSatStatus.SERVICE_GPS

            geo = gps.geo_coords()
            # Position in degrees.
            msg.latitude = geo.lat
            msg.longitude = geo.lon

            # Altitude in metres.
            #msg.altitude = 1.15

            msg.position_covariance[0] = 0
            msg.position_covariance[4] = 0
            msg.position_covariance[8] = 0
            msg.position_covariance_type = NavSatFix.COVARIANCE_TYPE_DIAGONAL_KNOWN

            self.publisher_.publish(msg)
            self.best_pos_a = None

def main(args=None):
    rclpy.init(args=args)

    gps_node = GpsNode()

    rclpy.spin(gps_node)

    # Destroy the node explicitly
    # (optional - otherwise it will be done automatically
    # when the garbage collector destroys the node object)
    gps_node.destroy_node()
    rclpy.shutdown()

if __name__ == '__main__':
    main()
python ros2
3个回答
0
投票

最终只使用了here

找到的 nmea_navsat_driver

0
投票

我遇到了同样的错误,我忘记添加我在 CMakeLists.txt 的服务中使用的消息类型的依赖项 rosidl_generate_interfaces 中缺少依赖项


0
投票

我遇到了同样的错误,按照@awied1404的建议,我注意到我的依赖项

sensor_msgs
在CMakeLists.txt的
rosidl_generate_interfaces
中丢失了。我试图为 ROS2 构建自定义视觉消息。我必须进行以下更改并且它起作用了。

find_package(sensor_msgs REQUIRED)

enter code here${msg_files}
  DEPENDENCIES std_msgs geometry_msgs sensor_msgs
  ADD_LINTER_TESTS)
© www.soinside.com 2019 - 2024. All rights reserved.