You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

无需sudo权限在ROS中访问Odroid GPIO引脚问题求助

我来帮你搞定这个Odroid上ROS节点访问GPIO的权限难题,之前在折腾嵌入式ROS项目时也踩过类似的权限坑,给你几个经过验证的可行方案:

方案1:通过udev规则永久配置GPIO文件权限

Odroid的GPIO设备文件默认在/sys/class/gpio/路径下,wiringPiSetupSys()的正常工作依赖这些文件的读写权限。你可以通过udev规则永久修改权限,不用每次手动调整:

  • 创建udev规则文件:sudo nano /etc/udev/rules.d/99-gpio.rules
  • 在文件中写入以下内容:
    SUBSYSTEM=="gpio", GROUP="gpio", MODE="0660"
    SUBSYSTEM=="gpio*", PROGRAM="/bin/sh -c 'chown -R root:gpio /sys/class/gpio && chmod -R 0660 /sys/class/gpio'"
    
  • 将当前用户加入gpio用户组:sudo usermod -aG gpio $USER
  • 重新加载udev规则并触发生效:sudo udevadm control --reload-rules && sudo udevadm trigger
  • 注销当前用户再重新登录,此时你的普通用户就拥有GPIO文件的读写权限了,wiringPiSetupSys()应该能正常工作,无需sudo即可运行ROS节点。
方案2:给Python二进制文件添加GPIO权限能力

如果udev规则的方法不生效,你可以直接给Python程序添加系统IO权限,让它无需sudo就能访问GPIO:

  • 执行命令给系统Python添加权限:sudo setcap cap_sys_rawio+ep /usr/bin/python
  • 注意:如果你的ROS节点用的是虚拟环境里的Python,要替换成对应虚拟环境的Python路径,比如~/.virtualenvs/ros_kinetic/bin/python
  • 完成后,你的Python ROS节点就能直接调用wiringPi2访问GPIO,完全避开root环境的ROS配置问题。
方案3:改用ROS专用GPIO功能包替代wiringPi

如果不想折腾wiringPi的权限问题,试试专门为ROS开发的GPIO功能包,比如wiringpi_ros(已适配Odroid平台):

  • 安装功能包:sudo apt-get install ros-kinetic-wiringpi-ros
  • 这个包已经内置了权限处理逻辑,你可以直接在ROS节点中通过话题或服务调用GPIO读写接口,不用自己处理底层权限。
额外注意事项
  • 确认Odroid的物理引脚和wiringPi的编号映射正确,Odroid的引脚编号和树莓派存在差异,别搞混导致读取失败。
  • 如果使用wiringPiSetupSys(),记得在代码中先调用gpioExport(pin)导出目标引脚,否则可能无法正常读取数据。

内容的提问来源于stack exchange,提问作者akshayk07

火山引擎 最新活动