本文将详细介绍在已安装 ROS2 humble 的 Ubuntu22.04 系统下,安装 ROS1 Noetic 并实现二者共存的具体步骤。
1.更新系统
sudo apt update && sudo apt upgrade -y
2.安装依赖
sudo apt install -y git build-essential cmake python3-pip python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool libboost-all-dev
3.创建 ROS1 工作空间
mkdir -p ~/ros_catkin_ws
cd ~/ros_catkin_ws
4.下载 ROS1 源码
rosinstall_generator desktop --rosdistro noetic --deps --tar > noetic-desktop.rosinstall
wstool init src noetic-desktop.rosinstall
wstool update -t src
第二行代码安装卡顿后,另开端口运行第三行代码会补充安装
5.解决依赖问题
部分依赖在 Ubuntu22.04 环境下存在冲突,需要手动调整。进入下面指定目录,打开package.xml文件,删除<run_depend>hddtemp</run_depend>这一行,以解决冲突问题:
cd ~/ros_catkin_ws/src/diagnostics/diagnostic_commin_diagnostics
6.解决兼容问题
由于 ROS1 部分组件与 Ubuntu22.04 存在兼容性问题,需替换相关组件。先删除原有冲突组件,再从特定分支下载兼容版本:
cd ~/ros_catkin_ws/src
rm -r rosconsole urdf
git clone https://github.com/dreuter/rosconsole.git -b noetic-jammy
git clone https://github.com/dreuter/urdf.git -b set-cxx-version
7.安装依赖
sudo pip install rosdepc
sudo rosdepc init
rosdepc update
rosdepc install --from-paths src --ignore-src --rosdistro noetic -y
8.设置 ROS1 环境变量
因为系统中已安装 ROS2,为避免环境变量冲突,在编译 ROS1 前需指定当前使用的 ROS 版本为 Noetic,在终端输入:
export ROS_DISTRO=noetic
9.编译 ROS1
cd ~/ros_catkin_ws
./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release
10.配置环境变量
为方便在 ROS1 和 ROS2 之间切换,需配置环境变量。打开用户主目录下的.bashrc文件,在末尾添加以下代码:
echo "ros noetic(1) or ros2 humble(2)?"
read edition
# 清除所有 ROS 相关环境变量
function clean_ros_env() {
# 清除标准 ROS 变量
unset ROS_DISTRO ROS_VERSION ROS_PACKAGE_PATH ROS_ETC_DIR
unset ROS_MASTER_URI ROS_HOSTNAME ROS_IP
# 清除 ROS2 特有变量
unset ROS_DOMAIN_ID RMW_IMPLEMENTATION AMENT_PREFIX_PATH
unset COLCON_PREFIX_PATH ROS_LOCALHOST_ONLY
# 清除 CMAKE 相关变量
unset CMAKE_PREFIX_PATH
# 重置 PYTHONPATH
export PYTHONPATH=$(echo $PYTHONPATH | tr ':' '\n' | grep -v '/opt/ros' | grep -v '/home/bg/ros_catkin_ws' | paste -sd: -)
# 重置 PATH
export PATH=$(echo $PATH | tr ':' '\n' | grep -v '/opt/ros' | grep -v '/home/bg/ros_catkin_ws' | grep -v '/opt/ros/humble' | paste -sd: -)
# 重置 LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$(echo $LD_LIBRARY_PATH | tr ':' '\n' | grep -v '/opt/ros' | grep -v '/home/bg/ros_catkin_ws' | paste -sd: -)
}
# 清理环境
clean_ros_env
# 根据选择加载环境
if [ "$edition" -eq "1" ]; then
echo "Loading ROS Noetic environment"
source ~/ros_catkin_ws/install_isolated/setup.bash
export ROS_MASTER_URI=http://localhost:11311
export ROS_HOSTNAME=localhost
else
echo "Loading ROS2 Humble environment"
source /opt/ros/humble/setup.bash
export ROS_DOMAIN_ID=42
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
fi
11.测试环境
分别使用命令启动ros1和ros2的rviz,运行正常
12.参考网址
千万不要下载python3.8,否则会出现各种bug,大写离谱