orangepi5pro香橙派5PRO自启动roslaunch脚本
香橙派5Pro ROS自启动方案摘要:本文介绍两种设置ROS节点自启动的方法。方法一通过修改rc.local文件,直接添加启动脚本路径。方法二采用systemd服务方式,创建自定义服务文件并配置启动参数。提供的启动脚本包含60秒延迟、环境变量加载、ROS节点启动(livox驱动)和自动bag录制功能,支持数据记录和错误分析。两种方法均可实现系统启动时自动运行ROS相关服务,满足不同场景需求。
香橙派5 Pro 实现 ROS Launch 脚本开机自启(附自动录包)
在香橙派5 Pro上部署ROS项目时,常常需要让核心的roslaunch脚本开机自动运行,同时自动录制ROS数据包(bag)以便后续数据分析和故障排查。本文详细介绍两种可靠的自启动配置方法(rc.local、Systemd Service),并提供可直接复用的脚本模板,兼顾实用性和稳定性。
核心需求说明
- 开机自动启动指定的ROS节点(通过
roslaunch实现) - 自动录制ROS话题数据包,支持按时长分片,避免单文件过大
- 保证自启动脚本在网络就绪后执行,避免ROS环境加载异常
方法一:通过 rc.local 配置自启动(简单易用)
rc.local是Linux系统中传统的开机自启配置文件,适合简单场景的快速部署。
1. 编辑 rc.local 文件
sudo nano /etc/rc.local
2. 添加自启动脚本调用
在文件中exit 0之前添加以下内容(注意脚本路径需替换为实际路径):
# 调用ROS自启动脚本(后台执行,避免阻塞系统启动)
/home/orangepi/shell_auto_run/startup.sh > /tmp/ros_startup.log 2>&1 &
> /tmp/ros_startup.log 2>&1:将脚本输出和错误日志重定向到文件,方便排查问题- 末尾的
&:让脚本在后台运行,不阻塞系统启动流程
3. 赋予 rc.local 可执行权限
sudo chmod +x /etc/rc.local
方法二:通过 Systemd Service 配置自启动(推荐,稳定可控)
Systemd是主流Linux发行版的系统服务管理器,相比rc.local,支持更精细的启动控制(如依赖检查、重启策略、日志管理),是生产环境的首选方案。
1. 创建 Systemd 服务文件
执行以下命令创建服务配置文件:
sudo nano /etc/systemd/system/ros_auto_run.service

2. 写入服务配置内容
复制以下内容到文件中(关键参数已标注说明):
[Unit]
# 定义服务依赖:确保网络完全就绪后再启动该服务,避免ROS网络初始化失败
After=network-online.target multi-user.target
Wants=network-online.target
# 服务描述,自定义即可
Description=ROS Auto Run Service (OrangePi 5 Pro)
[Service]
# 简单模式,脚本启动后一直运行
Type=simple
# 执行脚本的用户(必须为普通用户,避免root运行ROS带来权限问题)
User=orangepi
Group=orangepi
# 核心:指定要执行的自启动脚本路径
ExecStart=/home/orangepi/shell_auto_run/startup.sh
# 关闭自动重启(根据需求调整,调试阶段可改为on-failure)
Restart=no
# Restart=on-failure # 可选:脚本异常退出时自动重启
# RestartSec=5s # 可选:重启间隔5秒
# 日志重定向到系统日志,可通过journalctl查看
StandardOutput=journal
StandardError=journal
# 避免服务被OOM killer终止
OOMScoreAdjust=-1000
[Install]
# 设置为多用户模式下的开机自启
WantedBy=multi-user.target
3. 设置服务文件权限
sudo chmod 644 /etc/systemd/system/ros_auto_run.service
4. 配置并启动服务
# 重新加载systemd配置,使新服务生效
sudo systemctl daemon-reload
# 设置开机自启
sudo systemctl enable ros_auto_run.service
# 立即启动服务(测试用,无需重启系统)
sudo systemctl start ros_auto_run.service
5. 常用服务管理命令
# 查看服务运行状态
sudo systemctl status ros_auto_run.service
# 查看服务日志(排查问题必备)
journalctl -u ros_auto_run.service -f
# 停止服务
sudo systemctl stop ros_auto_run.service
# 取消开机自启
sudo systemctl disable ros_auto_run.service
关键:编写自启动脚本(包含ROS启动+自动录包)
上述两种方法最终都依赖startup.sh脚本实现核心功能,以下是经过优化的脚本模板,解决了ROS环境加载、延时启动、后台录包等关键问题。
1. 创建并编辑脚本文件
mkdir -p /home/orangepi/shell_auto_run
nano /home/orangepi/shell_auto_run/startup.sh
2. 写入脚本内容
#!/bin/bash
#!/bin/bash
export ROS_HOSTNAME=orangepi
export ROS_MASTER_URI=http://10.42.0.221:11311
export ROS_IP=10.42.0.221
sleep 60
source /home/orangepi/.bashrc
source /opt/ros/noetic/setup.bash
sudo chmod 777 /dev/ttyACM0 &
sleep 2
nohup bash -c "export ROS_HOSTNAME=orangepi; export ROS_IP=10.42.0.221; roslaunch mavros px4.launch" > /dev/null 2>&1 &
sleep 10
# 新增MAVROS指令(无日志输出)
bash -c "export ROS_HOSTNAME=orangepi; export ROS_IP=10.42.0.221; rosrun mavros mavcmd long 511 105 5000 0 0 0 0 0" > /dev/null 2>&1 & sleep 1;
bash -c "export ROS_HOSTNAME=orangepi; export ROS_IP=10.42.0.221; rosrun mavros mavcmd long 511 31 5000 0 0 0 0 0" > /dev/null 2>&1 & sleep 1;
sleep 10
cd /home/orangepi/code/livox_ws
source devel/setup.bash
nohup bash -c "export ROS_HOSTNAME=orangepi; export ROS_IP=10.42.0.221; roslaunch livox_ros_driver2 msg_MID360.launch" > /dev/null 2>&1 &
sleep 15
cd /home/orangepi/code/livox_ws
source devel/setup.bash
nohup bash -c "export ROS_HOSTNAME=orangepi; export ROS_IP=10.42.0.221; roslaunch fast_lio mapping_mid360.launch" > /dev/null 2>&1 &
sleep 10
cd /home/orangepi/code/fast_drone_ws
source devel/setup.bash
nohup bash -c "export ROS_HOSTNAME=orangepi; export ROS_IP=10.42.0.221; roslaunch ego_planner single_run_in_exp.launch" > /dev/null 2>&1 &
cd /home/orangepi/bag_save_auto
sleep 999999
exit 1
3. 赋予脚本可执行权限
sudo chmod +x /home/orangepi/shell_auto_run/startup.sh
关键优化点说明
- 延时启动(sleep 60):避免开机后系统资源未就绪(如网络、USB设备)导致ROS启动失败;
- 手动加载ROS环境:自启动脚本默认不继承用户的bash环境,必须显式source ROS和工作空间的setup.bash;
- 日志重定向:将roslaunch和rosbag的输出日志保存到文件,方便后续排查启动失败、录包异常等问题;
- nohup + 后台运行:确保roslaunch和rosbag在脚本后台持续运行,不受终端关闭影响;
- 数据包分片:
--split --duration=60m表示每60分钟生成一个新的bag文件,避免单文件过大导致存储不足或损坏。
测试与排错
- 手动执行脚本测试:先直接运行脚本,确认ROS启动和录包功能正常:
/home/orangepi/shell_auto_run/startup.sh - 检查录包是否正常:查看
/home/orangepi/bag_save_auto1目录下是否生成.bag文件; - 检查ROS节点状态:执行
rosnode list查看节点是否正常启动; - 查看服务日志:若Systemd服务启动失败,通过
journalctl -u ros_auto_run.service -f查看详细错误信息。
总结
- 香橙派5 Pro实现ROS自启动推荐使用Systemd Service方式,相比rc.local更稳定,支持日志和依赖管理;
- 自启动脚本必须手动加载ROS环境变量(
source setup.bash),并增加延时启动避免系统就绪不全; - 自动录包时建议开启分片功能(
--split),同时将日志重定向到文件,方便后续问题排查。
昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链
更多推荐


所有评论(0)