项目场景:
我需要使用香橙派的gpio引脚控制舵机,在ros工作空间下写的python程序。
问题描述
运行该脚本程序我试了两种方法:
方法一:
sudo python3 servo_control.py
但是这个可能是我环境没有配好,就一直包环境包找不到,
Traceback (most recent call last):
File "./src/platform_control/script/platform_control.py", line 64, in <module>
main()
File "./src/platform_control/script/platform_control.py", line 56, in main
rospy.init_node('platform_control_node', anonymous=True)
File "/usr/lib/python3/dist-packages/rospy/client.py", line 309, in init_node
rospy.core.configure_logging(resolved_node_name)
File "/usr/lib/python3/dist-packages/rospy/core.py", line 405, in configure_logging
_log_filename = rosgraph.roslogging.configure_logging('rospy', level, filename=filename)
File "/usr/lib/python3/dist-packages/rosgraph/roslogging.py", line 156, in configure_logging
rosgraph_d = rospkg.RosPack().get_path('rosgraph')
File "/usr/lib/python3/dist-packages/rospkg/rospack.py", line 207, in get_path
raise ResourceNotFound(name, ros_paths=self._ros_paths)
rospkg.common.ResourceNotFound: rosgraph
我明明已经安装过了
sudo apt-get install ros-noetic-rosgraph
而且可以在终端进入python3环境导入,但是运行程序的时候就是报错,然后就没管了
方法二:
rosrun servo_control servo_control.py
在source之后运行节点的方式运行,但是这个也报错了:
Traceback (most recent call last):
File "/home/orangepi/HPCP_platform_ws/src/platform_control/script/platform_control.py", line 11, in <module>
import BusServoCmd
File "/home/orangepi/HPCP_platform_ws/src/platform_control/script/BusServoCmd.py", line 53, in <module>
portInit()
File "/home/orangepi/HPCP_platform_ws/src/platform_control/script/BusServoCmd.py", line 48, in portInit
GPIO.setup(rx_pin, GPIO.OUT) # 配置RX_CON 即 GPIO17 为输出
File "/usr/local/lib/python3.8/dist-packages/OPi/GPIO.py", line 482, in setup
sysfs.direction(pin, direction)
File "/usr/local/lib/python3.8/dist-packages/OPi/sysfs.py", line 52, in direction
with open(path, "w") as fp:
PermissionError: [Errno 13] Permission denied: '/sys/class/gpio/gpio47/direction'
说对gpio没有权限,但是我也对py脚本加了权限的,也对/sys/class/gpio/gpio47/direction加了权限,但是也不行。
原因分析:
有大佬知道可以提示下我^.^
解决方案:
使用root用户运行rosrun
在终端进入root
sudo su
输入密码后进入root
开两个终端,都source一下ros和工作空间的环境
source /opt/ros/noetic/setup.bash #看看自己的ros版本替换(noetic)
source ./devel/setup.bash
一个终端启动roscore,另一个终端就启动程序,就可以了。
ps:为啥我用gpt推荐的使用 sudo
并保留用户环境
通过 -E
选项可以保留当前用户的环境变量,从而使 sudo
下的 ROS 命令可用:
sudo -E rosrun platform_control platform_control.py
这会保留当前用户的环境设置,包括 ROS 的环境变量,使得 rosrun
可用。
提示我没有这个rosrun命令呢?