ROS自定义功能包运行报错:package ‘XXX‘ not found

自定义了一个功能包txtread,修改了CMakeLists.txt和package.xml,catkin_make顺利,看到了终端显示traversing 7 packages in topological order中有txtread。roscore后,rosrun txtread txtread.py时,报错:

$ rosrun txtread txtread.py
[rospack] Error: package ‘txtread’ not found

没找到功能包,用tab也确实看不到txtread。

参考链接,先在catkin工作路径~/catkin_ws_txt下运行

cd ~/catkin_ws_txt
source ~/catkin_ws_txt/devel/setup.bash

使环境变量有效后,再输入rosrun txt,tab键可以自动出txtread了。

永久设置source的方法: 在终端修改bashrc。

gedit ~/.bashrc

在尾端加上source ~/catkin_ws_txt/devel/setup.bash,保存。
命令source ~/.bashrc使之生效。

但是python文件仍然tab不出来。运行rosrun txtread txtread.py后报错:

[rosrun] Couldn’t find executable named txtread.py below /home/xxx/catkin_ws_txt/src/txtread
[rosrun] Found the following, but they’re either not files,
[rosrun] or not executable:
[rosrun] /home/xxx/catkin_ws_txt/src/txtread/src/txtread.py

没有找到可执行文件,按道理python文件只要保存一下,不用catkin_make编译,就是可执行的。问题出在哪了?

参考链接,python文件没有权限,转到txtread.py所在目录,用chmod +x命令设置文件权限:

~/catkin_ws_txt/src/txtread/src$ chmod +x txtread.py

再运行就ok了。

chmod详见链接


程序中包含读取txt文件的语句

filename = 'a.txt'
fp = open(filename,'r')

报错IOError: [Errno 2] No such file or directory: 'a.txt’

在文件所在文件夹打开终端。
修改了文件权限:chmod 777 a.txt
查看文件权限:ls -l a.txt
重新运行没有成功。

用vim打开,查看编码方式:
vi a.txt
:set ff
:wq
为unix的编码方式。

python的open():如果要打开的文件和当前执行的代码文件位于同一目录,则直接写文件名即可;否则,此参数需要指定打开文件所在的完整路径。
但是代码文件和要打开的文件就在一个文件夹。
修改路径为绝对路径:

filename = '/home/xxx/catkin_ws_txt/src/txtread/a.txt'
fp = open(filename,'r')

注:在a.txt所在文件打开终端,pwd命令查看绝对路径。一定要用pwd看,自己以为的路径很容易错!

至此解决了IOError。


参考链接
python读取txt内容需要注意的是,Windows 中默认的文件格式是 cp936(通常被视为等同 GBK), 而 Linux 一般都是 UTF-8。

使用 open() 打开文件时,默认采用 GBK 编码。但当要打开的文件不是 GBK 编码格式时,可以在使用 open() 函数时,手动指定打开文件的编码格式。
不过用语句rospy.loginfo(fp.encoding)打印文件编码方式时,输出是None,不知道是为什么,好像在roboware中的python默认不能正常查看和改变编码方式。

在所在文件夹打开终端,用vi a.txt打开文件,:set fileencoding命令查看编码方式,为utf-8。


以16进制查看文件内容:
链接


将shell命令的结果输出到txt文件中
使用>>追加的方式,把ls命令打印出的内容保存到txt格式的hello文件中。
ls >> hello.txt
在命令执行的路径下会多出一个hello.txt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值