学习journal(一)0505更新

学习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-full1.1.2 快速测试运行后自动删除容器方法一sudo docker run --rm docker.1ms.run/osrf/ros:humble-desktop-full bash -c echo \$ROS_DISTRO方法二先进入容器的交互式 Shellsudo 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-full1.3 创建一个容器自定义创建符合自己要求的容器我创建的这个容器名为humbledocker run -it \--name humble \--networkhost \-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 -a1.5 启动与进入容器假设容器名是humblecase1有人正在使用容器正在运行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 ~/.bashrc1.7 开启 X Server 的访问控制执行 xhost local: 后X 服务器允许来自本地包括 Docker 容器的连接请求如果容器中执行会弹出图形窗口的命令失败例如gazebo/rviz/MoveIt在宿主机执行xhost local:root0503下-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 发现并不像上面说的那样ctrlc终止后再执行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加入WaylandEnablefalse这一行2重启ubuntu3重启 ToDesk 服务sudo systemctl restart todeskd.service4验证 执行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_miscelastic_search_miscrequest_ida4c87fd50581c3fb419ba9c057b8cde2biz_id0utm_mediumdistribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-157659217-null-null.142^v102^pc_search_result_base5utm_termFlameshotspm1018.2226.3001.4187记录博客难免会需要截图Ubuntu系统的截图还不太会听说这个工具截图功能强大但学习起来还是要花些时间的3.1 目前设置了ctrl alt a 截图绑定快捷键进入设置 键盘 快捷键添加自定义快捷键如CtrlaltA关联命令flameshot gui此外右上角也有图标可以启动3.2 截取式截图后进入编辑在左上角有些标注快捷键需要记忆双击后复制截图到剪切板0504更新学习笔记截图工具Flameshot学习笔记​​​​​​​Flameshot 学习笔记-CSDN博客4 新建容器sudo docker run -it --name humble --networkhost -v /tmp/.X11-unix:/tmp/.X11-unix -v/tina:/workspace -e DISPLAY${DISPLAY} docker.1ms.run/osrf/ros:humble-desktop-full /bin/bash5 挂载机械盘后来我才知道我还没挂载机械盘我的电脑有两个磁盘一个系统盘固态128GB一个机械盘1T安装Ubuntu选固态硬盘之后需要挂载机械盘用于存放数据具体操作见我跟deepseek的对话https://chat.deepseek.com/share/elw8n9ttqfna90qbwn挂载后我的机械盘目录/mnt/hd因此新建容器挂载路径修改为/mnt/hd/tina即sudo docker run -it --name humble --networkhost -v /tmp/.X11-unix:/tmp/.X11-unix -v/mnt/hd/tina:/workspace -e DISPLAY${DISPLAY} docker.1ms.run/osrf/ros:humble-desktop-full /bin/bash6 ROS2学习之键盘控制海龟验证记录于博客​​​​​​​​​​​​​​ROS学习-CSDN博客7 vscode安装与docker适配见我的博客​​​​​​​​​​​​​​docker学习-CSDN博客​​0505 下1 ROS创建编译与运行节点记录于博客​​​​​​​​​​​​​​ROS学习-CSDN博客2 如何将容器的项目推送自己的Github仓库进行版本管理我的容器名为humble2.1 配置SSH密钥2.1.1 宿主机配置 SSH 密钥ssh-keygen -t ed25519 -C 你的邮箱然后一直回车2.1.2 将公钥添加到 GitHub1cat ~/.ssh/id_ed25519.pub 并复制公钥2添加到 GitHub 登录 GitHub → 点击右上角头像 → Settings 左侧菜单选择 SSH and GPG keys 点击绿色按钮 New SSH key Title自定义名字Key type保持 Authentication Key Key粘贴公钥 → 点击 Add SSH key3验证 ssh -T gitgithub.com会输出类似Hi 用户名! Youve 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 directory2.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 gitgithub.com2.2 配置Git2.2.1 配置 Git 的用户名和邮箱全局用global局部用local这里我省事直接全局git config --global user.name 用户名git config --global user.email 邮箱查看git config --global user.namegit config --global user.email2.2.2 初始化本地仓库# 如果项目还没有 .git 目录 git init # 添加所有文件到暂存区 git add . # 提交到本地仓库 git commit -m Initial commit2.2.3 关联远程仓库# 添加远程仓库地址 git remote add origin gitgithub.com:xxx.git# 验证远程仓库是否添加成功 git remote -v2.2.4 创建并切换到新分支git checkout -b your-branch-name2.2.5 推送新分支到远程仓库# 首次推送需要设置上游分支 git push -u origin feature/your-branch-name后面直接push3 学习dockerfile裸镜像创建的容器后面肯定会新安装不少东西但如果这个容器因为某些原因被销毁则之前所做的全要重安装一遍因此写个完整的dockerfile以便后续镜像具备所需的所有包新建容器可以开箱即用3.1 编写Dockerfile根据我目前的开发环境Dockerfile如下# 使用国内 ROS 镜像作为基础镜像 FROM docker.1ms.run/osrf/ros:humble-desktop-full # 避免交互式提示 ENV DEBIAN_FRONTENDnoninteractive ENV ROS_DISTROhumble # 使用国内 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.041 拷贝镜像文件把 docker-cfg.tar 从当前机器拷贝到 Ubuntu 18.04 机器2安装 Docker若 Ubuntu 18.04 上还没安装 Docker运行sudo apt updatesudo apt install -y docker.iosudo systemctl enable --now docker如果用户不是root执行sudo usermod -aG docker $USER newgrp docker3加载镜像在 Ubuntu 18.04 机器上执行docker load -i docker-cfg.tar成功后会看到类似 Loaded image: docker-cfg:latest4运行容器直接启动一个交互式容器docker run -it docker-cfg bash或 把本地代码目录挂载到容器docker run -it -v /path/to/your/project:/root/project docker-cfg bash进入容器后就能使用 ROS Humble、transforms3d、tf2 等环境