当前位置: 首页 > news >正文

阿克曼-幻宇机器人系列教程4- 建图

在之前的文章中,我们介绍了如何登录机器人,如何实现上位机与下位机之间的互通,还介绍了机器人的topic和message,以及如何通过命令行对topic、message进行对应的操作。

接下来,我们就要运用前面所学的所有知识进行综合操作:运行机器人实现建图

通过Gmapping能力进行建图,使用RVIZ可视化工具(ROS专用可视化工具)将数据进行可视化。

因为RVIZ可视化工具只能运行在Linux系统上,所以需要分别考虑具备了Linux系统条件和仅有Windows系统的情况。

考虑到Windows系统上建图的准备工作较多,所以我们首先介绍Windows系统上的情况。

1.Windows系统建图

1.1 构建包含Linus操作系统的容器

1.1.1 构建原因

为了实现上位机(Windows电脑)对下位机(机器人上的树莓派)的操控,需要在上位机上安装ROS系统。

又因为ROS系统是基于Linus系统开发和测试的,所以我们需要在Windows电脑中构建Linus系统,阿克曼-幻宇机器人是基于Linus系统中的Ubuntu系统进行开发和测试,所以我们构建的是Ubuntu系统环境

1.1.2 构建过程

为了简化构建过程,我们借助Docker进行环境构建。

在本地电脑中创建文件,命名为Dockerfile,文档内容:

docker pull 对于某些独立显卡的,采用强制软解码(直接使用包含RVIZ等全功能的容器)

1.2 运行容器并与树莓派联通

1.2.1 运行容器

运行命令

docker run -it --rm tiryoh/ros-kinetic-desktop:latest

 在这种模式下,容器与宿主机共享网络,容器将使用宿主机的IP地址,并直接访问宿主机的网络资源。

使用宿主机网络命令

docker run -it --rm --network host tiryoh/ros-kinetic-desktop:latest
1.2.2 实现容器与树莓派联通
1.2.2.1 确保容器的宿主机和机器人树莓派处于同一局域网
  • 将机器人作为热点,宿主机连接机器人网络

  • 声明树莓派上的ROS服务地址

export ROS_MASTER_URI=http://192.168.12.1:11311/    # 树莓派上的 URI
  • 声明容器的IP地址

export ROS_HOSTNAME=192.168.12.170    # docker 内机器的 ip
  • 执行命令验证是否联通
rostopic list

1.3 为Docker Ubuntu赋予GUI能力

1.3.1 把宿主机的图像权限赋予给Docker
xhost +local:docker

说明:当不需要时,取消权限命令为:

xhost -local:docker
 1.3.2 启动带有GUI能力的容器并启动RVIZ
docker run -it --rm \--network host \      将宿主机网络赋予给容器--env="DISPLAY" \--env="QT_X11_NO_MITSHM=1" \  和上一行代码共同作用,把宿主机的显示能力赋予给容器--env="ROS_MASTER_URI=http://192.168.12.1:11311" \--env="ROS_HOSTNAME=192.168.12.78" \--env="LIBGL_ALWAYS_SOFTWARE=1" \      对于某些独立显卡的,采用强制软解码--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \  tiryoh/ros-kinetic-desktop:latestrviz

即可看到 RVIZ 可视化工具已经启动,通过添加话题和选择话题名称就可以查看相应话题数据。

 

1.4 Gmapping建图

通过上述步骤完成环境准备、上下位机之间的联通和可视化准备后,就可以开始准备Gmapping建图。

还差在宿主机中执行的最后三个操作以实现对机器人的操控:运行机器人、打开机器人键盘控制节点和运行Gmapping建图包。

1.4.1 运行机器人
终端 1
ssh huike@192.168.12.1  # 登陆树莓派
roslaunch huanyu_robot_start Huanyu_robot_start.launch  # 运行机器人
1.4.2 打开机器人键盘控制节点
终端 2
ssh huike@192.168.12.1  # 登陆树莓派
roslaunch turtlebot_teleop keyboard_teleop.launch  # 打开机器人键盘控制节点

 打开机器人键盘控制节点返回的信息我们主要关注以下信息

Control Your Turtlebot!
---------------------------
Moving around:
   u    i    o
   j    k    l
   m    ,    .
这一信息提供了机器人操作说明

1.4.3 运行Gmapping建图包
终端 3
ssh huike@192.168.12.1  # 登陆树莓派
roslaunch huanyu_robot_start gmapping_slam.launch  # 运行 Gmapping 建图包

 说明:SSH是为了访问树莓派,并为在机器人里执行操作做准备。

在数据窗口内查看地图和机器人姿态数据。RVIZ中的消息和话题选择如下:即可看到地图、激光点、机器人的 tf 位姿数据:

 完成上述三步准备工作后,按照第二部返回的操作说明移动机器人,尽量走一个闭合的曲线,使显示地图能满足整体建图需要。

2. Linux系统建图

学习了Windows系统建图后,Linux系统建图因为省去了很多环境准备、可视化等准备工作就相对容易得多了。

2.1 环境准备

  • 确保Linux系统是Ubuntu系统,如果不是手动换成此系统。

  • 执行命令安装包含kinetic版本、RVIZ可视化工具包:

    apt install -y ros-kinetic-desktop-full

2.2 Gmapping建图

将Linux系统电脑连上机器人热点,然后打开三个终端Launch三个相关包,打开RVIZ,完成话题和消息选择。

通过键盘指令移动机器人,尽量走一个闭合的曲线,使显示地图能满足整体建图需要。

3. 扩展知识

我们详细介绍下Dockerfile命令行的确认过程,并以全功能和仅含有kinetic版本的ROS系统的拉取容器对象不同分别说明容器制作命令行的不同。

Dockerfile命令行的确认过程

  • 确认机器人树莓派中运行的ROS系统版本 

  • 在Docker找到与之匹配的容器,然后在页面上找到对应的拉取命令                                           

以我所使用的阿克曼-幻宇机器人ROS系统为例:

当拉取的是包含了RVIZ全功能的容器

版本为kinetic,我在Docker中找到对应的包含RVIZ可视化工具、kinetic版本ROS系统的全功能容器,找到容器构建命令。

 容器地址:

https://hub.docker.com/r/tiryoh/ros-kinetic-desktop/

构建语句

docker pull tiryoh/ros-kinetic-desktop(直接使用包含RVIZ等全功能的容器)

当拉取的是仅包含kinetic版本ROS系统的的容器

拉取容器之后,需要执行定制化操作,比如安装RVIZ可视化工具

 容器地址:

https://hub.docker.com/_/ros/tags?name=kine

拉取语句:

docker pull ros:kinetic

执行上述命令构建的是不包含RVIZ可视化工具的容器,所以我们还需要下载对应的应用 

RUN apt update && apt install -y iputils-ping net-tools && apt install -y ros-kinetic-desktop-full    更新软件包索引,安装一些网络调试工具和完整的 ROS Kinetic 桌面版本。
docker build -t my/ros_kinetic:app   构建Docker镜像

这样就可以在Linux系统中运行RVIZ工具了。

相关文章:

  • C 语言字符串输出与长度计算:掌握 puts, fputs 和 strlen
  • ControlNet简洁
  • LeetCode 每日一题 2025/5/12-2025/5/18
  • 深入浅出知识图谱
  • GO语言语法---switch语句
  • 某狗开源版,MoeKoeMusic某狗第三方,自动领会员
  • Python多进程、多线程、协程典型示例解析
  • 谷歌地球引擎GEE将多个遥感影像作为多个波段合并成一张图像并下载的方法
  • socc19 echash部分代码讲解 二 hashtable
  • 基于JAVA springboot+mybatis 电商书城平台系统设计和实现
  • 【数字电路】第七章 脉冲波形的产生与整形电路
  • 高压BOOST芯片-TPQ80302
  • Java微基准测试工具JMH
  • inverse-design-of-grating-coupler-3d
  • el-scrollbar 获取滚动条高度 并将滚动条保持在低端
  • Vue 3.0 中的slot及使用场景
  • 【Odoo】Pycharm导入运行Odoo15
  • LOF算法(局部异常因子)python实现代码
  • 自适应Prompt技术:让LLM精准理解用户意图的进阶策略
  • 大模型为什么学新忘旧(大模型为什么会有灾难性遗忘)?
  • 上海市第二十届青少年科技节启动:为期半年,推出百余项活动
  • 特朗普指控FBI前局长“暗示刺杀总统”,“8647”藏着什么玄机?
  • 消息人士称俄方反对美国代表参加俄乌直接会谈
  • 乌克兰官员与法德英美四国官员举行会谈
  • 曾犯强奸罪教师出狱后办教培机构?柳州鱼峰区教育局回应
  • 上海锦江乐园摩天轮正在拆除中,预计5月底6月初拆完