
一. 每一次打开终端的时候自动打印一些基础信息可以在~/.bashrc中编辑如下。这样每次开启终端都会自动打印信息。二. 开机即自动执行的程序在Startup Application里设置比如Todesk一般建议如下方式开机的时候自动执行一个.sh文件在里面可以自动打开终端并自动添加一些环境变量。示例1如下这个start_agent.sh文件里可以输入以下内容。该功能实现了通过ros2 topic的工具去控制小车的速度、蜂鸣器、以及机械臂同时也实现了读取底层的数据比如雷达数据imu数据里程计数据等等。gnome-terminal --titlemircoROS_Agent -- bash -c export ROS_DOMAIN_ID30 source /opt/ros/humble/setup.bash source /home/jetson/mircoROS_agent/install/setup.bash ros2 run micro_ros_agent micro_ros_agent serial --dev /dev/myserial -b 2000000 注01. source /home/jetson/mircoROS_agent/install/setup.bash是在将自定义的ROS2包加到环境变量中。如同博主之前写自己的ROS2包一样。ROS工作空间、功能包、节点创建_创建自己的功能包与节点-CSDN博客2. ros2 run micro_ros_agent micro_ros_agent serial --dev /dev/myserial -b 2000000即是在运行包里的可执行程序。因为上面已经source此包的路径了系统能够识别到。可对比博主之前自己写的包可看到如上开始.sh中的功能就是让开机后自动让写的某个ros2包中可执行程序运行起来。【Jetson板子在和一个控制小车的单片机通过串口连接该ros2执行程序】注1gnome-terminal --titlemircoROS_Agent打开新终端窗口标题设为mircoROS_Agent-- bash -c xxx终端内执行一段 bash 脚本export ROS_DOMAIN_ID30设置域 ID多机通信隔离连续两次source先加载系统 ROS2再加载自己工作空间的包启动 micro-ROS 代理串口设备/dev/myserial波特率 2M注2micro-ROS 是给单片机、STM32、ESP32、MCU 这类小型嵌入式设备用的轻量化 ROS2。 单片机性能弱不能直接跑完整 ROS2所以需要一台 Linux 设备你的 Jetson做中转程序micro_ros_agent代理。 作用一边连单片机串口一边对接电脑 / Jetson 的 ROS2 网络转发话题、服务、参数让单片机和 ROS2 互相通信。serial通信方式代表串口通信单片机通过 USB/TTL 串口和 Jetson 相连。 其他可选udp、tcp网口通信你这里用串口。为什么取名myserialLinux 默认串口名是ttyUSB0/ttyACM0插拔顺序一变编号就变先插单片机 ttyUSB0再插其他模块 ttyUSB1下次先插别的设备单片机就变成 ttyUSB1程序直接报错找不到串口myserial是自定义软链接别名好处不管插哪个 USB 口、插拔顺序如何永远固定/dev/myserial代码、启动命令不用反复改串口号直观好记一眼知道是 micro-ROS 单片机串口。在哪里 “取名”—— udev 规则文件10c4 idVendorea60 idProduct填进上面 rules 即可。/dev/myserial 本质是什么它不是真实硬件节点是软链接指向真实的ttyUSBx规则生效命令写完必须执行# 重载udev规则 sudo udevadm control --reload-rules # 重新扫描所有USB设备立刻生成/dev/myserial sudo udevadm trigger如果不清楚到底是哪个串口可拔掉串口后再执行命令通过前后对比来确认。示例2自启动程序command中可以加入很多条命令语句如下即是一个开机传感器自检功能如何是一个检查IMU和雷达的示例示例3自动运行Py脚本程序这个joy.sh里在source 已存在的ros2开发包setup.bash然后打开ros2可执行程序去发布或者订阅机械臂通过手柄去控制小车运动单片机。手动也可以运行这个sh文件终端输入sh joy.sh即可。三. 安装ROS2下的默认路径这是系统全局目录所有用户共用需要 sudo 权限修改内部文件。/opt/ros/humble/bin默认不在系统 PATH不会自动查找如下在~/.bashrc中添加了路径这样在打开终端的时候就能识别到ros2啦但开机自启程序systemd、crontab、rc.local不行完全不生效原因systemd、定时任务、后台服务是非交互式 shell不会读取用户的/.bashrc哪怕你在.bashrc写了 source后台程序执行时环境变量是空的依然提示ros2: command not found。一般建议如下方式开机的时候自动执行一个.sh文件在里面可以自动打开终端并自动添加一些环境变量。这个.sh文件里可以输入以下内容gnome-terminal --titlemircoROS_Agent -- bash -c export ROS_DOMAIN_ID30 source /opt/ros/humble/setup.bash source /home/jetson/mircoROS_agent/install/setup.bash ros2 run micro_ros_agent micro_ros_agent serial --dev /dev/myserial -b 2000000 四. Jetson开发板提供者预制的节点话题可看到开机后由于自动运行了可执行程序能够访问到如下信息双/结构是为了表示父子模块分层也可以更多分层。对比无分层单层话题没有父子关系如果不用/分层只用下划线拼接joy_joyfeedbackROS 只会把它当成一整个独立话题名不会识别归属 joy 模块。 命令行批量订阅/joy/*时这条话题不会被匹配到。# ROS2 ros2 topic echo /joy/*只会输出/joy/data、/joy/joyfeedback这类带分层的话题单层joy_joyfeedback不会输出。五. 录制回放工具ROS2 官方录制框架rosbag2主要功能录制record监听 ROS2 网络中的话题把传感器消息图像、激光雷达、IMU、里程计等连同时间戳持久保存为数据包支持 MCAP、SQLite3 两种格式。回放play读取保存的数据包按照原始时序重新向外发布话题消息模拟机器人运行时的数据输出。信息查看info查看数据包时长、包含话题、消息类型、消息数量、存储格式。格式转换convert在 MCAP / SQLite3 两种存储格式之间互相转换。程序 API 支持提供 C/Python 接口可在自研节点里代码控制录制、读取数据包无需调用终端命令。作用 / 使用场景离线调试实机采集传感器数据后回到电脑反复回放测试 SLAM、导航、目标检测算法不用反复跑机器人。算法复现与数据集制作统一数据源方便多人复现实验结果构建机器人数据集。问题排查机器人现场出现故障时录制全部数据事后回放分析异常传感器数据、逻辑 bug。仿真替代实车开发阶段利用录制好的数据包替代真实硬件加速代码开发。关键价值把机器人实时数据流保存成文件实现「一次采集、多次离线测试」是自动驾驶、移动机器人开发最基础的调试工具。1. 如下先运行博客中发布话题的可执行程序ROS2话题、服务、动作通讯_ros2 话题通讯 服务通讯 动作通讯的区别-CSDN博客2. 执行如下语句进行录制录制一段时间后ctrl c停止3.接下来使用语句播放同时我们打印话题数据或者去执行订阅程序到此结束。附录1这边source的介绍可见如下博客https://blog.csdn.net/weixin_59121925/article/details/141141433https://blog.csdn.net/jiugeshao/article/details/122188594?spm1001.2014.3001.5502https://blog.csdn.net/jiugeshao/article/details/116084611?spm1001.2014.3001.5502附录2humble拓展,可参考如下两个博客https://wenku.csdn.net/answer/7v6nw6hb3ihttps://blog.csdn.net/2401_84116277/article/details/158012875此篇到此结束后面博客再见