首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ROS param KeyError

ROS param KeyError
EN

Stack Overflow用户
提问于 2022-05-24 12:26:57
回答 1查看 128关注 0票数 0

我开始学习ROS。我试着用param从启动文件中读取数据。但我给出了一个错误,我不明白为什么?请帮我构造:

代码语言:javascript
复制
def__init__(self,nodeName,goalx,goaly):
  rospy.init_node("node", anonymous="True")
  self.goalX = rospy.get_param("x1")
  self.goalY = rospy.get_param("y1")
  self.pub = rospy.Publisher(nodeName + '/cmd_vel',Twist,queue_size=10)
  self.sub = rospy.Subscriber(nodeName+"/odom",Odometry,callback=self.update_pose)
  self.odometry = Odometry()
  self.rate = rospy.Rate(10)


if __name__ == "__main__":
  nodeId = sys.argv[1]
  try:
      nodeName = "robot_"+nodeId
      x = Turtlebot(nodeName,0,0)
      x.move2goal()
      rospy.spin()
    ...

启动文件:

代码语言:javascript
复制
<param name="x1" type="int" value="4" />
<param name="y1" type="int" value="0" />
<param name="x2" type="int" value="5" />
<param name="y2" type="int" value="0" />


<node pkg="stage_ros" name="stageros" type="stageros" args="$(find beginner_tutorials)/world/worldfile.world" output="screen"/>



<!-- <node pkg="beginner_tutorials" name="rotate1" args="0"  type="projecttask2.py"/> -->
<node pkg="beginner_tutorials" name="rotate2"  args="1" type="projecttask2.py"
代码语言:javascript
复制
 Error: KeyError('x1')
EN

回答 1

Stack Overflow用户

发布于 2022-05-25 05:39:16

由于参数命名空间,您会遇到这个问题。当使用rospy.get_param("x1")时,您正在检查是否提取相对命名空间的参数。这意味着您实际上是在检查<node_namespace>/x1的param。但是,在您的节点中,您没有在节点下声明param;这意味着它是在全局命名空间下设置的。你有两个选择来解决这个问题。首先,您可以简单地声明节点名称空间中的参数,如下所示:

代码语言:javascript
复制
<node pkg="stage_ros" name="stageros" type="stageros" args="$(find beginner_tutorials)/world/worldfile.world" output="screen">
    <param name="x1" type="int" value="4" />
    <param name="y1" type="int" value="0" />
    <param name="x2" type="int" value="5" />
    <param name="y2" type="int" value="0" />
<node/>

其次,您可以修复节点内的名称空间,以便它从全局命名空间中提取参数,如下所示:

代码语言:javascript
复制
def__init__(self,nodeName,goalx,goaly):
  rospy.init_node("node", anonymous="True")
  self.goalX = rospy.get_param("/x1")
  self.goalY = rospy.get_param("/y1")

有关名称空间的更多信息,您可以查看ros页面.1

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72362875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档