# tsp_lower **Repository Path**: tsprobot/tsp_lower ## Basic Information - **Project Name**: tsp_lower - **Description**: tsp下层主控 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2024-03-30 - **Last Updated**: 2026-04-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # tsp_lower ## 1.介绍 - 角色: 下位机采集侧。 - 负责高清相机采集、下位机传感器接入、图像保存和与上位机共享录制状态。 ## 2.功能 - 提供下位机设备部署、远程连接、编译运行和联调入口。 - 提供高清相机采集、图像存盘和下位机 bringup。 ## 3.结构 - 主要硬件: - 4K USB 高清相机 - RealSense D405 - fdilink_ahrs 姿态传感器 - 主要模块: - `tsp_image_saver`: 高清相机采集、预览和存盘 - `tsp_lower_bringup`: 下位机总装启动 ## 4.接口 - 关键控制话题: - `/recorder_time`: 录制开始/停止控制 - `//image_preview`: 预览图像输出 - `/tsp_lower/folder_info`: 下位机磁盘状态 - `/get_image_record_state`: 录制状态服务 ## 5.启动运行 ### 5.1 TSP 网络环境配置 - 网络硬件: - `GL-SFT1200`,工作在 Wi-Fi 中继模式,SSID: `GL-SFT1200-8d3` - `TL-WDR7650`,工作在路由模式,SSID: `tsp-5g`,重置后默认 SSID: `TP-LINK_0ABC` - 路由器访问地址: - `GL`: `192.168.8.1` - `TL`: `192.168.1.1` - 路由器密码: - `GL` 和 `TL` 登录密码: `TSP@516517518` - `TL` 无线密码: `tsp516517518` - DHCP 静态分配: - `tsp-upper` 有线网卡: `192.168.1.2` - `tsp-upper` 无线网卡: `192.168.1.3` - `tsp-lower` 有线网卡: `192.168.1.4` - `tsp-lower` 无线网卡: `192.168.1.5` - 连接关系: - `TL` 的 `WAN` 口连接到 `GL` 的 `LAN` 口 - `GL` 为中继模式,其上行地址由上级路由分配,例如实验室常见 `192.168.31.x`;切换手机热点后要按热点实际分配检查 - 当前下位机联调默认走无线口 `192.168.1.5` - `192.168.1.4` 为下位机有线口保留地址,当前基本不用 ### 5.2 系统配置 - 系统:ubuntu 20.04 - 机器名:n100 - 用户名:ros - 密码:1 - 电压:12V - 连接显示器,键盘鼠标 - 通过无线连接 `TL` 路由器,SSID 为 `tsp-5g` - 确认 `TL` 已通过 DHCP 静态分配给下位机无线口 `192.168.1.5` - 设置将用户改为自动登陆(需要使用hdmi欺骗器) 配置.bashrc ```bash if [ "$(cat ~/.bashrc | grep /opt/ros/noetic/setup.bash)" == "" ]; then echo source /opt/ros/noetic/setup.bash >> ~/.bashrc fi if [ "$(cat ~/.bashrc | grep catkin_ws/devel/setup.bash)" == "" ]; then echo source ${HOME}/catkin_ws/devel/setup.bash >> ~/.bashrc fi if [ "$(cat ~/.bashrc | grep ROS_HOSTNAME)" == "" ]; then echo export ROS_HOSTNAME=192.168.1.5 >> ~/.bashrc fi if [ "$(cat ~/.bashrc | grep ROS_MASTER_URI)" == "" ]; then echo export ROS_MASTER_URI=http://192.168.1.5:11311 >> ~/.bashrc fi source ~/.bashrc #测试连通 ping 192.168.1.2 #测试ros互联 roscore rosrun rospy_tutorials talker.py rosnode list rostopic list ``` ### 5.3 笔记本远程连接 ```bash #笔记本通过无线连接 TL 路由器,SSID 为 tsp-5g #vscode安装remote ssh插件,配置中填写下面内容 Host tsp_lower.local HostName 192.168.1.5 User ros port 22 ForwardX11 yes ForwardX11Trusted yes ForwardAgent yes ``` ### 5.4 设备号固定和自动启动 ```bash #下载机器人功能包 git clone https://gitee.com/linuxfly/tsp_lower.git ~/tsp/tsp_lower git clone https://gitee.com/linuxfly/tsp_common.git ~/tsp/tsp_common #编辑并确认udev设置 code ~/tsp/tsp_lower/set_udev_rules.sh #执行并重启 sudo ~/tsp/tsp_lower/./set_udev_rules.sh ls /etc/udev/rules.d/ sudo reboot #观察设备号是否固定 ls -l /dev/xxx #4k相机 ls -l /dev/xxx #RealSense D405深度相机 ls -l /dev/xxx #fdilink_ahrs姿态传感器 cp ~/tsp/tsp_lower/tsp_lower_autostart.desktop ~/.config/autostart/ #重启或注销查看 ``` ### 5.5 本机调试开发 ```bash #vscode连接后按ctrl+`,在终端中执行下面命令 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src catkin_init_workspace git clone https://gitee.com/linuxfly/fdilink_ahrs mv ~/tsp . cd ~/catkin_ws catkin_make ~/catkin_ws/src/tsp/tsp_lower/run_all.sh ``` ### 5.6 镜像部署和远程连接调试开发 ```bash #下载机器人功能包 git clone https://gitee.com/linuxfly/tsp_dockerfile.git ~/tsp/tsp_dockerfile #构建镜像 ~/tsp/tsp_dockerfile/./build.sh ubuntu-ros 20 ~/tsp/tsp_dockerfile/./build.sh ubuntu-tsprobot 20 #在开发机上同时启动 upper/lower 测试容器 ~/tsp/tsp_dockerfile/./run_test.sh 20 #vscode remote ssh 连接 lower 测试容器 Host tsp-lower.docker HostName 127.0.0.1 User root Port 2207 #容器 noVNC # upper: http://127.0.0.1:6086 # lower: http://127.0.0.1:6087 #vscode连接容器后按ctrl+`,在终端中执行下面命令 cd ~/ros_ws catkin_make ``` ## 6.常用操作 ### 6.1 测试realsense ```bash roslaunch realsense2_camera rs_camera.launch #开启rviz,fixed frame选择camera link,添加rgb和depth图像测试 ``` ### 6.2 测试高清摄像头保存图像 ```bash roslaunch tsp_image_saver image_saver.launch port:=/dev/video20 save_dir:=${HOME}/share prefix:=chongyang resolution:=4k imshow:=true #打开dynamic framerate会根据光线自动调整帧率,guvcview /dev/video20,关闭该项 #自动曝光、自动对焦、自动白平衡选项,需要实测后决定开启或关闭 ``` ### 6.3 磁盘空间使用测试 ```bash roslaunch tsp_files disk_info.launch ns:=tsp_lower path:=${HOME}/share #发布topic[/tsp_lower/folder_info],单位:MB,ns用于指定节点和消息的前缀,path用于指定监控大小的目录 rosnode info /tsp_lower/disk_info #查看自定义消息TspFolderInfo结构 rosmsg show tsp_msgs/TspFolderInfo --- string root_folder #存储目录 string unit #size单位 float32 disk_total_size #磁盘总大小 float32 disk_free_size #磁盘剩余空间 float32 disk_write_speed #磁盘写入速度 float32 disk_write_remaining_time #磁盘剩余写入时间 float32 folder_total_size #存储目录总大小 string[] subfolder_name #存储目录下的文件夹名称 float32[] subfolder_size #存储目录下每个文件夹大小 uint32[] subfolder_img_count #存储目录下每个文件夹下img中图片的数量 rostopic echo -n 1 /tsp_lower/folder_info ``` - `TspFolderInfo` 字段已统一为 snake_case,联调脚本和解析逻辑不要再使用旧字段名。 ### 6.4 测试realsense、电机、姿态传感器bag录制 ```bash roslaunch tsp_bag_recorder bag_recorder.launch save_dir:=${HOME}/share prefix:=chongyang topics_file:=${HOME}/catkin_ws/src/tsp_lower/tsp_lower_bringup/record_bags.yaml ns:=tsp_lower #使用rosnode list查看节点 rosnode info /xxx查看节点发布的话题 #编辑record_bags.yaml文件,配置bag包名和需要录制的topic列表 #永远不使用的话题或者无内容话题可以不录制 ``` ### 6.5 fdilink_ahrs测试 ```bash roslaunch fdilink_ahrs ahrs_data.launch port:=/dev/fdilink_ahrs ns:=tsp_lower #该节点和全部话题都带有/tsp_lower前缀 ``` ### 6.6 bringup测试和全部开启测试 ```bash roslaunch tsp_lower_bringup bringup.launch \ video1_port:=/dev/video20 \ video2_port:=/dev/video24 \ save_dir:=${HOME}/share \ prefix:=chongyang \ resolution:=4k \ imshow:=true \ ns:=tsp_lower #编译并测试全部脚本 ~/catkin_ws/src/tsp/tsp_lower/test_all.sh ``` ## 7.说明 - 下位机通常是数据生产端中心,同时也是 ROS Master。 - 设备端口和采集配置是联调时最常见的排查点。