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从入门到精通》
  • 《机器人原理与技术》
  • 《机器学习强基计划》
  • 《计算机视觉教程》

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/517644.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE5数字孪生系列笔记(一)

智慧城市数字孪生系统 虚幻引擎连接数据库 将自己的mysql版本的libmysql.dll替换掉插件里面的libmysql.dll 然后将这个插件目录复制到虚幻项目目录下 然后添加这个插件即可 新建一个UMG&#xff0c;添加一个按钮试试&#xff0c;数据库是否连接 将UI添加到视口 打印是否连接…

C语言初阶—操作符

逻辑操作符&#xff1a; 这段代码的结果是什么&#xff1f; #include <stdio.h>int main() {int i 0,a 0,b 2,c 3,d 4;i a && b && d;printf("a%d,b%d,c%d,d%d\n",a,b,c,d);return 0; } 计算的时候&#xff0c;a先使用&#xff0c;是0&…

EVSV08-25、EVSV08-28、EVEP-08、EVEP-10、EVGR-10插装式比例阀放大器

EVBP-10、EVF-12、EVGB-10、EVRB-02、EVGB-E081、EVRB-03、EVF-08、EVRB-06、EVF-10、EVRB-10、EVEP-12、EVR-01、EVR-10、EVR-12、EVR-T8、EVSV08-20、EVSV08-25、EVSV08-28、EVEP-08、EVEP-10、EVGR-10插装式比例阀包括比例止逆阀、比例换向阀、比例调速阀、比例减压阀、比例…

julia语言中的异常处理

在程序运行中&#xff0c;可能会遇到各种预期之外的情况&#xff0c;如用户输入错误、网络故障、硬件问题等。通过异常处理机制&#xff0c;将错误处理代码与正常的业务逻辑代码分离开来&#xff0c;程序可以在遇到这些问题时做出适当的响应&#xff0c;而不是直接崩溃&#xf…

在vue3中使用el-tree-select做一个树形下拉选择器

el-tree-select是一个含有下拉菜单的树形选择器&#xff0c;结合了 el-tree 和 el-select 两个组件的功能。 因为包含了el-tree的功能&#xff0c;我们可以自定义tree的节点&#xff0c;创造出想要的组件 使用default插槽可以自定义节点内容&#xff0c;它的default插槽相当于…

python自动化之获取实际响应数据-登录模块与我的商铺(第四天)

1.配置文件 新建config.py(config包) 2.登录 新建login.py模块(lib-apiLib) 根据接口文档,可知道登录接口的密码需要md5加密 接口文档,如有需要,可在评论区留言!!! login.py代码 # -*- coding: utf-8 -*- # @File : login.py # @Time : 2024/3/4 15:32 # @Autho…

本地项目推送到腾讯云轻量应用服务器教程(并实现本地推送远程自动更新)

将本地项目上传到腾讯云轻量应用服务器并实现后续的推送更新&#xff0c;具体步骤如下&#xff1a; 在本地项目目录下初始化 Git 仓库&#xff1a; cd 项目目录 git init将项目文件添加到 Git 仓库并提交&#xff1a; git add . git commit -m "Initial commit"在…

LeetCode_25_困难_K个一组翻转链表

文章目录 1. 题目2. 思路及代码实现&#xff08;Python&#xff09;2.1 模拟 1. 题目 给你链表的头节点 h e a d head head &#xff0c;每 k k k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k k k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节…

kafka消费端消息去重方案

背景 我们在日常工作中&#xff0c;消费kafka消息是一个最常见的操作&#xff0c;不过由于kafka队列中经常包含重复的消息&#xff0c;并且消息量巨大&#xff0c;所以我们消费端总是需要先把消息进行去重后在消费&#xff0c;以减少消费端的压力&#xff0c;那么日常中我们一…

docker的简单使用

在一些进行使用靶场或者工具的时候&#xff0c;我们可以用docker在线拉取&#xff0c;就可以省去手动搭建靶场的过程 一、docker的配置 因为docker是默认从docker的官网进行拉取&#xff0c;所以拉取经常速度很慢或者失败&#xff0c;我们先要进行一下配置&#xff0c;让他优…

电力系统的数字孪生开发流程

电力系统的数字孪生开发流程通常涉及以下关键步骤&#xff0c;这些步骤构成了电力系统数字孪生开发的基本流程。在实际开发过程中&#xff0c;可能会根据具体项目的要求和特点进行调整和补充。例如&#xff0c;可能会加入模型验证的环节以确保模型的准确性&#xff0c;或者加入…

【Ubuntu】将多个python文件打包为.so文件

1.为什么要将python打包为.so文件&#xff1f; 保护源码 2.实战例子 a.安装相应的包 pip install cython 验证安装是否成功 cython --version b.实战的文件目录和内容 hi.py # This is a sample Python script.# Press ShiftF10 to execute it or replace it with your…