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

ROS从入门到精通4-2:Docker安装ROS、可视化仿真与终端复用

目录

  • 0 专栏介绍
  • 1 Docker安装ROS
  • 2 Docker可视化仿真
    • 2.1 显示配置
    • 2.2 启动容器
  • 3 终端复用工具
    • 3.1 `session`操作
    • 3.2 `window`操作
    • 3.3 `pane`操作
    • 3.4 其他操作

0 专栏介绍

本专栏旨在通过对ROS的系统学习,掌握ROS底层基本分布式原理,并具有机器人建模和应用ROS进行实际项目的开发和调试的工程能力。

🚀详情:《ROS从入门到精通》


1 Docker安装ROS

拉取ROS的官方镜像并查看

docker pull osrf/ros:noetic-desktop-full
docker images

在这里插入图片描述
根据镜像创建容器

docker run -it osrf/ros:noetic-desktop-full bash

在容器内运行

roscore

即可启动ROS节点管理器

在这里插入图片描述

2 Docker可视化仿真

2.1 显示配置

运行

xhost +

使其他主机能够访问本机的X Server,若显示

access control disabled, clients can connect from any host

表示成功。当用户从host A登录到host B时,作为应用程序,host A是客户侧;作为图形界面而言,由于在host A上显示,需要使用host AX Server,此时host A是服务侧,因此需要在host A上开启其他host的访问权限。接着,Docker通过映射将对X Server的请求透传到主机端DISPALYDISPLAY对应主机端的显示接口,完成显示。关于xhost有如下的常用命令

  • xhost +:使所有用户都能访问X Server
  • xhost + ip:使ip上的用户能够访问X Server
  • xhost + nis:user@domain:使domain上的nis用户能够访问X Server
  • xhost + inet:user@domain:使domain上的inet用户能够访问X Server

2.2 启动容器

启动带GUI环境变量的Docker容器,配置了从容器到主机的显示映射

docker run -it \--env="DISPLAY" \--env="QT_X11_NO_MITSHM=1" \--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \osrf/ros:noetic-desktop-full \/bin/bash

~/.bashrc中配置ROS的环境变量

source /opt/ros/noetic/setup.bash

接着通过

docker exec -it <container_name> /bin/bash

再启动两个连接该容器的终端,启动乌龟仿真器

  • 终端1
    rosrun turtlesim turtlesim_node
    
  • 终端2
    rosrun turtlesim turtle_teleop_key
    

即可操控乌龟运动

在这里插入图片描述
RvizGazebo也是同样的显示方法

在这里插入图片描述

3 终端复用工具

在运行容器时,可能需要再启动多个终端进入容器操作,这在远程连接等工作环境下并不方便,因此Docker需要配合终端复用工具Tmux使用

在这里插入图片描述

Tmux具有以下优势:

  • 会话持久性Tmux允许创建一个持久性会话,即使在断开连接后也可以重新连接到该会话。这对于长时间运行的任务或需要与容器进行交互的任务非常有用。

  • 分屏和窗格管理Tmux允许将终端窗口分割为多个窗格,每个窗格可以显示不同的命令行界面,而无需打开多个终端。

  • 快捷键和自定义配置Tmux提供了丰富的快捷键和配置选项,也可以自定义会话的行为和外观,以提高工作效率。

Tmux的基本概念如下所示:

  • session:会话(任务)
  • window:窗口
  • pane:窗格

一个Tmux会话可以包含多个窗口window。每个窗口可以分割为多个窗格pane,每个窗格可以显示不同的终端界面。因此,session包含多个 window,而每个 window可以包含多个pane。通过合理组织和使用sessionwindowpane,可以更有效地管理和控制不同任务和终端会话,提高工作效率和多任务处理能力

可以通过

sudo apt install tmux

安装Tmux

3.1 session操作

  • 启动

    新建session,自动生成一个id0session

    tmux
    

    若希望显式地说明session的名字,可以使用以下指令,这个名字可以用于解绑后快速的重新进入该session

    tmux new -s your-session-name
    
  • 分离
    使用快捷键ctrl+b d,会将当前session与终端分离,session转到后台执行:

  • 杀死

    tmux kill-session -t your-session-name
    
  • 解绑
    假设现在正处于session1,使用ctrl+b d分离操作就是将session1进行解绑

  • 绑定

    tmux attach -t your-session-name
    
  • 切换

    tmux switch -t your-session-name
    
  • 重命名

    tmux rename-session -t old-session new-session
    

3.2 window操作

  • 新建

    tmux new-window -n your-window-name
    
  • 切换

    快捷键

    • ctrl+b c: 创建一个新窗口(状态栏会显示多个窗口的信息)
    • ctrl+b p: 切换到上一个窗口(按照状态栏的顺序)
    • ctrl+b n: 切换到下一个窗口
    • ctrl+b w: 从列表中选择窗口
  • 重命名

    tmux rename-window -t old_name new_name
    

3.3 pane操作

  • 划分

    # 划分为上下两个窗格
    tmux split-window# 划分左右两个窗格
    tmux split-window -h
    

    快捷键

    左右划分:ctrl+b %
    上下划分:ctrl+b "
    
  • 光标位置

    快捷键:ctrl+b arrow-key(方向键)

  • 窗格移动

    # 当前窗格往上移
    tmux swap-pane -U# 当前窗格往下移
    tmux swap-pane -D
    
  • 关闭窗格

    快捷键:ctrl+d

3.4 其他操作

  • 列出所有快捷键,及其对应的Tmux命令

    tmux list-keys
    
  • 列出所有Tmux命令及其参数

    tmux list-commands
    
  • 列出当前所有Tmux会话的信息

    tmux info
    
  • Tmux上下翻屏

    快捷键:ctrl+b [ ,就可以通过方向键上下移动实现上下翻页


🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《机器人原理与技术》
  • 《机器学习强基计划》
  • 《计算机视觉教程》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇

相关文章:

  • 利用MATLAB模拟点电荷的电场分布
  • 通过 python 和 wget 批量下载文件(在Linux/Ubuntu/Debian中测试)
  • C语言深入学习 --- 1.数据的存储
  • 【Apache Camel】基础知识
  • 关于制作一个Python小游戏(三)
  • Batch Nomalization 迁移学习
  • 【框架学习 | 第一篇】一篇文章读懂MyBatis
  • 2024.1.28 校招 实习 内推 面经
  • 【嵌入式——QT】Model/View
  • 【PHP】PHP通过串口与硬件通讯,向硬件设备发送数据并接收硬件返回的数据
  • 基于Springboot免费搭载轻量级阿里云OSS数据存储库(将本地文本、照片、视频、音频等上传云服务保存)
  • 揭秘共享旅游卡项目变现的6种方式,至少有4种适合创业者!
  • STM32/GD32——I2C通信协议
  • Nodejs web服务器之GET、POST请求初次体验
  • 2024《》
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • Fundebug计费标准解释:事件数是如何定义的?
  • java正则表式的使用
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • Linux快速复制或删除大量小文件
  • mongodb--安装和初步使用教程
  • Python_OOP
  • react 代码优化(一) ——事件处理
  • vue-loader 源码解析系列之 selector
  • 分享一份非常强势的Android面试题
  • 服务器从安装到部署全过程(二)
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 记一次删除Git记录中的大文件的过程
  • 那些被忽略的 JavaScript 数组方法细节
  • 如何在GitHub上创建个人博客
  • 项目实战-Api的解决方案
  • 新书推荐|Windows黑客编程技术详解
  • 译有关态射的一切
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 中文输入法与React文本输入框的问题与解决方案
  • 主流的CSS水平和垂直居中技术大全
  • Java总结 - String - 这篇请使劲喷我
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • $.proxy和$.extend
  • (2)(2.10) LTM telemetry
  • (31)对象的克隆
  • (二)pulsar安装在独立的docker中,python测试
  • (剑指Offer)面试题34:丑数
  • (六)激光线扫描-三维重建
  • (生成器)yield与(迭代器)generator
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • .gitignore
  • .NET 反射 Reflect
  • .net开发时的诡异问题,button的onclick事件无效
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • .NET下ASPX编程的几个小问题
  • .net专家(高海东的专栏)
  • .vue文件怎么使用_vue调试工具vue-devtools的安装