ROS1系列学习笔记之T265的Python数据订阅显示、串口输出到凌霄飞控,以及开机自启动设置等一些问题处理方法(持续更新)

前言

关于T265的环境配置与安装,在前两期的ROS笔记中已经提及,包括英特尔本家的SDK安装,以及对应支持版本的ROS支持开发工具包。

ROS1系列学习笔记之Linux(Ubuntu)的环境安装、依赖准备、踩坑提示(硬件以T265为例)https://blog.csdn.net/2301_81315771/article/details/150229967?spm=1001.2014.3001.5501本期主要来讲讲T265的使用过程中遇到的问题的解答(持续更新)。


启动T265,调用例程的三个基本指令:

roslaunch realsense2_camera rs_t265.launch
rostopic list
rostopic echo /camera/odom/sample

订阅ros节点获取T265实时数据并通过串口输出:

首先运行ROS的T265节点:

roslaunch realsense2_camera rs_t265.launch

软件前提:需安装VSCode来运行以下代码!

t265数据按照通信规则输出:

#!/usr/bin/env python3
import rospy
import serial
import struct
from nav_msgs.msg import Odometry# 协议常量(按照匿名飞控的要求)
HEAD = 0xAA
D_ADDR = 0xFF
MSG_ID = 0x32  # 通用位置型传感器数据
DATA_LEN = 12  # 3个S32=12字节
INVALID_DATA = 0x80000000def calc_checksums(data_buf):"""双校验计算"""sumcheck = addcheck = 0for byte in data_buf:sumcheck = (sumcheck + byte) & 0xFFaddcheck = (addcheck + sumcheck) & 0xFFreturn sumcheck, addcheckdef odom_callback(msg):# 单位转换:m→mm,并处理无效值(S32范围检查)def convert_position(val):mm_val = int(round(val * 1000))  # m→mm转换if -2147483648 <= mm_val <= 2147483647:return mm_valreturn INVALID_DATA  # 超出S32范围时标记无效pos_data = [convert_position(msg.pose.pose.position.x),convert_position(msg.pose.pose.position.y),convert_position(msg.pose.pose.position.z)]# 构建数据帧(小端序打包)frame_head = bytes([HEAD, D_ADDR, MSG_ID, DATA_LEN])frame_data = struct.pack('<3i', *pos_data)  # 3个 S32结构frame = frame_head + frame_data# 计算校验(SC+AC)sumcheck, addcheck = calc_checksums(frame)frame += bytes([sumcheck, addcheck])# 发送完整协议帧ser.write(frame)# 调试输出(显示实际发送的毫米值)debug_info = " | ".join(f"{'X' if i==0 else 'Y' if i==1 else 'Z'}="f"{f'{val}mm' if val!=INVALID_DATA else 'INVALID'}"for i, val in enumerate(pos_data))rospy.loginfo(f"Sent ID:0x{MSG_ID:02X} Frame: {debug_info}")if __name__ == '__main__':# 初始化ROS节点rospy.init_node('position_sensor_protocol')# 串口配置ser = serial.Serial(port='/dev/ttyUSB0',baudrate=115200,bytesize=serial.EIGHTBITS,parity=serial.PARITY_NONE,stopbits=serial.STOPBITS_ONE,timeout=1)try:# 订阅Odometry话题rospy.Subscriber('/camera/odom/sample', Odometry, odom_callback)rospy.loginfo("Position sensor protocol transmitter started")rospy.spin()finally:ser.close()

在启动ROS节点之后,使用VSCode运行该代码,即可通过串口输出相应的数据,串口的相关参数也可以简单修改,通信格式也可以按照自己的需求修改。此处是按照凌霄飞控的通信协议写入指定参数使用的程序。

问题汇总:


问题描述:如何配置以上的功能(启动ros节点+订阅节点打开串口数据传输)的开机自启动?

在主目录下.bashrc文件中加入自启动命令,调试观察自启动现象

失败,提示权限不足或者环境错误

# 开机自启动T265
sleep 10  # 等待系统初始化
source /opt/ros/noetic/setup.bash
roslaunch realsense2_camera rs_t265.launch &
python3 /home/pi/t265.py  # 修改为实际路径

始终没有办法进行开机自启动,发现是没有在启动时包含ros环境以及py依赖

报错:明确看到 t265.service 服务启动失败,报错 status=217/USER

这是典型的 用户权限或环境配置问题

自启动解决方案:

使用 systemd 服务,创建.service

sudo nano /etc/systemd/system/t265.service
1.检查脚本权限和路径

确认脚本的 所有权执行权限

ls -l /home/wheeltec/catkin_ws/t265/t265.py

确保用户是自己的用户名即可

2.补充 systemd 环境变量

编辑服务文件,显式加载所需环境变量(如 ROS、Python 虚拟环境、DISPLAY 等)

[Unit]
Description=T265 Python Program
After=network.target roscore.service  # 如果依赖 ROS[Service]
Type=simple
User=wheeltec
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
Environment="PYTHONPATH=/home/wheeltec/catkin_ws/devel/lib/python3/dist-packages"  # ROS Python 路径
Environment="DISPLAY=:0"  # 如果脚本需要图形界面
ExecStart=/usr/bin/python3 /home/wheeltec/catkin_ws/t265/t265.py
Restart=on-failure
RestartSec=5s[Install]
WantedBy=multi-user.target
3. 重新加载并重启服务
sudo systemctl daemon-reload
sudo systemctl restart t265.service
sudo systemctl status t265.service  # 检查状态
出现报错:
ModuleNotFoundError:No module named 'rospy'
1.手动加载 ROS 环境后运行 Python 测试
source /opt/ros/noetic/setup.bash  # noetic
python3 -c "import rospy; print('rospy 导入成功')"
2. 修改 systemd 服务文件
[Unit]
Description=T265 ROS Node
After=network.target roscore.service[Service]
Type=simple
User=wheeltec
Environment="PYTHONPATH=/opt/ros/noetic/lib/python3/dist-packages"  # 关键!
ExecStart=/bin/bash -c "source /opt/ros/noetic/setup.bash && /usr/bin/python3 /home/wheeltec/catkin_ws/t265/t265.py"
Restart=on-failure
RestartSec=5s[Install]
WantedBy=multi-user.target
3.重新加载并重启服务
sudo systemctl daemon-reload
sudo systemctl restart t265.service
sudo systemctl status t265.service  # 检查状态

按照如上方式测试之后,可以实现自启动t265程序,并向串口发送位置数据。


问题描述:已跑通t265的ROS相关包,但是在读取参数时报错。

处理队列长度参数不对齐,导致无法启动

使用多种方法都无法找到对应参数:frame_queue_size,直接在服务器和终端中配置参数均失败……

尝试在rs_rtabmap.launch文件中修改参数,奈何其为只读文件缺少关键权限,使用指令强行写入:

sudo vim 文件名;i插入;;wq Enter;保存退出

问题解决!


再次启动ros查看T265的例程数据信息:


roslaunch realsense2_camera demo_t265.launch 可视化模型

调整queue size以适应响应速度和准度,同时兼顾效率和性能,在0-32之间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/95278.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/95278.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UART控制器——ZYNQ学习笔记14

UART 控制器是一个全双工异步收发控制器&#xff0c; MPSoC 内部包含两个 UART 控制器&#xff0c; UART0 和 UART1。每一个 UART 控制器支持可编程的波特率发生器、 64 字节的接收 FIFO 和发送 FIFO、产生中断、 RXD 和TXD 信号的环回模式设置以及可配置的数据位长度、停止位和…

C++ 登录状态机项目知识笔记

C 登录状态机项目知识笔记 1. 项目源码 1.1 login_state_machine.h #pragma once#include <string>// 登录状态枚举 enum class LoginState { IDLE, AUTHENTICATING, SUCCESS, FAILURE, LOCKED };// 登录事件枚举 enum class LoginEvent { REQUEST, SUCCESS, FAILURE, RE…

docker-nacos-v3

nacos官网&#xff1a; Redirecting to: https://nacos.io/ 服务发现和服务健康监测 Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的Agent TODO注册 Service 后&#xff0c;服务消费者可以使用DNS TODO 或HTTP&API查找和发现服…

DevOps 详解:文化、实践与工具链

目录一、DevOps 定义与核心目标二、DevOps 关键原则与实践1. 持续集成&#xff08;CI&#xff0c;Continuous Integration&#xff09;2. 持续交付&#xff08;CD&#xff0c;Continuous Delivery&#xff09;3. 持续部署&#xff08;Continuous Deployment&#xff09;4. 监控…

人工智能之数学基础:常用的连续型随机变量的分布

本文重点 本文将介绍概率中非常重要的连续型随机变量的分布,主要有均匀分布、指数分布、正态分布 均匀分布 若随机变量X的概率密度为: 如果概率密度函数如上所示,则称X服从区间[ a, b]上的均匀分布,记作X~U[a,b] 均匀分布的概率密度函数的计算如下: 指数分布 指数分布…

【开题答辩全过程】以 校园帮帮团跑腿系统的设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

Milvus 向量数据库开发实战指南

Milvus向量数据库是什么&#xff1f;-CSDN博客 一、核心概念解析 1.1 基础概念 1.1.1 Bitset&#xff08;位集&#xff09; 高效的数据表示方式&#xff0c;使用位数组替代传统数据类型 默认情况下&#xff0c;位值根据特定条件设置为 0 或 1 1.1.2 通道机制 PChannel&am…

vcruntime140.dll丢失解决办法

解决办法 安装Microsoft Visual C Redistributable https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?viewmsvc-170

LabVIEW实现跨 VI 簇按钮控制功能

​在 LabVIEW 开发场景中&#xff0c;常需实现不同 VI 间的交互操作。本功能借助 VI Server 技术&#xff0c;突破 VI 边界&#xff0c;实现对目标 VI 中簇内按钮控件的属性读取与控制&#xff0c;为多 VI 协同、对VI里已经实现的功能&#xff0c;可以在其他VI中直接使用&#…

JS箭头函数

JavaScript 的箭头函数 (Arrow Function) 是 ES6 (ECMAScript 2015) 引入的一种重要的函数语法特性&#xff0c;它用更简洁的方式定义函数&#xff0c;并改变了 this 的绑定行为。 箭头函数和传统函数的主要区别&#xff1a;特性箭头函数传统函数语法更简洁&#xff0c;省略 fu…

linux内核 - 文件系统相关的几个概念介绍

介绍文件系统之前&#xff0c;先了解下存储管理的几个概念&#xff1a;1. 硬盘&#xff1a;是最底层的存储介质&#xff0c;比如 /dev/sda, /dev/nvme0n1. 一个物理硬盘就是一个块设备&#xff0c;未经处理是只能顺序读写二进制数据。 2. 分区&#xff1a;就是在硬盘上划分出不…

边缘计算(Edge Computing)+ AI:未来智能世界的核心引擎

边缘计算&#xff08;Edge Computing&#xff09; AI&#xff1a;未来智能世界的核心引擎 文章目录边缘计算&#xff08;Edge Computing&#xff09; AI&#xff1a;未来智能世界的核心引擎摘要什么是边缘计算&#xff1f;为什么需要边缘计算&#xff1f;1. 延迟问题2. 带宽压力…

计算机视觉与深度学习 | ORB-SLAM3算法原理与Matlab复现指南

文章目录 一、算法核心原理 1.1 系统架构概述 1.2 数学模型基础 1.2.1 状态估计框架 1.2.2 视觉-惯导融合模型 1.3 关键创新点 二、关键模块实现细节 2.1 ORB特征提取与匹配 2.2 地图初始化 2.3 视觉-惯导融合 2.4 回环检测与优化 三、Matlab复现思路 3.1 系统模块划分 3.2 核心…

分布式光伏模式怎么选?从 “凭经验” 到 “靠数据”,iSolarBP 帮你锁定最优解

iSolarBP-阳光新能源旗下分布式光伏光储智能评估设计软件 iSolarBP是阳光新能源打造的分布式光伏/光储项目智能设计平台。提供无人机自动勘测、3D建模、高精度发电仿真、光储容量优化与经济分析一站式服务&#xff0c;助力开发者提升效率、降低成本和优化投资收益。https://iso…

MATLAB R2010b系统环境(四)MATLAB帮助系统

一、帮助命令MATLAB帮助命令包括help、lookfor以及模糊查询。1.1 help命令在命令窗口中直接输入help或help加函数名。&#xff08;1&#xff09;help&#xff1a;显示当前帮助系统中所包含的所有项目&#xff0c;即搜索路径中所有的目录名称&#xff0c;如下图&#xff1a;&…

“便农惠农”智慧社区系统(代码+数据库+LW)

摘要 随着城市化进程加速和信息技术快速发展&#xff0c;传统社区管理模式已难以满足现代社区高效管理和居民多元化服务需求。为解决社区管理中的信息孤岛问题、提升服务效率并增强居民生活体验&#xff0c;本文设计并实现了一套基于Spring Boot框架的智慧社区管理系统。该系统…

智慧金融服务平台问题剖析与改进策略

智慧金融服务平台问题剖析与改进策略 在数字化浪潮的推动下&#xff0c;智慧金融服务平台蓬勃发展&#xff0c;为用户带来了便捷的金融服务体验。然而&#xff0c;随着用户数量的不断增加和业务的日益复杂&#xff0c;平台也暴露出一些问题&#xff0c;其中数据准确性不足、异常…

【Vue2✨】Vue2 入门之旅(三):数据与方法

在前两篇文章中&#xff0c;我们学习了 Vue 的基础和模板语法。本篇我们将深入 数据与方法&#xff0c;理解 data、methods、computed、watch 的作用和区别。 目录 datamethodscomputedwatch小结 data Vue 实例中的 data 是数据源&#xff0c;模板会自动响应其中的变化。 &l…

自动化测试时,chrome浏览器启动后闪退的问题

之前运行的好好的&#xff0c;最近再次练习时发现会闪退&#xff0c;然后发现是驱动版本老的问题 &#xff08;1&#xff09;下载与之匹配的驱动器版本 Chrome for Testing availability 找到与Chrome版本前3位相同的目录&#xff0c;下载对应系统的压缩包 &#xff08;2&am…

Dynamics 365 XrmToolBox工具之Clone Field Definitions

好久没有分享XrmToolBox的组件了&#xff0c;今天要分享的是下图中这个组件在建实体的时候&#xff0c;我们经常会碰到实体间一些字段存在重复&#xff0c;或者都可以直接复制黏贴加一些少量修改就可以生成第二个实体&#xff0c;但如果仅从D365本身来说&#xff0c;要做到复制…