【ros-noetic rosserial_stm32】make_libraries.py 中 ros_lib.txt 文件 报错解决方法

本文讲述了作者在使用rosserial_stm32构建STM32与ROS通信时遇到的文件复制错误,原因是make_libraries.py中的shutil.copy函数未能找到目标文件。通过编辑脚本并创建目标文件路径,成功解决了这个问题。
摘要由CSDN通过智能技术生成
报错如下:
qizerone@qizerone-virtual-machine:~/Documents/STM32$ rosrun rosserial_stm32 make_libraries.py . [rosrun] You have chosen a non-unique executable, please pick one of the following: 1) /home/qizerone/catkin_stm32_ws/devel/share/rosserial_stm32/make_libraries.py 2) /home/qizerone/catkin_stm32_ws/src/rosserial_stm32/src/rosserial_stm32/make_libraries.py #? 2 Exporting to . Traceback (most recent call last): File "/home/qizerone/catkin_stm32_ws/src/rosserial_stm32/src/rosserial_stm32/make_libraries.py", line 90, in <module> shutil.copy(rosserial_stm32_dir+"/src/ros_lib/"+f, path+"/Inc/") File "/usr/lib/python3.8/shutil.py", line 418, in copy copyfile(src, dst, follow_symlinks=follow_symlinks) File "/usr/lib/python3.8/shutil.py", line 264, in copyfile with open(src, 'rb') as fsrc, open(dst, 'wb') as fdst: IsADirectoryError: [Errno 21] Is a directory: './Inc/
1、遇错情况

注:遇到这问题是在笔者使用rosserial_stm32尝试使stm32和ros建立通讯。在运行make_libraries.py时报错

命令如下:

rosrun rosserial_stm32 make_libraries.py .

报错如下:

qizerone@qizerone-virtual-machine:~/Documents/STM32$ rosrun rosserial_stm32 make_libraries.py .
[rosrun] You have chosen a non-unique executable, please pick one of the following:
1) /home/qizerone/catkin_stm32_ws/devel/share/rosserial_stm32/make_libraries.py
2) /home/qizerone/catkin_stm32_ws/src/rosserial_stm32/src/rosserial_stm32/make_libraries.py
#? 2

Exporting to .
Traceback (most recent call last):
  File "/home/qizerone/catkin_stm32_ws/src/rosserial_stm32/src/rosserial_stm32/make_libraries.py", line 90, in <module>
    shutil.copy(rosserial_stm32_dir+"/src/ros_lib/"+f, path+"/Inc/")
  File "/usr/lib/python3.8/shutil.py", line 418, in copy
    copyfile(src, dst, follow_symlinks=follow_symlinks)
  File "/usr/lib/python3.8/shutil.py", line 264, in copyfile
    with open(src, 'rb') as fsrc, open(dst, 'wb') as fdst:
IsADirectoryError: [Errno 21] Is a directory: './Inc/
2、解决思路:

    报错原因是因为在make_libraries.py中shutil.copy(rosserial_stm32_dir+"/src/ros_lib/"+f, path+"/Inc/"):这是导致错误的代码行。在这行代码中,脚本试图使用shutil.copy函数复制文件。它的参数应该是一个文件的路径,代码运行时需要直接寻找到ros_lib.txt来替换掉它的内容。但是在刚使用rosserial_stm32时,是没有在"/Inc/"下是没有ros_lib.txt文件的。所以需要我们自己修改代码创建ros_lib.txt的。

3、解决方案:

 1、编辑make_libraries.py文件。

 sudo gedit /home/qizerone/catkin_stm32_ws/src/rosserial_stm32/src/rosserial_stm32/make_libraries.py

自己改错的话,需要自己更改为你的路径。

2、创建原始文件路径和目标文件路径,判断并创建目标文件

        添加代码如下:

source_file = "ros_lib.txt"  # 原始文件的路径
target_file = "./Inc/ros_lib.txt"  # 目标文件的路径

os.makedirs(os.path.dirname(target_file), exist_ok=True)#判断文件目标是否存在

3、至此问题解决,make_libraries.py且能正常运行。

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值