本项目包含足式机器人挑战组省赛的所有题目代码,涵盖ROS2编程、Gazebo仿真、运动学控制和OpenCV图像处理等内容。
作者: rosuser
日期: 2025.05
ROS版本: ROS2 Humble
系统环境: Ubuntu 22.04 (WSL2)
F:\deskop\新建文件夹 (12)/
├── WSL_Ubuntu/ # WSL Ubuntu虚拟磁盘
├── ros_ws/ # ROS2工作空间
│ └── src/
│ └── robot_challenge/ # ROS2功能包
│ ├── msg/ # 自定义消息
│ │ ├── FloatData.msg
│ │ └── TimeData.msg
│ ├── srv/ # 自定义服务
│ │ └── CompareInt.srv
│ ├── scripts/ # Python脚本
│ │ ├── topic_publisher.py # 题目1-① 发布节点
│ │ ├── topic_subscriber.py # 题目1-① 订阅节点
│ │ ├── service_server.py # 题目1-② 服务端
│ │ ├── service_client.py # 题目1-② 客户端
│ │ ├── time_publisher.py # 题目2 时间发布
│ │ ├── time_subscriber.py # 题目2 时间订阅
│ │ ├── squat_motion.py # 题目4-容易 蹲起运动
│ │ └── pitch_motion.py # 题目4-困难 俯仰运动
│ ├── launch/ # Launch文件
│ │ ├── gazebo_room.launch.py
│ │ └── rviz_display.launch.py
│ ├── worlds/ # Gazebo世界文件
│ │ └── closed_room.world
│ ├── urdf/ # 机器人模型
│ │ └── robot_dog.urdf
│ ├── rviz/ # RViz配置
│ │ └── robot_dog.rviz
│ ├── CMakeLists.txt
│ └── package.xml
├── opencv_projects/ # OpenCV项目
│ ├── shape_recognition/ # 题目3 图形识别
│ │ └── shape_recognition.py
│ ├── qr_code_recognition/ # 题目4 QR码识别
│ │ └── qr_code_recognition.py
│ └── sign_recognition/ # 识别算法题
│ └── sign_recognition.py
└── images/ # 赛题图片资源
wsl -d Ubuntu-22.04cd /mnt/f/deskop/新建文件夹\ \(12\)/ros_ws
colcon build --symlink-install
source install/setup.bashpip install opencv-python numpy功能: 发布节点接收键盘输入的浮点型数据并发布,订阅节点接收数据取整后打印。
运行步骤:
# 终端1 - 启动订阅节点
ros2 run robot_challenge topic_subscriber
# 终端2 - 启动发布节点
ros2 run robot_challenge topic_publisher测试: 在发布节点终端输入浮点数,如 3.14,订阅节点将输出 收到原始数据: 3.14, 取整后: 3
功能: 服务端接收两个整数请求,比较大小后返回结果。
运行步骤:
# 终端1 - 启动服务端
ros2 run robot_challenge service_server
# 终端2 - 启动客户端
ros2 run robot_challenge service_client测试: 在客户端输入两个整数,如 5 和 3,将返回 5 > 3 (a较大)
功能: 两台电脑在同一局域网下,计算机A发布系统时间,计算机B接收并打印。
运行步骤:
计算机A(发布端):
export ROS_DOMAIN_ID=0
export ROS_LOCALHOST_ONLY=0
ros2 run robot_challenge time_publisher计算机B(订阅端):
export ROS_DOMAIN_ID=0
export ROS_LOCALHOST_ONLY=0
ros2 run robot_challenge time_subscriber注意: 两台电脑的 ROS_DOMAIN_ID 必须相同。
功能: 在Gazebo中启动机器狗模型,构建封闭房间仿真场景。
运行步骤:
ros2 launch robot_challenge gazebo_room.launch.py注意: 需要图形界面支持,WSL2需要配置X11转发或使用WSLg。
功能: 实现机器狗沿z轴进行上下蹲起运动,四个足尖位置固定不动。
运行步骤:
# 终端1 - 启动RViz
ros2 launch robot_challenge rviz_display.launch.py
# 终端2 - 运行蹲起运动节点
ros2 run robot_challenge squat_motion功能: 实现机器狗身体绕x轴做往复转动(俯仰运动),足尖位置不动。
运行步骤:
# 终端1 - 启动RViz
ros2 launch robot_challenge rviz_display.launch.py
# 终端2 - 运行俯仰运动节点
ros2 run robot_challenge pitch_motion功能: 识别图片中圆柱体和长方体的颜色和数量。
运行步骤:
cd /mnt/f/deskop/新建文件夹\ \(12\)/opencv_projects/shape_recognition
python3 shape_recognition.py注意: 需要将测试图片命名为 shapes.jpg 放在同一目录下。
功能: 识别QR码并打印输出内容。
运行步骤:
cd /mnt/f/deskop/新建文件夹\ \(12\)/opencv_projects/qr_code_recognition
python3 qr_code_recognition.py注意: 需要将QR码图片命名为 qr_code.png 放在同一目录下。
功能: 识别图片中的交通标志(警告、禁止、指示标志)。
运行步骤:
cd /mnt/f/deskop/新建文件夹\ \(12\)/opencv_projects/sign_recognition
python3 sign_recognition.py注意: 需要将标志图片命名为 signs.jpg 放在同一目录下。
| 项目 | 值 |
|---|---|
| WSL用户名 | rosuser |
| WSL密码 | ros123 |
确保在WSL Ubuntu环境中运行,并已source环境:
source /opt/ros/humble/setup.bash
source ~/ros_ws/install/setup.bashWSL2需要图形界面支持,确保已安装WSLg或配置X11转发。
- 确保两台电脑在同一局域网
- 检查防火墙设置
- 确保
ROS_DOMAIN_ID相同 - 设置
ROS_LOCALHOST_ONLY=0
| 题目 | 文件路径 | 分值 |
|---|---|---|
| 题目1-① | ros_ws/src/robot_challenge/scripts/topic_*.py | 10分 |
| 题目1-② | ros_ws/src/robot_challenge/scripts/service_*.py | 10分 |
| 题目2 | ros_ws/src/robot_challenge/scripts/time_*.py | 15分 |
| 题目3 | ros_ws/src/robot_challenge/launch/gazebo_room.launch.py | 15分 |
| 题目4-容易 | ros_ws/src/robot_challenge/scripts/squat_motion.py | 10分 |
| 题目4-困难 | ros_ws/src/robot_challenge/scripts/pitch_motion.py | 10分 |
| OpenCV题3 | opencv_projects/shape_recognition/ | 20分 |
| OpenCV题4 | opencv_projects/qr_code_recognition/ | 5分 |
| 识别算法题 | opencv_projects/sign_recognition/ | 15分 |
总分: 100分