Ubuntu24.04(Jazzy)从零开始实现环境配置和Gmapping建图
Ubuntu24.04(Jazzy)的环境配置有些变化,加上GMapping暂时没有官方的适配,所以需要自己基于源码进行适配后重编译,本文适配后的代码地址:https://github.com/zacSuo/ros2_gmapping.git,另外,Ubuntu24默认的键盘控制程序teleop_twist_keyboard发布的/cmd_vel和机器人仿真程序turtlebot3_gazebo订阅的/cmd_vel使用了不同的数据类型,因此默认无法正常通信,可以修改turtlebot3_gazebo的监听部分(geometry_msgs/msg/TwistStamped),或者修改teleop_twist_keyboard的发布部分(geometry_msgs/msg/Twist),本文本文选择后者,重写了键盘发布的程序,以便兼容turtlebot3_gazebo监听格式。
1. ROS2 安装
官网地址:https://docs.ros.org/en/jazzy/Installation/Ubuntu-Install-Debs.html
#设置语言环境(安装Ubuntu时候设置过可以跳过)
locale # check for UTF-8
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
locale # verify settings# 配置安装源
sudo nano /etc/apt/sources.list
# Ubuntu 24.04 (Noble Numbat) 软件源配置
deb https://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ noble-backports main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe multiverse
# 源码仓库(可选,如果需要编译软件的话)
# deb-src https://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ noble-backports main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe multiverse# 安装依赖库
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository universe
# 更新 Debian 包索引
sudo apt update && sudo apt install curl -y
export ROS_APT_SOURCE_VERSION=$(curl -s https://api.github.com/repos/ros-infrastructure/ros-apt-source/releases/latest | grep -F "tag_name" | awk -F\" '{print $4}')
curl -L -o /tmp/ros2-apt-source.deb "https://github.com/ros-infrastructure/ros-apt-source/releases/download/${ROS_APT_SOURCE_VERSION}/ros2-apt-source_${ROS_APT_SOURCE_VERSION}.$(. /etc/os-release && echo $VERSION_CODENAME)_all.deb" # If using Ubuntu derivates use $UBUNTU_CODENAME
sudo dpkg -i /tmp/ros2-apt-source.deb# 安装开发工具
sudo apt update && sudo apt install ros-dev-tools# 安装ROS(桌面完整版)
sudo apt update
sudo apt upgrade
sudo apt install ros-jazzy-desktop# 配置环境
echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc
source ~/.bashrc
2. Gazebo 仿真环境安装
# 安装依赖
sudo apt update
sudo apt install -y lsb-release wget gnupg
# 添加Gazebo仓库
sudo wget https://packages.osrfoundation.org/gazebo.gpg -O /tmp/gazebo.gpg
gpg --dearmor -o /tmp/gazebo-archive-keyring.gpg /tmp/gazebo.gpg
sudo mv /tmp/gazebo-archive-keyring.gpg /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg] http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/pkgs-osrf-stable.list > /dev/null
#安装Gazebo Sim
sudo apt update
sudo apt install ros-jazzy-ros-gz
# 关闭虚拟机,禁用3D图形加速(gazebo可能会不兼容)
打开.vmx文件
mks.enable3d = "FALSE"
# 启动虚拟机,配置GPU图形上下文
echo "export SVGA_VGPU10=0" >> ~/.bashrc
source ~/.bashrc
# 验证gazebo安装
gz sim --version
gz sim shapes.sdf
# 验证ros2融合
source /opt/ros/jazzy/setup.bash
ros2 launch ros_gz_sim empty_world.launch.py
3. TurtleBot3 仿真机器人安装
# 安装 TurtleBot3 Gazebo 包
sudo apt install ros-jazzy-turtlebot3-gazebo# 启动 TurtleBot3 仿真
export TURTLEBOT3_MODEL=waffle
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
4. GMapping安装使用
# Gmapping源码 下载
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone https://github.com/zacSuo/ros2_gmapping.git
# 安装依赖
sudo apt update
sudo apt install ros-jazzy-tf2-geometry-msgs ros-jazzy-laser-geometry ros-jazzy-nav2-common ros-jazzy-turtlebot3-teleop ros-jazzy-topic-tools libncurses-dev ros-jazzy-nav2-map-server
# 编译GMapping
cd ~/ros2_ws
colcon build --packages-select openslam_gmapping slam_gmapping
source ~/ros2_ws/install/setup.bash
# 终端1: 启动仿真环境(如果第三步安装完Turtlebot3后已经启动,则忽略)
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
# 终端2: 启动Rviz查看建图过程和结果
rviz2 -d ~/ros2_ws/src/ros2_gmapping/slam_gmapping/rviz/gmapping.rviz
# 终端3:启动Gampping算法
ros2 launch slam_gmapping slam_gmapping.launch.py
# 终端4: 启动键盘控制(保持终端激活)
ros2 run slam_gmapping teleop_keyboard
# 控制指令(保持终端3 处于激活状态):
w:前进
x:后退
a:左转
d:右转
s:停止
# 终端5: 保存地图(生成pgm、yaml两个文件)
ros2 run nav2_map_server map_saver_cli -f ~/ros2_ws/src/ros2_gmapping/slam_gmapping/map/gmapping_house
cat ~/ros2_ws/src/ros2_gmapping/slam_gmapping/map/gmapping_house.yaml