clion远程配置docker ros2

CLION与docker中的ROS2环境构建远程连接

  • 设备前提
  • 开启SSH服务
  • CLION配置
  • CLION配置
    • CLION IDE远程连接过程
    • 实现CLION SSH 远程部署
  • 开启fastlio2debug之旅

设备前提

本地宿主机:UBUNTU 20.04
docker container:ros2_container (内置环境ROS2 humble)
通过之前的tcp连接,将本地宿主机的ExposedPort:10802与docker container内置端口22进行connected

tip:检查docker 中启动的container 的port connection

docker ps -a #查看容器 (容器如果显示exited状态执行下面这行内容)
docker restart container_id
docker ps #用来查看运行container

在这里插入图片描述> 详细说明:

此时看到ports的端口号连接的是:0.0.0.0:10802->22/tcp(也就是图片中涂成白色的部分)
构建本地宿主机(20.04)与远程docker的连接(ros2_container)的端口连接成功实现。

开启SSH服务

容器内部:docker环境下
进入到docker容器(ros2_container)并安装ssh服务

docker exec -it ros2_container /bin/bash #选择这样进入container环境能够确保在通过ctrl+d退出容器的时候,容器不会停止运行(docker attach ros2_container /bin/bash则会在退出容器后使得容器停止运行)#安装SSH服务(in ros2_container)
apt-get update #防止出现无法定位到软件
apt-get install openssh-client
apt-get install openssh-server#启动SSH
./etc/init.d/ssh start 
#修改配置文件/etc/ssh/sshd_config 允许root用户登陆
vim /etc/ssh/sshd_config
#或者(echo "PermitRootLogin yes" >> /etc/ssh/sshd_config也可以)
#添加
UsePAM no
PermitRootLogin yes
PasswordAuthentication yes#切记 重新启动SSH
service ssh restart (/etc/init.d/ssh restart )#这两句命令都可以
systemctl enable ssh
#设置用户名和密码用来通过clion远程连接(ssh账户设置)
passwd root#容器内部还应该安装cmake环境需要的配置!!这里一并安装了
apt-get install -y build-essential
apt-get install -y cmake
apt-get install -y gdb
apt-get install -y gdbserver
apt-get install -y rsync#在docker 容器中敬爱嗯SSH设为跟随container的自动启动
#在/root目录下新建start_ssh.sh脚本 并赋予文件执行权限
touch /root/start_ssh.sh  vim /root/start_ssh.sh chmod +x /root/start_ssh.sh然后在start_ssh.sh文件中编辑以下内容:
#!/bin/bash   LOGTIME=$(date "+%Y-%m-%d %H:%M:%S") 
echo "[$LOGTIME] startup run..." >>/root/start_ssh.log 
service ssh start >>/root/start_ssh.log   ###其他服务也可这么实现#上面是编辑的内容 然后
#下面将start_ssh.sh脚本添加到启动文件中
vim /root/.bashrc
#在.bashrc文件末尾插入一行
# startup run 
if [ -f /root/start_ssh.sh ]; then       . /root/start_ssh.sh 
fi
#以上为添加在.bashrc中的内容
#然后执行如下命令
source /root/.bashrc #实现等下次重启容器的时候,添加的服务也就跟着重启了

参考连接

CLION配置

本地宿主机测试连接

ssh root@localhost -p 10802
显示permission denied需要在local 宿主机中执行
systemctl enable ssh 
#输入密码后 显示连接成功的界面 以及进入到container的环境

参考连接
在这里插入图片描述

CLION配置

这里首先列举出我的参考博客:

  1. 使用Clion优雅的完全远程自动同步和远程调试c++
  2. 使用Clion优雅的完全远程自动同步和远程调试c(下)
  3. Clion在docker中开发
  4. 最核心的博客

CLION IDE远程连接过程

SSH configuration 配置

在clion->files-> setting ->ssh configuration ->+然后在相关的页面输入配置信息
port信息为你暴露的外部端口信息(10801)然后通过test connection 显示succeffully connected
SH然后配置tool chains
这里需要注意,你的credential选择的是上一部配置的SSH configuration信息,并检测成功没问题即可
在这里插入图片描述

实现CLION SSH 远程部署

点击进入file->remote development 实现远程部署
进入SSH 点击new connection 然后输入相关的配置信息(图2)
请添加图片描述请添加图片描述然后点击check connection and continue
进入后,选择你的工作目录我这里因为要运行fastlio2所以,我将project directory配置为在docker中的fasetlio2_ros路径
请添加图片描述然后点击start ide and connected
在相应的路径中下载了clion的远程,然后出现如下远程连接窗口
请添加图片描述接下来进入到远程的docker环境适配下的clion窗口:
请添加图片描述再次进入到docker中的container中你下在clion的工作空间 我这里是FastLIO2_ROS

#宿主机执行
ssh root@localhost -p 10801 #进入相对应的container连接环境
输入以下命令
source /opt/ros/humble/setup.bash #启动ROS2环境
colcon build --symlink-install
然后source ./install/seup.bash #启动编译后的node pkg信息
#因为需要在clion中配置cmake的environment

这里重点!!
container中输入以下信息
这段脚本经过测试发现是用来输出docker中配置的ros相关所必需的变量信息的路径

ros_env="AMENT_PREFIX_PATH CMAKE_PREFIX_PATH COLCON_PREFIX_PATH PKG_CONFIG_PATH PYTHONPATH LD_LIBRARY_PATH PATH ROS_DISTRO ROS_PYTHON_VERSION ROS_LOCALHOST_ONLY ROS_VERSION"
env_string=""
for e in ${ros_env}; doenv_string+="$e=${!e};"
done
echo "$env_string"

然后在远程的clion窗口中,打开设置->build,excution,deployment ->cmake
environment设置为上述代码输出的信息
请添加图片描述cmake中的设置:
请添加图片描述参考连接

最后成功debug至此完成
请添加图片描述

开启fastlio2debug之旅

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Midjourney从入门到精通教程,10分钟让你从小白变大神!【珍藏版】

前言: 《Midjourney使用教程:从入门到精通》旨在带领你一步步掌握这款强大的AI创作工具。无论你是设计小白还是有一定基础的创作者,本教程都将为你揭开Midjourney的神秘面纱。从基本操作到高级技巧,我们将逐一解析,让…

JAVA开源项目 网上租赁系统 计算机毕业设计

本文项目编号 T 050 ,文末自助获取源码 \color{red}{T050,文末自助获取源码} T050,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计5.4.1 用…

面试经典 150 题:189、383

189. 轮转数组 【参考代码】 class Solution { public:void rotate(vector<int>& nums, int k) {int size nums.size();if(1 size){return;}vector<int> temp(size);//k k % size;for(int i0; i<size; i){temp[(i k) % size] nums[i];}nums temp; }…

基于MATLAB的混沌序列图像加密程序

设计目的 图像信息生动形象&#xff0c;它已成为人类表达信息的重要手段之一&#xff0c;网络上的图像数据很多是要求发送方和接受都要进行加密通信&#xff0c;信息的安全与保密显得尤为重要&#xff0c;因此我想运用异或运算将数据进行隐藏&#xff0c;连续使用同一数据对图…

史上最大应用层DDoS攻击 H2 Rapid Reset攻击研究

前言 2023年10月Cloudflare、Google、AWS等厂商公布了一种利用HTTP/2快速重置进行应用层DDoS攻击的0day漏洞(CVE-2023-44487)[1][2]&#xff0c;即H2 Rapid Reset DDoS。Google宣传其监控到此种攻击峰值超过每秒3.98亿个请求&#xff0c;打破互联网历史最大应用层DDoS攻击记录…

Python 如何在 Web 环境中使用 Matplotlib 进行数据可视化

Python Matplotlib 在 Web 环境中的可视化 数据可视化是数据科学和分析中一个至关重要的部分&#xff0c;它能帮助我们更好地理解和解释数据。在现代应用中&#xff0c;越来越多的开发者希望能够将数据可视化结果展示在网页上。Matplotlib 是 Python 中最常用的数据可视化库之…

JavaWeb项目-----博客系统

一.设计数据库 1.创建数据库 create database if not exists java108_blog_system character set utf8; drop table if exists user; drop table if exists blog;2.创建博客列表 create table blog(blogId int primary key auto_increment,title varchar(20),content varcha…

算法练习——双指针

前言&#xff1a;大佬写博客给别人看&#xff0c;菜鸟写博客给自己看&#xff0c;我是菜鸟。 学前须知&#xff08;对自己&#xff09;&#xff1a;这里的指针不一定指地址&#xff01;也可能是数组下标。 1&#xff1a;移动零(双指针) 题目要求&#xff1a; 解题思路&#x…

vue3实现一个无缝衔接、滚动平滑的列表自动滚屏效果,支持鼠标移入停止移出滚动

文章目录 前言一、滚动元素相关属性回顾一、实现分析二、代码实现示例&#xff1a;2、继续添加功能&#xff0c;增加鼠标移入停止滚动、移出继续滚动效果2、继续完善 前言 列表自动滚屏效果常见于大屏开发场景中&#xff0c;本文将讲解用vue3实现一个无缝衔接、滚动平滑的列表自…

vscode翻译插件

vscode翻译插件 需求 &#xff1a; 在编写代码的时候&#xff0c; 打印或者定义变量的时候总是想不起来英文名称&#xff0c; 所有就开发了一款中文转换为英文的插件。 功能 1、目前支持选中中文&#xff0c;右键选择打印或者变量进行转换。 2、目前支持选中中文&#xff0…

Linux -- 初识线程

目录 线程的初步认识 为什么需要线程 怎么让代码分成多个执行流并发执行呢&#xff1f; 管理线程 线程的初步认识 线程是进程内部的一个执行分支&#xff0c;线程是CPU调度的基本单位。 在Linux操作系统中&#xff0c;线程是程序执行流的最小单位。一个进程可以包含多个线…

基于IM场景下的Wasm初探:提升Web应用性能|得物技术

一、何为Wasm &#xff1f; Wasm&#xff0c;全称 WebAssembly&#xff0c;官网描述是一种用于基于堆栈的虚拟机的二进制指令格式。Wasm被设计为一个可移植的目标&#xff0c;用于编译C/C/Rust等高级语言&#xff0c;支持在Web上部署客户端和服务器应用程序。 Wasm 的开发者参…

Linux SSH免密登入以及配置脚本

一、ssh原理简单介绍 客户端生成一对公钥和私钥&#xff0c;并将自己的公钥发送到服务器上 其中公钥用来加密&#xff0c;私钥用来解密。 二、ssh免密登入实现步骤详解 我这就以服务器controller和客户端compute来做为例子 2.1、首先在controller上输入ssh-keygen -t rsa …

Flutter 获取照片权限的时候是否要获取存储权限?

获取存储权限 Permission.storage.request(); 获取照片权限通常意味着访问相册&#xff0c;而访问相册可能还需要外部存储权限&#xff0c;因为照片通常存储在设备的外部存储中。所以&#xff0c;当你请求照片权限时&#xff0c;你也需要检查并请求外部存储权限。 是不是所有…

一个基于Rust适用于 Web、桌面、移动设备等的全栈应用程序框架

大家好&#xff0c;今天给大家分享一个用 Rust 语言编写的、受 React 启发的前端框架Dioxus&#xff0c;旨在为构建跨平台的用户界面提供高效、高性能的解决方案。 项目介绍 Dioxus项目的诞生源于开发者们对于更高效、更灵活的跨平台UI解决方案的渴望。 随着技术的发展&#…

IntelliJ Idea设置自定义快捷键

我IDEA的快捷键是自己修改成了和Eclipse相似&#xff0c;然后想要跳转到某个方法的上层抽象方法没有对应的快捷键&#xff0c;IDEA默认的是Ctrl U &#xff08;Windows/Linux 系统&#xff09; 或 Command U &#xff08;Mac 系统&#xff09;&#xff0c;但是我的不起作用&a…

前深度学习时代-经典的推荐算法

参考自《深度学习推荐系统》—— 王喆&#xff0c;用于学习记录。 1.协同过滤 “协同过滤”就是协同大家的反馈、评价和意见一起对海量的信息进行过滤&#xff0c;从中筛选出目标用户可能感兴趣的信息的推荐过程。 基于用户相似度进行推荐的协同过滤算法 UserCF 用户相似度…

达梦数据守护集群_动态增加实时备库

目录 1、概述 2、实验环境 2.1环境信息 2.2配置信息 2.3 查看初始化参数 3、动态增加实时备库 3.1数据准备 3.2配置新备库 3.3动态增加MAL配置 3.4 关闭守护进程及监视器 3.5修改归档&#xff08;方法1&#xff1a;动态添加归档配置&#xff09; 3.6 修改归档&…

6.qsqlquerymodel源码分析

目录 继承关系入口浅析qsqlquery刷新数据 扩展列或者移除列以及取别名读取数据与增减行读取数据 下一章节&#xff1a;如何使用qsqlquerymodel 与 qtableview实现自定义表格 继承关系 qsqlquerymodel 继承与qabstracttablemodel 入口 负责填充数据 void QSqlQueryModel::s…

【JavaEE】认识线程

一、引入线程 在任务管理器界面可以看到很多进程&#xff0c;可以利用CPU多核心这一点来更有效的执行这些进程&#xff0c;即在处理过程中将CPU的多个时间片分配给每个进程&#xff0c;这样的 "多进程编程"就可以起到并发编程的效果&#xff0c;因为进程可以被调度到…