TL3588 工控单板 ROS2 开发实战:交叉编译、机器人通信与功能包部署全流程
前 言本文档主要演示基于单板机/工控机的ROS系统版本ROS2 Humble使用说明包括ROS系统镜像编译、镜像替换以及ROS系统测试的方法。备注本文适用于SBC-TL3588单板机及EPC-TL3588工控机系列由SBC-TL3588单板机搭配扩展板与外壳组成文中所有演示均基于4GByte LPDDR4X 32GByte eMMC硬件配置的单板机开展。开发环境Windows开发环境Windows10 64bit、Windows7 64bitLinux开发环境VMware16.2.5、Ubuntu22.04.4 64bit系统版本Tronlong-Desktop 22.04类Ubuntu、Linux-6.1.141、U-Boot 2017.09sysrootrk3588-Tronlong-Desktop-22.04-sysroot-[版本号].tar.gz应用开发交叉编译工具链aarch64-linux-gnu-gcc版本为11.4.0通过网络下载ROSROS2 Humble术语表为便于阅读下表对文档出现的关键术语进行解释对于广泛认同释义的术语在此不做注释。注意事项1、我司ROS系统源码基于ROS官方获取并参考瑞芯微官方文档进行编译。更多信息请查看“6-开发参考资料\Rockchip官方参考文档\Linux\ApplicationNote\”目录下的《Rockchip_Instruction_Linux_ROS2_CN》文档。2、无特殊说明默认从eMMC启动系统使用DEBUG作为调试串口使用HDMI显示屏作为显示输出。一、ROS系统测试执行如下命令配置单板机测试环境。Target#export COLCON_CURRENT_PREFIX/opt/ros/humble //设置COLCON_CURRENT_PREFIX环境变量并将其值指向ROS2 Humble的安装目录Target#source /opt/ros/humble/local_setup.sh //执行ROS2 Humble的环境设置脚本从而将ROS2的命令、库路径、功能包信息等加载到当前的Shell会话中图 11.1 基于Python的通信功能测试执行如下命令创建Log目录用于保存ROS程序运行的Log。Target#mkdir -p /root/.ros/log图 2执行如下命令启动ROS节点订阅消息。Target#ros2 run demo_nodes_py listener 图 3执行如下命令启动ROS节点发布消息实现订阅消息节点与发布消息节点之间的通信。此时单板机串口调试终端将会打印两节点间通信的信息如下图所示。按Ctrl C可退出测试程序即让发布消息的节点退出。Target#ros2 run demo_nodes_py talker图 4执行如下命令根据系统进程号关闭所有ROS节点。进程号请以实际情况为准。Target#ps -aTarget#kill 2244Target#kill 2246图 51.2 基于C的通信功能测试执行如下命令创建Log目录用于保存ROS程序运行的Log。备注若已创建Log目录可跳过此步骤。Target#mkdir -p /root/.ros/log图 6执行如下命令启动ROS节点订阅消息。Target#ros2 run demo_nodes_cpp listener 图 7执行如下命令启动ROS节点发布消息实现订阅消息节点与发布消息节点之间的通信。此时单板机串口调试终端将会打印两节点间通信的信息如下图所示。按Ctrl C可退出测试程序即让发布消息的节点退出。Target#ros2 run demo_nodes_cpp talker图 8执行如下命令根据系统进程号关闭所有ROS节点。进程号请以实际情况为准。Target#ps -aTarget#kill 2273Target#kill 2274图 91.3 turtlesim小海龟测试执行如下命令配置单板机测试环境。备注若已配置单板机测试环境可跳过此步骤。Target#export COLCON_CURRENT_PREFIX/opt/ros/humble //设置COLCON_CURRENT_PREFIX环境变量并将其值指向ROS2 Humble的安装目录Target#source /opt/ros/humble/local_setup.sh //执行ROS2 Humble的环境设置脚本从而将ROS2的命令、库路径、功能包信息等加载到当前的Shell会话中图 10执行如下命令创建Log目录用于保存ROS程序运行的Log。备注若已创建Log目录可跳过此步骤。Target#mkdir -p /root/.ros/log图 11执行如下命令后台运行小海龟程序。Target#ros2 run turtlesim turtlesim_node 图 12图 13执行如下命令发布话题消息使小海龟转圈。Target#ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist {linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}图 14参数解析ros2 topic pub发布消息到主题--rate 1发布消息速率设置为1次每秒/turtle1/cmd_vel主题名称geometry_msgs/msg/Twist发布消息类型{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}发布消息的内容线速度(linear)为x方向上的2.0、角速度(angular)为z轴方向上的1.8。图 15二、ROS开发请先参考《开发环境搭建》文档进行VMware虚拟机与Ubuntu安装并参考《应用开发手册》文档正确安装sysroot。本小节主要演示基于上位机Ubuntu的ROS系统编译与镜像制作方法。2.1 开发环境搭建打开Ubuntu终端执行如下命令安装编译所需的colcon工具。Host#sudo apt install curlHost#sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg图 16因网络问题下载GPP密钥可能会失败若无法下载可将产品资料“4-软件资料/Demo/other”目录下的ros-archive-keyring.gpg文件拷贝到Ubuntu系统/usr/share/keyrings/目录。执行如下命令安装ros工具。Host#sudo cp ros-archive-keyring.gpg /usr/share/keyrings/Host#sudo echo deb [archamd64 signed-by/usr/share/keyrings/ros-archive-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu jammy main | sudo tee /etc/apt/sources.list.d/ros2.list /dev/nullHost#sudo apt updateHost#sudo apt install ros-humble-ros-base -y图 17图 18图19执行如下命令安装编译所需的colcon工具。Host#curl -s https://packagecloud.io/install/repositories/dirk-thomas/vcstool/script.deb.sh | sudo bash //下载并运行vcstool的安装脚本Host#sudo apt update //更新软件包列表Host#sudo apt-get install -y python3-pip python3-rosdep2 python3-rosinstall-generator python3-vcstool build-essential //安装ROS2开发所需的工具和依赖Host#pip3 install -U colcon-common-extensions //安装colcon-common-extensions工具Host#pip3 uninstall empy //卸载旧版empy包Host#pip3 install empy3.3.4 //安装指定版本3.3.4的empy包图 20图 21图 22图23执行如下命令配置环境变量。Host#export PATH${PATH}:/home/tronlong/.local/bin //将用户本地bin目录添加到PATH环境变量图 242.2 编译ROS软件包请根据交叉编译工具链实际解压路径执行如下命令配置交叉编译工具链。Host#source /home/tronlong/RK3588/environment //配置交叉编译工具链环境变量Host#source /opt/ros/humble/local_setup.bash //执行ROS2的本地安装脚本配置ROS2的运行环境图 25执行如下命令创建ROS软件包的工作目录并进入该目录目录可命名为任意名称。Host#mkdir ros2_project_testHost#cd ros2_project_test图 26执行如下命令创建ROS软件包源码目录并进入该目录。Host#mkdir srcHost#cd src图 27执行如下命令在源码目录下生成my_package包。本案例以构建CPP功能包为例如需构建Python功能包可将参数ament_cmake改为ament_python。Host#ros2 pkg create --build-type ament_cmake --node-name my_node my_package //建一个名为my_package的ROS软件包图 28参数解析--build-type ament_cmake 指定软件包的构建类型为ament_cmake。--node-name my_node为软件包指定了一个my_node节点。--my_package软件包的名称为my_package。完成构建后ROS软件包源码目录结构如下所示。可根据实际需要对my_package/src/my_node.cpp进行修改。图 29返回ROS软件包工作目录编译软件包。Host#cd ..Host#colcon build图 30编译完成后在当前目录下生成如下目录目录内容如下表所示。图 312.3 ROS软件测试请将完成编译的ROS软件包中install目录拷贝至单板机系统/opt/ros/humble目录下执行如下命令配置ROS的运行环境与命令行工具。Target#export COLCON_CURRENT_PREFIX/opt/ros/humble //设置当前ROS工作空间前缀为Humble安装路径Target#source /opt/ros/humble/local_setup.sh //执行ROS2的本地安装脚本配置ROS2的运行环境图 32执行如下命令加载ROS软件包环境。Target#export COLCON_CURRENT_PREFIX/opt/ros/humble/install //设置当前ROS工作空间前缀为ROS软件包安装路径Target#source /opt/ros/humble/install/local_setup.sh //执行ROS2的本地安装脚本配置ROS2的运行环境图 33执行如下命令运行ROS软件包可以看到当前ROS软件包程序运行打印结果。Target#ros2 run my_package my_node //运行自定义节点my_node图 34