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

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

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

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

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

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

1.Windows系统建图

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

1.1.1 构建原因

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

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

1.1.2 构建过程

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

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

复制代码
docker pull tiryoh/ros-kinetic-desktop(直接使用包含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:latest

rviz

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

1.4 Gmapping建图

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

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

1.4.1 运行机器人
复制代码
终端 1
ssh [email protected]  # 登陆树莓派
roslaunch huanyu_robot_start Huanyu_robot_start.launch  # 运行机器人
1.4.2 打开机器人键盘控制节点
复制代码
终端 2
ssh [email protected]  # 登陆树莓派
roslaunch turtlebot_teleop keyboard_teleop.launch  # 打开机器人键盘控制节点

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

Control Your Turtlebot!


Moving around:

u i o

j k l

m , .

这一信息提供了机器人操作说明

1.4.3 运行Gmapping建图包
复制代码
终端 3
ssh [email protected]  # 登陆树莓派
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工具了。

相关推荐
How_doyou_do5 小时前
睿抗足球机器人
机器人
硅谷秋水8 小时前
视觉-和-语言导航的综述:任务、方法和未来方向
深度学习·计算机视觉·语言模型·机器人
微刻时光9 小时前
DeepSeek赋能电商,智能客服机器人破解大型活动人力困境
人工智能·机器人·自动化·rpa·deepseek·影刀证书·影刀实战
沫儿笙9 小时前
机器人弧焊二八混合气体节约
人工智能·物联网·机器人
沫儿笙9 小时前
FANUC发那科焊接机器人智能气阀
人工智能·物联网·机器人
2301_786001269 小时前
网球机器人自动捡球机械结构设计与创新研究
机器人
一颗小树x12 小时前
【机器人】复现 3D-Mem 具身探索和推理 | 3D场景记忆 CVPR 2025
机器人·具身导航·3d-mem·具身探索·3d场景记忆
水花花花花花14 小时前
离散文本表示
人工智能·机器人
湖北春晖信息14 小时前
工业自动化实践:机器人上料系统如何优化生产流程?
运维·机器人·自动化