ROS学习 Python读写文本文件

我们在很多时候会需要保存一些文件以记录相关信息。

所以如何保存,我们第一个项目是想要保存rviz上点击的waypoints点。

代码如下:

import yaml
import rospy
import geometry_msgs.msg as geometry_msgs

class WaypointGenerator(object):

    def __init__(self, filename):
        self._sub_pose = rospy.Subscriber(‘clicked_point‘, geometry_msgs.PointStamped, self._process_pose, queue_size=1)
        self._waypoints = []
        self._filename = filename

    def _process_pose(self, msg):
        p = msg.point

        data = {}
        data[‘frame_id‘] = msg.header.frame_id
        data[‘pose‘] = {}
        data[‘pose‘][‘position‘] = {‘x‘: p.x, ‘y‘: p.y, ‘z‘: 0.0}
        data[‘pose‘][‘orientation‘] = {‘x‘: 0, ‘y‘: 0, ‘z‘: 0, ‘w‘:1}
        data[‘name‘] = ‘%s_%s‘ % (p.x, p.y)

        self._waypoints.append(data)
        rospy.loginfo("Clicked : (%s, %s, %s)" % (p.x, p.y, p.z))

    def _write_file(self):
        ways = {}
        ways[‘waypoints‘] = self._waypoints
        with open(self._filename, ‘w‘) as f:
            f.write(yaml.dump(ways, default_flow_style=False))

    def spin(self):
        rospy.spin()
        self._write_file()

if __name__ == ‘__main__‘:

    rospy.init_node(‘waypoint_generator‘)
    filename = rospy.get_param(‘~filename‘)

    g = WaypointGenerator(filename)
    rospy.loginfo(‘Initialized‘)
    g.spin()
    rospy.loginfo(‘ByeBye‘)

这个node就是订阅了rviz里面的Publish Point进行存储。

Make文件应该是这样的:

cmake_minimum_required(VERSION 2.8.3)
project(waypoint_generator)

find_package(catkin REQUIRED COMPONENTS
  geometry_msgs
  rospy
)

catkin_python_setup()
catkin_package()

install(PROGRAMS
  scripts/generator.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

我们在写一个launch文件,写好文件存储位置。

<launch>

<node pkg="waypoint_generator" type="generator.py" name="waypoint_generator" output="screen" >
  <param name="filename" value="$(find waypoint_generator)/output.txt" />
</node>
<node pkg="show_path" type="showpath" name="showpath"/>

</launch>

存储位置就是package下面主目录里。

下面是读取txt文件并且发布为goal,其中还包括了actionlib的用法。

import random
import rospy
import actionlib
import waypoint_touring.utils as utils

import move_base_msgs.msg as move_base_msgs
import visualization_msgs.msg as viz_msgs

class TourMachine(object):

    def __init__(self, filename, random_visits=False, repeat=False):
        self._waypoints = utils.get_waypoints(filename)

        action_name = ‘move_base‘
        self._ac_move_base = actionlib.SimpleActionClient(action_name, move_base_msgs.MoveBaseAction)
        rospy.loginfo(‘Wait for %s server‘ % action_name)
        self._ac_move_base.wait_for_server
        self._counter = 0
        self._repeat = repeat
        self._random_visits = random_visits

        if self._random_visits:
            random.shuffle(self._waypoints)
        self._pub_viz_marker = rospy.Publisher(‘viz_waypoints‘, viz_msgs.MarkerArray, queue_size=1, latch=True)
        self._viz_markers = utils.create_viz_markers(self._waypoints)

    def move_to_next(self):
        p = self._get_next_destination()

        if not p:
            rospy.loginfo("Finishing Tour")
            return True

        goal = utils.create_move_base_goal(p)
        rospy.loginfo("Move to %s" % p[‘name‘])
        self._ac_move_base.send_goal(goal)
        self._ac_move_base.wait_for_result()
        result = self._ac_move_base.get_result()
        rospy.loginfo("Result : %s" % result)

        return False

    def _get_next_destination(self):
        if self._counter == len(self._waypoints):
            if self._repeat:
                self._counter = 0
                if self._random_visits:
                    random.shuffle(self._waypoints)
            else:
                next_destination = None
        next_destination = self._waypoints[self._counter]
        self._counter = self._counter + 1
        return next_destination

    def spin(self):
        rospy.sleep(1.0)
        self._pub_viz_marker.publish(self._viz_markers)
        finished = False
        while not rospy.is_shutdown() and not finished:
            finished = self.move_to_next()
            rospy.sleep(2.0)

if __name__ == ‘__main__‘:
    rospy.init_node(‘tour‘)

    filename = rospy.get_param(‘~filename‘)
    random_visits = rospy.get_param(‘~random‘, False)
    repeat = rospy.get_param(‘~repeat‘, False)

    m = TourMachine(filename, random_visits, repeat)
    rospy.loginfo(‘Initialized‘)
    m.spin()
    rospy.loginfo(‘Bye Bye‘)

而写一个launch文件来读取txt位置,

<launch>
    <arg name="repeat"        default="true"/>
    <arg name="random"        default="false"/>
    <arg name="filename"    default="$(find waypoint_generator)/output.txt"/>

    <node pkg="rviz" type="rviz" name="rviz" />

    <node pkg="waypoint_touring" name="waypoint_touring" type="tour.py" output="screen">
      <param name="filename"    value="$(arg filename)"/>
      <param name="repeat"        value="$(arg repeat)"/>
      <param name="random"        value="$(arg random)"/>
    </node>
</launch>

参考资料:

https://github.com/jihoonl/waypoint

原文地址:https://www.cnblogs.com/TIANHUAHUA/p/8443973.html

时间: 2024-10-10 18:06:27

ROS学习 Python读写文本文件的相关文章

python 读写文本文件

本人最近新学python ,用到文本文件的读取,经过一番研究,从网上查找资料,经过测试,总结了一下读取文本文件的方法. 1.在读取文本文件的时无非有两种方法: a.f=open('filename', 'r') content=f.read().decode('utf-8') b.f=codecs.open(XXX, encoding='utf-8')  content=f.read() 2.读取Utf8格式的文本文件 # -*- coding: UTF8 -*- import os impor

通过读写文本文件小结“关于python处理中文编码的问题”

一.引言 无论学习什么程序语言,字符串这种数据类型总是着有非常重要.然而最近在学习python这门语言,想要显示中文,总是出现各种乱码.于是在网上查了很多资料,各说纷纭,我也尝试了许多的方法,有时候可以正常显示,有时候确实乱码,让我摸不着头脑.于是自己利用python读写中文的文本文件来尝试去摸索python中的中文编码问题.比较幸运的是,最后能够正常的读取出文本里面的中文数据并且显示,而且还能将中文的结果数据写入文本文件中.但是本文仅仅只是总结处理中文乱码问题的小结,并没有将其编码的原理弄透.

python学习笔记5:python读写文件

python学习笔记5:python读写文件 一.文件的打开模式 1.打开文件 1) f=open('D:\\a.txt','w') 第一个参数是文件的路径,如果只写文件的名字,默认是在当前执行目录下的文件:第二个参数是文件的打开模式 这种方式打开文件,在使用完了之后一定要记得,关闭文件: f.close() 2) with open('D:\\a.txt','w') as f 这种方式打开文件,文件在使用完后会自动关闭文件,不需要close  2. 文件的打开模式 总的来说,文件的打开模式有三

如何使用python读写文件?

今天小编要跟大家分享的文章是如何使用python读写文件?熟悉python的小伙伴们都知道python 对文件的读写在程序开发中也是非常常见的操作,比如写入一些简单的系统日志.把爬虫采集的数据写入到本地文件等等,python入门新手和正在python学习的小伙伴快来看一看吧,希望能够对大家有所帮助 ! 今天我们就详细说下怎么用 python去读写一个文件. <img src="http://www.magedu.com/wp-content/uploads/2019/12/timg-4.j

Python读写文件

Python读写文件1.open使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('thefile.txt')try:     all_the_text = file_object.read( )finally:     file_object.close( ) 注:不能把open语句放在try块里,因为当打开文件出现异常时,文件对象file_object无法执行close()方法.

鱼C《零基础入门学习Python》10-17节课时知识点总结

第10讲:列表:一个打了激素的数组 1. 列表都可以存放一些什么东西?  我们说 Python 的列表是一个打了激素的数组,如果把数组比喻成集装箱,那么 Python 的列表就是一个大仓库,Ta 可以存放我们已经学习过的任何数据类型. 2. 向列表增加元素有哪些方法?  三种方法想列表增加元素,分别是:append().extend() 和 insert().    3. append() 方法和 extend() 方法都是向列表的末尾增加元素,请问他们有什么区别?  append() 方法是将

Python读写文件实际操作的五大步骤

Python读写文件在计算机语言中被广泛的应用,如果你想了解其应用的程序,以下的文章会给你详细的介绍相关内容,会你在以后的学习的过程中有所帮助,下面我们就详细介绍其应用程序. 一.打开文件 Python读写文件在计算机语言中被广泛的应用,如果你想了解其应用的程序,以下的文章会给你详细的介绍相关内容,会你在以后的学习的过程中有所帮助,下面我们就详细介绍其应用程序.代码如下: f = open("d:\test.txt", "w") 说明: 第一个参数是文件名称,包括路

Python读写文本文档详解

以下3步问正确的程序片段: 1.写文件 #! /usr/bin/python3 'makeTextFile.py -- create text file' import os def write_file(): "used to write a text file." ls = os.linesep #get filename fname = input("Please input filename:") while True: if os.path.exists(

Linux运维人员如何学习python编程

从不会写代码,到自己独立能写代码解决问题 .这个问题很重要!盲目学习所谓的项目,最后 还是不会自己写代码解决问题.首先解决了独立能写代码解决问题,再通过项目来加强训练. 运维必须懂开发,特别是python开发,已经形成大家的共识,不懂开发的运维,路会越走越窄. 部分运维遇到的困难是:有的连书都不懂:有的书是可以看懂,别人写的简单代码也可以看懂,但自己不会写代码解决问题. 笔者认为学习编程不止是学习语法,需要学习算法(计算思维.解决问题的方法.编程思路). 何为计算思维: 计算思维(Computa