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
英文地址,請注明出處:http://en.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;要做到復制…