1

目前正在使用 LGSVL Simulator 学习 ROS。我想发布到“/move_base_simple/goal”主题。

在主代码中只显示重要的“导入”和代码的结尾

import rospy
import roslibpy
from rospy import rostime

import lgsvl
import logging

from environs import Env
from geometry_msgs.msg import PoseStamped

import publisher

### LGSVL SETUP ###
...
###################
ego.set_destination(publisher.GoalPublisher.publish_2d_nav_goal(self=publisher.GoalPublisher,pose_x=9425.16015625, pose_y=9823.15527344, pose_z=0.0))
  
ros = roslibpy.Ros(host='localhost', port=9090) 
ros.run()

sim.run()

这是我的出版商

import rospy
import rospkg
import std_msgs
from geometry_msgs.msg import PoseStamped

class GoalPublisher():
    def __init__(self):
        rospy.init_node('webapp', disable_signals=True)
        self.goal_publisher = rospy.Publisher("move_base_simple/goal", PoseStamped, queue_size=10)

    def publish_2d_nav_goal(self, pose_x, pose_y, pose_z):
        goal = PoseStamped()

        goal.header.stamp = rospy.Time.now()
        goal.header.frame_id = "map"

        goal.pose.position.x = pose_x
        goal.pose.position.y = pose_y
        goal.pose.position.z = pose_z

        goal.pose.orientation.x = 0.0
        goal.pose.orientation.y = 0.0
        goal.pose.orientation.z = -0.663932738254
        goal.pose.orientation.w = 0.747792296747

        self.goal_publisher.publish(goal)

当我尝试启动我的主代码时,我收到此错误:rospy.exceptions.ROSInitException: time is not initialized。你有没有调用 init_node()?

我需要在主代码中添加“rospy.init_node(...)”吗?或者我该如何解决这个问题?

4

1 回答 1

1

您需要调用rospy.init_node()您创建的每个 ros 节点。您可以在节点中的任何位置调用它,但是,必须在尝试使用 ros api 中的任何内容之前调用它。在此示例中,您的发布者很好,但您在roslibpy.Ros()将主代码初始化为自己的节点之前调用。

rospy.init_node('main_node')

ego.set_destination(publisher.GoalPublisher.publish_2d_nav_goal(self=publisher.GoalPublisher,pose_x=9425.16015625, pose_y=9823.15527344, pose_z=0.0))
  
ros = roslibpy.Ros(host='localhost', port=9090) 
ros.run()

sim.run()
于 2021-11-22T18:25:43.027 回答