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

学习journal(一)0505更新

0502-0503上

1 拉取ros humble镜像

在虚拟机安装Ubuntu22.04,在Ubuntu22.04通过docker拉取ros humble完整镜像(desktop-full)

由于国内网络访问官方镜像源不稳定,指定国内镜像源下载

sudo docker pull osrf/ros:humble-desktop-full (官方地址)
替换为

sudo docker pulldocker.1ms.run/osrf/ros:humble-desktop-full (国内镜像源docker.1ms.run,可用的国内镜像源还有docker.xuanyuan.me 和 doceer.m.daocloud.io)

下载完成

1.1 验证

1.1.1 检查镜像是否已下载

sudo docker images | grep humble-desktop-full

1.1.2 快速测试(运行后自动删除容器)

方法一

sudo docker run --rm docker.1ms.run/osrf/ros:humble-desktop-full bash -c "echo \$ROS_DISTRO"

方法二

先进入容器的交互式 Shell
sudo docker run -it --rm docker.1ms.run/osrf/ros:humble-desktop-full

手动source环境变量

source /opt/ros/humble/setup.bash

再检查 ROS 2 发行版
echo $ROS_DISTRO

执行exit 退出并删除容器

1.2 为镜像指定tag

# 将完整版镜像打上短标签
sudo docker tagdocker.1ms.run/osrf/ros:humble-desktop-fullros:humble-full

# 以后就可以直接用短标签了
sudo docker run -it --rmros:humble-full

(我为了不弄混从哪拉取的镜像,这里没指定tag,直接沿用全名docker.1ms.run/osrf/ros:humble-desktop-full

1.3 创建一个容器

自定义创建符合自己要求的容器,我创建的这个容器名为humble

docker run -it \
--name humble \
--network=host \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v /mnt/hgfs/share:/workspace\
-e DISPLAY=${DISPLAY} \
docker.1ms.run/osrf/ros:humble-desktop-full\
/bin/bash

第5行命令-v /mnt/hgfs/share:/workspace是将虚拟机的目录/mnt/hgfs/share挂载到容器的workspace目录,此外我的另一篇博客VMware虚拟机 安装Ubuntu-CSDN博客,我的虚拟机/mnt/hgfs/share和宿主机的D:\Soft\Ubuntu\share是共享目录

因此容器的workspace目录实际是宿主机的D:\Soft\Ubuntu\share目录,占用的是宿主机的磁盘空间,即:

宿主机 (Windows) 虚拟机 (Ubuntu) Docker 容器
│ VMware Tools │ docker -v │
│ 共享文件夹 │ 挂载卷 │
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ D:\Soft\Ubuntu\share│◄─►│ /mnt/hgfs/share │ ◄─►│ /workspace │
│ 实际存储 │互同步│ │互访问│ 容器内 │
└─────────────┘ └─────────────┘ └─────────────┘

1.4 查看容器

sudo docker ps -a

1.5 启动与进入容器

假设容器名是humble

case1:有人正在使用容器(正在运行Up),用 sudo docker exec -it humble /bin/bash 进入

case2:没人使用容器(已停止Exited),用 sudo docker start -ai humble 启动并进入

如果进入容器卡住(之前没退出容器就重启ubuntu之类的原因),另起一个终端执行sudo docker stop humble 或sudo docker kill humble,再尝试进入

1.6 写入环境变量

进入容器,注意要英文双引号

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc

1.7 开启 X Server 的访问控制

执行 xhost +local: 后,X 服务器允许来自本地(包括 Docker 容器)的连接请求
如果容器中执行会弹出图形窗口的命令失败,例如gazebo/rviz/MoveIt,在宿主机执行:
xhost +local:root

0503下-0505上

1 启动盘安装ubuntu

虚拟机太卡了,我直接全盘安装Ubuntu系统,这篇博客追加记录U盘启动盘安装Ubuntu全过程安装Ubuntu-VMware虚拟机或U盘启动盘-CSDN博客

2 安装ToDesk

用于另一台windows与这台ubuntu交互,linux版下载地址:https://www.todesk.com/linux.html

下载后按官网提示执行sudo apt-get install ./todesk-vx.x.x.x-amd64.deb,如果出现类似报错:

N: 由于文件'/home/tina/下载/todesk-v4.8.6.2-amd64.deb'无法被用户'_apt'访问,已脱离沙盒并提权为根用户来进行下载。 - pkgAcquire::Run (13: 权限不够)

不用管,执行 todesk 登录账号就可以使用了

0504 todesk问题

问题 2.1

执行 todesk 报错:

mkdir: 无法创建目录 "/tmp/fuse": 文件已存在 fusermount: entry for /tmp/fuse not found in /etc/mtab [setting] functionRightToast = [setting] functionRightToast =
解决2.1

不影响使用,一定要消除报错的话,执行 fusermount -uz /tmp/fuse 将原来的挂载点清理干净,下次启动 ToDesk 时,程序就能正常创建目录

(0505 发现并不像上面说的那样,ctrl+c终止后,再执行todesk就没有这个报错了)

问题2.2

交互双方的剪切板不共用

解决2.2

安装剪切板管理工具:sudo apt-get install xclip

切换到 X11 显示服务器:

如果执行echo $XDG_SESSION_TYPE输出 Wayland,需要切换为x11,原因:这是解决很多 ToDesk 相关问题(包括黑屏和剪贴板失效)最关键的一步。Ubuntu 22.04 默认使用新的 Wayland 协议,而 ToDesk 目前对 Wayland 的兼容性不佳,切换到经典的 X11 协议能解决大部分问题

1)修改配置sudo nano /etc/gdm3/custom.conf加入WaylandEnable=false这一行

2)重启ubuntu

3)重启 ToDesk 服务sudo systemctl restart todeskd.service

4)验证 执行echo $XDG_SESSION_TYPE,输出 x11

这时 todesk 连接win,发现剪切板共用了

问题2.3 与解决

控制方向被控方输入文字,字符重复2遍,这是连接不稳定的原因,断开重连多试几次就好了

(0505 如果重连还是不行,说明还是不稳定,可能时而不重复时而重复,解决办法:绕过在被控方输入文本的操作,先在控制方编辑好要输入的内容,直接复制到被控方)

问题2.4 与解决

控制方Ubuntu无法向被控方输入文字

解决:控制方的输入法改英语

3 ubuntu截图工具

各种ubuntu截图工具:https://blog.csdn.net/kingdom_java/article/details/148723506

截图工具Flameshot

学习参考博客:https://blog.csdn.net/qnesp/article/details/157659217?ops_request_misc=elastic_search_misc&request_id=a4c87fd50581c3fb419ba9c057b8cde2&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-157659217-null-null.142^v102^pc_search_result_base5&utm_term=Flameshot&spm=1018.2226.3001.4187

记录博客难免会需要截图,Ubuntu系统的截图还不太会,听说这个工具截图功能强大,但学习起来还是要花些时间的

3.1 目前设置了ctrl + alt + a 截图:

绑定快捷键:进入设置 > 键盘 > 快捷键,添加自定义快捷键(如Ctrl+alt+A),关联命令flameshot gui

此外右上角也有图标可以启动

3.2 截取式截图后进入编辑在左上角,有些标注快捷键需要记忆,双击后复制截图到剪切板

0504更新学习笔记

截图工具Flameshot学习笔记:​​​​​​​Flameshot 学习笔记-CSDN博客

4 新建容器

sudo docker run -it --name humble --network=host -v /tmp/.X11-unix:/tmp/.X11-unix -v/tina:/workspace -e DISPLAY=${DISPLAY} docker.1ms.run/osrf/ros:humble-desktop-full /bin/bash

5 挂载机械盘

后来我才知道我还没挂载机械盘:我的电脑有两个磁盘,一个系统盘(固态128GB),一个机械盘1T,安装Ubuntu选固态硬盘,之后需要挂载机械盘用于存放数据,具体操作见我跟deepseek的对话:https://chat.deepseek.com/share/elw8n9ttqfna90qbwn

挂载后我的机械盘目录/mnt/hd,因此新建容器挂载路径修改为/mnt/hd/tina,即

sudo docker run -it --name humble --network=host -v /tmp/.X11-unix:/tmp/.X11-unix -v/mnt/hd/tina:/workspace -e DISPLAY=${DISPLAY} docker.1ms.run/osrf/ros:humble-desktop-full /bin/bash

6 ROS2学习之键盘控制海龟验证

记录于博客:​​​​​​​​​​​​​​ROS学习-CSDN博客

7 vscode安装与docker适配

见我的博客:​​​​​​​​​​​​​​docker学习-CSDN博客

0505 下

1 ROS创建编译与运行节点

记录于博客:​​​​​​​​​​​​​​ROS学习-CSDN博客

2 如何将容器的项目推送自己的Github仓库进行版本管理

我的容器名为humble

2.1 配置SSH密钥

2.1.1 宿主机配置 SSH 密钥

ssh-keygen -t ed25519 -C <你的邮箱>,然后一直回车

2.1.2 将公钥添加到 GitHub

1)cat ~/.ssh/id_ed25519.pub 并复制公钥

2)添加到 GitHub: 登录 GitHub → 点击右上角头像 → Settings 左侧菜单选择 SSH and GPG keys 点击绿色按钮 New SSH key Title:自定义名字,Key type:保持 "Authentication Key", Key:粘贴公钥 → 点击 Add SSH key

3)验证 ssh -T git@github.com,会输出类似

Hi 用户名! You've successfully authenticated, but GitHub does not provide shell access.

2.1.3 复制 SSH 密钥到容器
sudo docker exec humble mkdir -p /root/.ssh sudo docker cp ~/.ssh/id_ed25519 humble:/root/.ssh/ # 复制私钥 sudo docker cp ~/.ssh/id_ed25519.pub humble:/root/.ssh/ # 复制公钥

如果不加sudo,就统一不加sudo,否则会no such directory

2.1.4 进入容器并修复权限

进入容器 sudo docker exec -it humble /bin/bash,依次执行

# 修复权限 chmod 700 /root/.ssh chmod 600 /root/.ssh/id_ed25519 chmod 644 /root/.ssh/id_ed25519.pub # 添加 GitHub 到 known_hosts ssh-keyscan github.com >> /root/.ssh/known_hosts # 测试 SSH 连接 ssh -T git@github.com

2.2 配置Git

2.2.1 配置 Git 的用户名和邮箱

全局用global,局部用local,这里我省事直接全局

git config --global user.name <用户名>

git config --global user.email <邮箱>

查看

git config --global user.name

git config --global user.email

2.2.2 初始化本地仓库
# 如果项目还没有 .git 目录 git init # 添加所有文件到暂存区 git add . # 提交到本地仓库 git commit -m "Initial commit"
2.2.3 关联远程仓库

# 添加远程仓库地址 git remote add origin git@github.com:xxx.git

# 验证远程仓库是否添加成功 git remote -v

2.2.4 创建并切换到新分支

git checkout -b your-branch-name

2.2.5 推送新分支到远程仓库

# 首次推送需要设置上游分支 git push -u origin feature/your-branch-name

后面直接push

3 学习dockerfile

裸镜像创建的容器,后面肯定会新安装不少东西,但如果这个容器因为某些原因被销毁,则之前所做的全要重安装一遍,因此写个完整的dockerfile以便后续镜像具备所需的所有包,新建容器可以开箱即用

3.1 编写Dockerfile

根据我目前的开发环境,Dockerfile如下

# 使用国内 ROS 镜像作为基础镜像 FROM docker.1ms.run/osrf/ros:humble-desktop-full # 避免交互式提示 ENV DEBIAN_FRONTEND=noninteractive ENV ROS_DISTRO=humble # 使用国内 Ubuntu 镜像源,并安装常用依赖和额外 ROS 包 RUN sed -i -e 's|http://archive.ubuntu.com/ubuntu/|https://mirrors.tuna.tsinghua.edu.cn/ubuntu/|g' \ -e 's|http://security.ubuntu.com/ubuntu/|https://mirrors.tuna.tsinghua.edu.cn/ubuntu/|g' \ /etc/apt/sources.list \ && apt-get update \ && apt-get install -y --no-install-recommends \ curl \ gnupg2 \ lsb-release \ software-properties-common \ python3-pip \ python3-dev \ git \ python3-colcon-common-extensions \ python3-rosdep \ ros-humble-turtle-tf2-py \ ros-humble-tf2-tools \ ros-humble-ros-gz \ && rm -rf /var/lib/apt/lists/* # 安装 Python 库 RUN pip3 install --no-cache-dir transforms3d || \ pip3 install --no-cache-dir --break-system-packages transforms3d # 初始化 rosdep # 注意:rosdep update 依赖 GitHub 网络,国内环境可能失败。 # 如果构建时失败,建议注释掉这一段,进入容器后手动执行。 RUN if [ ! -f /etc/ros/rosdep/sources.list.d/20-default.list ]; then \ rosdep init; \ fi \ && rosdep update # 设置 ROS2 环境 RUN echo "source /opt/ros/humble/setup.bash" >> /root/.bashrc # 默认进入 bash CMD ["bash"]

3.2 构建镜像

运行 docker build -t docker-cfg . # 其中 docker-cfg 是镜像名

将镜像打包 docker save -o docker-cfg.tar docker-cfg:latest && ls -lh docker-cfg.tar

执行成功:

..... Successfully tagged dcker-cfg:latest -rw------- 1 tina docker 1.2G 5月 5 20:12 docker-cfg.tar

查看镜像,第一行就是刚刚创建的镜像

3.3 使用示例

打包的.tar可以拿到ubuntu18.04的开发环境使用(即使镜像是22.04)

1) 拷贝镜像文件
把 docker-cfg.tar 从当前机器拷贝到 Ubuntu 18.04 机器

2)安装 Docker
若 Ubuntu 18.04 上还没安装 Docker,运行:
sudo apt update
sudo apt install -y docker.io
sudo systemctl enable --now docker

如果用户不是root,执行
sudo usermod -aG docker $USER && newgrp docker

3)加载镜像
在 Ubuntu 18.04 机器上执行:docker load -i docker-cfg.tar

成功后会看到类似 Loaded image: docker-cfg:latest

4)运行容器
直接启动一个交互式容器:docker run -it docker-cfg bash

或 把本地代码目录挂载到容器:

docker run -it -v /path/to/your/project:/root/project docker-cfg bash

进入容器后,就能使用 ROS Humble、transforms3d、tf2 等环境

http://www.cnnetsun.cn/news/2613995.html

相关文章:

  • 基于CNTFET的10晶体管三态SRAM设计:原理、仿真与图像处理应用
  • 保姆级图解:NCCL Bootstrap网络连接建立全流程(附源码解析与避坑点)
  • 深圳哪家SMT贴片加工厂质量好?哪家性价比高?
  • 哪个品牌的落地灯最好用?2026学生落地灯排行榜,内行选购指南!
  • 3大核心优势:Windows Android子系统如何彻底改变你的数字生活
  • 九大网盘直链下载助手终极指南:免费解锁高速下载新体验
  • 数学与思维
  • H3CSE 高性能园区网:链路聚合技术
  • Python之rknfind包语法、参数和实际应用案例
  • 豆包平台品牌收录机制实测与优化思路
  • 量子哈密顿模拟与光锥保护技术解析
  • BetterNCM Installer:5分钟搞定网易云音乐插件安装的终极方案
  • TMSpeech:Windows本地实时语音转文字,隐私安全、完全免费的开源方案
  • NCMDump:网易云音乐加密文件转换完全指南
  • Keil MDK与CMSIS-Toolbox版本冲突解决方案
  • 从分词原理到定价逻辑,开发者必读的Token全栈指南!
  • 别再只用ROC曲线了!用Python手写DeLong检验,科学比较两个机器学习模型的AUC差异
  • LabVIEW水泵智能检测应用
  • 当网盘下载速度只剩100KB/s,你该如何打破速度封印?
  • 还在熬夜改答辩 PPT?PaperXie AI 一键搞定你的毕业论文 “门面”
  • XOOER 数尔 解读:生态五大 GEO 服务 依托健康、安全、合规、元生、打造全新 AI 增长生态
  • Boss直聘批量投递工具:5分钟实现求职效率提升300%的终极指南
  • MiMo突发赠送820亿Tokens!我用3天时间,把Claude API全文档做成了中文离线站
  • stm32从模式
  • 从Cocos到App Store:为你的iOS游戏集成AdMob广告并搞定ATT授权与GDPR合规
  • 射击训练项目逆向纪实
  • claude code(六):【Claude Code官方最佳实践4️⃣】:常见的工作流程
  • Keil PK51 V9.55栈分配问题解析与解决方案
  • 别再自己造轮子了!用Avue-data快速搞定企业级数据大屏(附前后端联调避坑指南)
  • 【ChatGPT广告文案生成实战指南】:20年营销技术专家亲授7大高转化模板与避坑清单