JetBrains IDEA/Clion/Client + ROS 远程开发环境搭建
实现功能CLion在运行在Docker上的Ubuntu上进行ROS开发,可以通过frp实现真正的远程开发(仅猜想),本机可通过VNC连接Ubuntu使用ROS相关的GUI功能。工具JetBrains Client:2021.3之后推出的RemoteDevelopment功能;Docker + ubuntu 18.04:docker pull ubuntu:18.04 拉取即可;ROS:因为ubun
目标群体
本往篇适合喜欢JetBrains家产品的用户,通过Windows或Mac远程在Ubuntu上进行Ros开发。
方案
JetBrains Client + Ubuntu + Clion Linux
- 因Clion运行在Ubuntu端,故对Ubuntu的配置要求较高
- 暂时未在树莓派上实现,Jetbrains Client是JB家刚出的Beta功能,似乎对arm支持不好?
- 如无以上两问题,该方案是力推方案。
已已已解决树莓派无法运行JB Client的问题,请见:https://blog.csdn.net/chike0039/article/details/122668692
IDEA + Ubuntu
1. 我当前选用的方案,因为我没有除了树莓派没有一个强的Ubuntu主机,而树莓派暂未配置完成JetBrains的远程开发功能;
- 方案缺陷,只能使用Python开发,不能使用C++,因为当前我主要使用Python,Clion的python版本是无法实现远程开发的,所以这种折衷方案我还是倒向了Python,Clion也就没有完全研究透彻。
工具
必要
ROS:因为ubuntu使用的版本为18.04,故ROS版本选择melodic。
可选
JB工具
- JetBrains IDEA Utimate:需要安装python插件;
- JetBrains Client:2021.3之后推出的RemoteDevelopment功能;
系统
- Docker + ubuntu 18.04:docker pull ubuntu:18.04 拉取即可,搭配JB Client;
- Ubuntu 18.04 / 20.04:可使用虚拟机、主机、云服务器,搭配JB Client 或 JB IDEA;
- JetBrains Space:通过JB官网注册,新建仓库那可使用,,搭配JB Client;
系统准备
Dockers
安装docker略,拉取ubuntu 18.04镜像:
docker pull ubuntu:18.04
使用root用户进入ubuntu,注意商品映射,这里推荐kitematic,是docker的可视化管理工具,因为我用的mac,在镜像起来之后再修改端口映射实在太费劲,有了kitematic就舒服多了:
# 大致解释下,5901和2是用于vnc显示的端口,6022自然是映射ssh的端口
docker run -itd -u root -w /root --privileged --hostname=ubuntu -p 5901:5901 -p 5902:5902 -p 6022:22 --name ubuntu ubuntu:18.04
搭建vnc环境:
apt-get install xfce4 vnc4server xrdp -y
# 执行vncserver后设置密码
vncserver
# 修改~/.vnc/xstartup
vim xstartup
# 填入以下内容
cat xstartup
#!/bin/sh
# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP" &
unset SESSION_MANAGER
unset DBUGS_SESSION_BUS_ADDRESS
startxfce4 &
# 杀掉vncserver的进程
vncserver -kill :1
# 重启vncserver并设置分辨率
vncserver -geometry 1920x1200 :1
# :1对应的端口为5901(5900 + 1),也可使用:2,对应端口5902
# 再使用vnc工具,通过127.0.0.1:1即可连接ubuntu的桌面了
# 这里主要用于使用ros相关的GUI工具
树莓派
启动盘制作Mac版
Win版的请自行百度,教程一堆。
# 查看U盘地址
diskutil list
# 格式化U盘
diskutil partitionDisk /dev/disk2 MBR FAT32 UNTITLED 0b
# 卸载
diskutil unmountDisk /dev/disk2
# 烧录
sudo dd bs=4m if=/Downloads/ubuntu-20.04.1-preinstalled-server-arm64+raspi.img of=/dev/disk2
# 新建ssh空文件
ROS环境配置
进入ubuntu之后,先修改源,我这里试的是163源最快,注意源与系统版本、硬件配置相关,以下是x_86/18.04对应的源,其它源请自行百度:
cat /etc/apt/sources.list
deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
apt-get update && apt-get upgrade
搭建ssh环境:
apt-get install openssh-server
# 修改配置文件,将PermitRootLogin值修改为yes
vim /etc/ssh/sshd_config
# 启动ssh
/etc/init.d/ssh start
# 这里我没研究如何让ssh自启,systemctl是用不了的
安装最新版的cmake:
# 这里我不确定原系统是否带有cmake,先卸载掉吧
apt-get remove cmake
cd /usr/local
wget https://cmake.org/files/v3.20/cmake-3.20.6-linux-x86_64.tar.gz
tar zxf cmake-3.20.6-linux-x86_64.tar.gz
mv cmake-3.20.6-linux-x86_64 cmake-3.20.6
ln -s /usr/local/cmake-3.20.6/bin/* /usr/bin/
cmake --version
开始搭建ROS,更详细的可参考树莓派4b安装带桌面的ubuntu18.04 server和ROS melodic系统,我一开始是在树莓派上鼓捣的:
sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654
apt-get update
apt-get install ros-melodic-desktop-full
apt-get install ros-melodic-rqt*
apt-get install python-rosinstall
apt install python-rosinstall python-rosinstall-generator python-wstool build-essential
# init这一步可能会出现问题,参考https://blog.csdn.net/qq_36458461/article/details/106532229
rosdep init
rosdep update
初始化一个测试项目:
cd ~
mkdir -p ros/untitled/src
cd ros/untitled
catkin_make
cd src
catkin_create_pkg hehe roscpp rospy std_msgs
JB配置
Client远程配置
安装2021.3之后版本的JetBrains产品,我用的是Idea,也可以使用JetBrains Client,然后通过Remote Development功能连接到Ubuntu服务器,注意Docker的ssh端口是6022:
这里注意,CLion下载后就退出,同时需要将ubuntu上的jetbrains进程杀掉,可使用下述命令:
ps -ef| grep -v grep| grep -i jetbrains| awk ‘{print $2}’| xargs kill -9
或者也可以通过top命令,找到ld-linux-x86-64对应的pid,然后kill -9 pid杀掉该进程。
到ubuntu中配置下clion的环境变量,具体方法:
# 先将系统默认/bin/sh由dash转为bash,执行下述命令,然后选择no
sudo dpkg-reconfigure dash
# 这里可能需要写一个工具,在生成项目时自动把环境加入到这里来
# 这里可能地址会有点小差异,请各位自己寻找
sed -i '/LAUNCHER_PATH=/a\\nsource /opt/ros/melodic/setup.bash\nsource "$2/devel/setup.bash"' ~/.cache/JetBrains/RemoteDev/dist/b7170a8872397_CLion-2021.3.2/bin/remote-dev-server.sh
重新打开clion,设置python解释器路径:
完成后,看pip包中是否包含rospy,有则正确无则错:
在ubuntu中执行bash /yourProjectPath/devel/setup.bash,然后执行/usr/bin/env,会打印出当前窗口所有的环境变量,将所有的变量复制,换行符以;号替换,形成环境变量字符,将该字符粘贴到CLion中:
进入clion之后配置如下:
IDEA配置
首先需要在Ubuntu服务器上配置Python环境变量,否则IDEA启动后无法直接读取Python的ROS库位置,导致代码import警报,即使后期在IDEA中配置环境变量,可以正常执行代码但依旧会出现提示的警告,添加的方法是在已有的python初始库文件夹中加入.pth文件,文件中写上ROS的python库路径,给个参考如下:
# 在已有python库路径下添加.pth文件,python会将其初始化为PYTHONPATH,放入sys.path中
echo "/opt/ros/noetic/lib/python3/dist-packages" > /usr/lib/python3/dist-packages/ros.pth
之后需要配置Python执行的环境变量,否则会报“WARNING: cannot load logging configuration file, logging is disabled”,方法如下:
找到Run/Debug Configurations -> Edit configuration templates -> python -> environment variables,在其中粘入Ubuntu的环境变量,获取方式脚本如下,直接粘到命令行中复制结果粘进来就行了:
/usr/bin/env| grep -ivP “ls_colors|termcap”| tr -t ‘\n’ ‘;’
大功告成
参考
更多推荐
所有评论(0)