自启动服务配置

操作环境及软硬件配置如下:


 - 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的频率闪烁。