我正在尝试为 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()
最终只使用了here
找到的 nmea_navsat_driver我遇到了同样的错误,我忘记添加我在 CMakeLists.txt 的服务中使用的消息类型的依赖项 rosidl_generate_interfaces 中缺少依赖项
我遇到了同样的错误,按照@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)