欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > 在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南

2025/6/27 16:42:09 来源:https://blog.csdn.net/m0_61864577/article/details/148435277  浏览:    关键词:在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南

    • 背景介绍
    • 完整操作步骤
      • 1. 创建Docker容器环境
      • 2. 验证GUI显示功能
      • 3. 安装ROS Noetic
      • 4. 配置环境变量
      • 5. 创建ROS节点(小球运动模拟)
      • 6. 配置RVIZ默认视图
      • 7. 创建启动脚本
      • 8. 运行可视化系统
    • 效果展示与交互
    • 技术解析
      • ROS节点通信架构
      • 运动模型原理
      • 性能优化技巧
    • 应用场景扩展
    • 总结

背景介绍

机器人操作系统(ROS)是机器人开发领域的核心框架,它提供了一系列工具和库来简化复杂机器人系统的构建。在嵌入式平台如RK3588上运行ROS具有重要实际意义,因为它能让我们在资源受限的设备上实现复杂的机器人功能。

本文将详细介绍如何在RK3588开发板上:

  1. 使用Docker容器化环境安装ROS1(Noetic)
  2. 创建模拟场景节点(小球绕圆柱运动)
  3. 实现多模态数据可视化(点云、标记、图像)
  4. 使用RVIZ进行实时数据展示

这种容器化ROS开发方法不仅适用于RK3588,也可用于其他嵌入式平台,为机器人开发提供了可靠的环境隔离和部署便利性。

完整操作步骤

1. 创建Docker容器环境

在嵌入式开发中使用Docker容器有三大优势:

  1. 环境隔离:避免污染主机系统
  2. 可移植性:环境可轻松迁移到其他设备
  3. 依赖管理:简化复杂依赖的安装过程

创建启动脚本:

cat> run_ros.sh <<-'EOF'
#!/bin/bash
image_name="ubuntu:20.04"
echo $image_name
container_name="ros_rk3588"
if [ $(docker ps -a -q -f name=^/${container_name}$) ]; thenecho "容器 '$container_name' 已经存在。"
elseecho "容器 '$container_name' 不存在。正在创建..."docker run -id --privileged --net=host \-v /etc/localtime:/etc/localtime:ro \-v $PWD:/home -e DISPLAY=$DISPLAY -w /home \-v /tmp/.X11-unix:/tmp/.X11-unix \-e GDK_SCALE -e GDK_DPI_SCALE \--name $container_name --hostname=$container_name $image_name /bin/bash
fi
docker start $container_name
docker exec -ti $container_name bash
EOF

2. 验证GUI显示功能

bash run_ros.sh  # 进入容器
apt update
apt install x11-apps -y  # 安装基础图形工具
xclock  # 测试GUI显示

成功运行xclock并看到时钟界面,说明Docker的GUI转发配置正确。

3. 安装ROS Noetic

ROS Noetic是最后一个支持Python2的ROS1版本,兼容性好:

# 添加ROS软件源
apt install lsb-core -y
sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'# 安装必要工具
apt install curl vim -y# 添加ROS密钥
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | apt-key add -# 安装ROS完整桌面版
apt update -y
apt install ros-noetic-desktop-full -y# 安装开发工具
apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential -y# 安装Python依赖
apt install python3.8 pip -y
pip3 install opencv-python==4.11.0.86 -i https://mirrors.aliyun.com/pypi/simple/# 初始化ROS依赖系统
rosdep init
rosdep update

4. 配置环境变量

确保每次启动时自动加载ROS环境:

echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
echo "127.0.0.1       ros_rk3588" >> /etc/hosts

5. 创建ROS节点(小球运动模拟)

cat > v2x_node_top_view.py <<-'EOF'
import rospy
import numpy as np
from sensor_msgs.msg import PointCloud2, Image as ImageRos
from visualization_msgs.msg import Marker, MarkerArray
from cv_bridge import CvBridge
import math
import cv2
from sensor_msgs.msg import Image,PointCloud2,Imu
from std_msgs.msg import Header
import sensor_msgs.point_cloud2 as pcl2# 生成圆柱点云
def generate_cylinder(center_x, center_y, radius, height, num_points=500):points = []for _ in range(num_points):# 随机角度和高度theta = np.random.uniform(0, 2*np.pi)h = np.random.uniform(0, height)# 计算点坐标x = center_x + radius * np.cos(theta)y = center_y + radius * np.sin(theta)z = h# 添加到点云 (x,y,z + 强度)points.append([x, y, z, 0.0])return np.array(points, dtype=np.float32)# 创建可视化Marker
def create_cylinder_marker(center_x, center_y, height, radius, id_num, frame_id="map"):marker = Marker()marker.header.frame_id = frame_idmarker.header.stamp = rospy.Time.now()marker.ns = "cylinders"marker.id = id_nummarker.type = Marker.CYLINDERmarker.action = Marker.ADD# 位置和尺寸marker.pose.position.x = center_xmarker.pose.position.y = center_ymarker.pose.position.z = height/2  # 中心位于半高marker.pose.orientation.w = 1.0marker.scale.x = radius * 2marker.scale.y = radius * 2marker.scale.z = height# 颜色 (RGBA)marker.color.r = 0.0marker.color.g = 1.0marker.color.b = 0.0marker.color.a = 0.5  # 半透明marker.lifetime = rospy.Duration()return markerdef create_ball_marker(x, y, z, id_num, frame_id="map"):marker = Marker()marker.header.frame_id = frame_idmarker.header.stamp = rospy.Time.now()marker.ns = "ball"marker.id = id_nummarker.type = Marker.SPHEREmarker.action = Marker

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词