自启动服务配置
操作环境及软硬件配置如下:
- OriginEye 智能相机
- PC:Ubuntu (≥20.04) + ROS2 (≥Foxy) + VSCode
在机器人开发过程中,开发者经常有一个诉求,机器上电启动后自动执行某些程序,而不需要进入终端敲入一些指令后再执行。
自启动服务配置就可以帮助我们完成这样一件事。接下来以开机让OriginEye上的绿灯以1s的频率进行闪烁为例,向大家演示如何完成自启动服务配置。
效果演示
—插入gif图
代码实现
实现LEd灯的闪烁需要控制核心SOM的引脚,并对其进行IO状态切换,以下是实现例程:
在/userdata/dev_ws/src/origineye/3rdparty中创建led_control.py文件。
详细的代码如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys # 系统库
import signal # 线程库
import time # 时间库
import Hobot.GPIO as GPIO # 核心板控制GPIO库文件
def signal_handler(signal, frame):
sys.exit(0)
# 定义使用的GPIO通道:
# 27号作为输出,可以点亮一个LED
led_pin = 27
# 禁用警告信息
GPIO.setwarnings(False)
"""
实现以1s的频率让led灯闪烁
"""
def main():
# 设置GPIO模式并对对其初始化
GPIO.setmode(GPIO.BOARD)
GPIO.setup(led_pin, GPIO.OUT, initial=GPIO.HIGH)
GPIO.output(led_pin, GPIO.HIGH)
print("Starting demo now! Press CTRL+C to exit")
curr_value = GPIO.HIGH
prev_value = GPIO.LOW
try:
# 实现变化逻辑
while True:
if curr_value != prev_value:
GPIO.output(led_pin, curr_value)
temp = curr_value
curr_value = prev_value
prev_value = temp
print("Outputting {} to Pin {}".format(curr_value, led_pin))
time.sleep(1)
finally:
GPIO.cleanup() # 清除所有GPIO的设置
if __name__ == '__main__':
signal.signal(signal.SIGINT, signal_handler)
main()
完成代码Coding后需要验证代码可行性
$ chmod 777 led_control.py
$ python3 led_control.py
运行效果如下图
—插入图片
设置自启动Service
创建启动脚本
进入/etc/init.d中创建一个服务脚本
$ cd /etc/init.d
$ vi led_serve
在led_serve中输入以下内容
#!/bin/bash
### BEGIN INIT INFO
# Provides: your_service_name
# Required-Start: $all
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start your_service_name at boot time
# Description: Enable service provided by your_service_name
### END INIT INFO
python3 /userdata/dev_ws/src/origineye/3rdparty/led_control.py
exit 0
设置启动脚本具有可执行权限
给 led_serve 可执行权限
$ sudo chmod u+x /etc/init.d/led_serve
将脚本添加到系统的启动项中
$ sudo update-rc.d led_serve defaults
启用自启动
$ sudo systemctl enable led_serve
如果希望取消自启动,可以使用 sudo systemctl disable led_serve
重启之后即可看到LED正以1s的频率闪烁。
评论(0)
您还未登录,请登录后发表或查看评论