1. 项目背景与环境搭建
TurtleBot3作为一款开源的移动机器人平台,在ROS2生态中占据重要地位。这次我们要在Ubuntu 20.04系统上,配置ROS2 Foxy版本和Gazebo 11.15.1仿真环境,完成TurtleBot3的编译与运行。这个组合是目前ROS2开发中较为稳定的选择,特别适合需要长期维护的项目。
1.1 系统环境准备
首先确保你的Ubuntu 20.04系统已经完成基础配置。我推荐使用全新安装的系统开始,避免已有环境造成的冲突。系统安装完成后,执行以下基础更新:
bash复制sudo apt update && sudo apt upgrade -y
sudo apt install curl git wget build-essential
注意:如果你使用虚拟机运行Ubuntu,建议分配至少4GB内存和30GB存储空间。Gazebo运行时对资源要求较高,物理机性能会更好。
1.2 ROS2 Foxy安装
ROS2 Foxy是专为Ubuntu 20.04设计的LTS版本,官方提供了完整的安装指南。我们采用二进制包安装方式:
bash复制# 设置locale
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
# 添加ROS2仓库
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
# 安装ROS2基础包
sudo apt update
sudo apt install ros-foxy-desktop
安装完成后,记得设置环境变量:
bash复制source /opt/ros/foxy/setup.bash
echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
1.3 Gazebo 11.15.1安装
Gazebo的版本需要与ROS2 Foxy兼容。官方推荐使用Gazebo Fortress,但11.15.1版本在实际使用中表现更稳定:
bash复制sudo apt install gazebo11 libgazebo11-dev
验证Gazebo安装:
bash复制gazebo --version
# 应该输出: gazebo11 11.15.1
2. TurtleBot3环境配置
2.1 创建工作空间
ROS2开发通常采用colcon构建系统。我们先创建工作空间:
bash复制mkdir -p ~/turtlebot3_ws/src
cd ~/turtlebot3_ws/src
2.2 获取TurtleBot3源码
TurtleBot3的ROS2支持包需要从官方仓库克隆:
bash复制git clone -b foxy-devel https://github.com/ROBOTIS-GIT/turtlebot3.git
git clone -b foxy-devel https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
git clone -b foxy-devel https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
实操心得:有时官方仓库更新可能导致编译失败。如果遇到问题,可以尝试指定具体的commit hash而不是分支。
2.3 安装依赖项
在编译前需要安装相关依赖:
bash复制sudo apt install python3-rosdep2
sudo rosdep init
rosdep update
cd ~/turtlebot3_ws
rosdep install -i --from-path src --rosdistro foxy -y
3. 编译与配置
3.1 使用colcon编译
在workspace根目录执行编译:
bash复制cd ~/turtlebot3_ws
colcon build --symlink-install
编译完成后设置环境变量:
bash复制echo "source ~/turtlebot3_ws/install/setup.bash" >> ~/.bashrc
echo "export TURTLEBOT3_MODEL=waffle_pi" >> ~/.bashrc
source ~/.bashrc
注意:TURTLEBOT3_MODEL环境变量必须设置,否则后续启动会报错。可选值有burger、waffle和waffle_pi。
3.2 Gazebo模型配置
TurtleBot3需要额外的Gazebo模型文件:
bash复制cd ~
git clone https://github.com/ROBOTIS-GIT/turtlebot3_gazebo_models
mkdir -p ~/.gazebo/models
cp -r turtlebot3_gazebo_models/turtlebot3_* ~/.gazebo/models/
4. 运行与测试
4.1 启动Gazebo仿真环境
首先启动一个空的世界:
bash复制ros2 launch turtlebot3_gazebo empty_world.launch.py
如果一切正常,你应该能看到Gazebo界面和一个空的世界。接下来可以加载TurtleBot3模型:
bash复制ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
4.2 控制机器人移动
新开一个终端,运行键盘控制节点:
bash复制ros2 run turtlebot3_teleop teleop_keyboard
按照屏幕提示使用键盘控制机器人移动。WASD键控制方向,空格键停止。
4.3 RViz可视化
为了更直观地查看机器人状态,可以启动RViz:
bash复制ros2 launch turtlebot3_bringup rviz2.launch.py
在RViz中添加需要的显示组件,如激光扫描、相机图像等。
5. 常见问题排查
5.1 Gazebo启动黑屏
如果Gazebo启动后只有黑屏,可能是显卡驱动问题。尝试:
bash复制sudo apt install mesa-utils
glxinfo | grep "OpenGL version"
如果输出显示的是LLVM而不是你的显卡型号,需要安装正确的显卡驱动。
5.2 模型加载失败
如果Gazebo中看不到TurtleBot3模型,检查:
- 模型文件是否复制到了~/.gazebo/models目录
- 环境变量TURTLEBOT3_MODEL是否设置正确
- 终端中是否有关于模型加载的错误信息
5.3 ROS2节点通信问题
如果节点间无法通信,检查:
bash复制ros2 topic list
ros2 node list
确保所有需要的节点都正常运行,并且话题匹配。
6. 性能优化建议
6.1 Gazebo加速渲染
对于性能较低的机器,可以改用轻量级渲染器:
bash复制sudo apt install gazebo11-plugin-base
然后在启动Gazebo时添加参数:
bash复制ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py verbose:=true render:=ogre
6.2 减少仿真负载
如果仿真运行缓慢,可以简化物理仿真:
bash复制ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py physics:=ode
6.3 使用加速图形驱动
对于NVIDIA显卡用户:
bash复制sudo apt install nvidia-driver-510
sudo apt install libnvidia-gl-510
安装完成后重启系统。
7. 扩展应用开发
7.1 创建自定义ROS2包
要在TurtleBot3基础上开发新功能,可以创建新包:
bash复制cd ~/turtlebot3_ws/src
ros2 pkg create --build-type ament_python my_turtlebot3_pkg
7.2 编写简单控制节点
在包中创建节点文件my_controller.py:
python复制import rclpy
from rclpy.node import Node
from geometry_msgs.msg import Twist
class MyController(Node):
def __init__(self):
super().__init__('my_controller')
self.publisher = self.create_publisher(Twist, '/cmd_vel', 10)
timer_period = 0.1
self.timer = self.create_timer(timer_period, self.timer_callback)
def timer_callback(self):
msg = Twist()
msg.linear.x = 0.2
msg.angular.z = 0.5
self.publisher.publish(msg)
def main(args=None):
rclpy.init(args=args)
node = MyController()
rclpy.spin(node)
node.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
7.3 构建并运行自定义节点
修改package.xml和setup.py添加依赖后,重新编译:
bash复制cd ~/turtlebot3_ws
colcon build --packages-select my_turtlebot3_pkg
source install/setup.bash
ros2 run my_turtlebot3_pkg my_controller
8. 实际应用中的经验分享
在长期使用TurtleBot3进行ROS2开发过程中,我积累了一些实用技巧:
-
仿真速度控制:Gazebo默认以实时速度运行,但开发时可能需要加速仿真。可以通过修改
/worlds/turtlebot3_world.world文件中的<physics>标签来调整。 -
日志管理:ROS2的日志默认存储在
~/.ros/log。对于长时间运行的仿真,建议定期清理或使用ros2 bag记录特定话题。 -
参数调优:TurtleBot3的控制参数可以在
turtlebot3_gazebo包的param目录中找到。调整这些参数可以优化机器人的运动性能。 -
多机仿真:通过修改启动文件,可以在同一个Gazebo环境中运行多个TurtleBot3实例,用于多机器人系统研究。
-
传感器数据可视化:除了RViz,还可以使用PlotJuggler工具对传感器数据进行更专业的分析和可视化。