# ROS2 **Repository Path**: wanghaozheng/ros2 ## Basic Information - **Project Name**: ROS2 - **Description**: ROS2作业 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2022-11-29 - **Last Updated**: 2025-07-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 〇、杂项 ## 1、安装ROS2(humble) ``` echo "deb [arch=$(dpkg --print-architecture)] https://repo.huaweicloud.com/ros2/ubuntu/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null sudo apt install curl gnupg2 -y curl -s https://gitee.com/ohhuo/rosdistro/raw/master/ros.asc | sudo apt-key add - sudo apt update sudo apt install ros-humble-desktop -y sudo apt install python3-argcomplete -y echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc ``` 安装路径为`/opt/ros/humble/` ![](image/〇.1.png) ## 2、创建工作空间 ``` mkdir ~/wanghaozheng/src -p ``` ## 3、编译工作空间功能包 ``` cd ~/wanghaozheng colcon build ``` ## 4、添加 source ``` source ~/wanghaozheng/install/setup.bash ``` ## 5、修改ament_cmake中的CMakeLists.txt文件 在文件中添加上: ~~~ install(TARGETS <节点名字> DESTINATION lib/${PROJECT_NAME} ) install(DIRECTORY launch DESTINATION share/${PROJECT_NAME}) ~~~ ## 6、修改ament_python中的setup.py文件 在setup.py文件最后的列表: ~~~ entry_points={ 'console_scripts': [ ], }, ~~~ 中添加上: ~~~ "<节点名>=<功能包名>.<运行文件名>:main" ~~~ 修改成: ~~~ entry_points={ 'console_scripts': [ "qr=QR_Code.qr:main", "display=QR_Code.qrr:main", "create=QR_Code.create:main" ], }, ~~~ # 一、正确读取摄像头数据 ## 1、安装依赖 二进制安装 image_pipeline 系列功能包 ``` sudo apt-get install ros-humble-image-pipeline ``` ## 2、启动节点 调用本地摄像头(或者通过URDF模型的gazebo_camera插件模拟摄像头),发布/camera/image_raw和/camera/camera_info话题 ``` ros2 launch image_publisher image_publisher_mono.launch.py ``` ## 3、验证 可以通过rqt的image view插件订阅/camera/image_raw话题查看预览图像 ``` ros2 run rqt_image_view rqt_image_view ``` ## 4、结果: 摄像头节点启动显示: ![](image/ros%E8%8E%B7%E5%8F%96%E6%91%84%E5%83%8F%E5%A4%B4%E6%95%B0%E6%8D%AE%E5%90%AF%E5%8A%A8%E6%98%BE%E7%A4%BA.png) 摄像头获取画面结果: ![](image/ros%E8%8E%B7%E5%8F%96%E6%91%84%E5%83%8F%E5%A4%B4%E6%95%B0%E6%8D%AE%E6%95%88%E6%9E%9C%E6%98%BE%E7%A4%BA.png) # 四、通过URDF创建机器人 ## 1、要求:Gazebo ros2-humble ### 安装 Gazebo ``` sudo apt-get update sudo apt-get install lsb-release wget gnupg sudo wget https://packages.osrfoundation.org/gazebo.gpg -O /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/gazebo-stable.list > /dev/null sudo apt-get update sudo apt-get install gz-garden ``` ## 2、功能包:robot_urdf ## 3、运行: ``` ros2 launch robot_urdf gazebo.launch.py ``` ## 4、结果: ![](image/%E6%9C%BA%E5%99%A8%E4%BA%BAurdf%E6%A8%A1%E5%9E%8B.jpg) # 二、正确读取Imu传感器实时反馈小车的状态 ## 1、要求:Gazebo ros2-humble ### 安装 Gazebo ``` sudo apt-get update sudo apt-get install lsb-release wget gnupg sudo wget https://packages.osrfoundation.org/gazebo.gpg -O /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/gazebo-stable.list > /dev/null sudo apt-get update sudo apt-get install gz-garden ``` ## 2、功能包:robot_urdf ## 3、运行: ``` ros2 launch robot_urdf gazebo.launch.py ros2 topic echo imu ``` ## 4、结果: ![](image/imu%E5%8F%8D%E9%A6%88%E6%9C%BA%E5%99%A8%E4%BA%BA%E7%8A%B6%E6%80%81.jpg) # 三、读取激光雷达数据 ## 1、要求:Gazebo ros2-humble ### 安装 Gazebo ``` sudo apt-get update sudo apt-get install lsb-release wget gnupg sudo wget https://packages.osrfoundation.org/gazebo.gpg -O /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/gazebo-stable.list > /dev/null sudo apt-get update sudo apt-get install gz-garden ``` ## 2、功能包:robot_urdf ## 3、运行: ``` ros2 launch robot_urdf gazebo.launch.py ros2 topic echo scan ``` ## 4、结果: ![](image/三.1.png) # 十五、完成摄像头二维码识别 ## 1、前言:   QR码是二维条码的一种,QR 来自英文 “Quick Response” 的缩写,即快速反应的意思,源自发明者希望 QR 码可让其内容快速被解码。QR码不仅信息容量大、可靠性高、成本低,还可表示汉字及图像等多种文字信息、其保密防伪性强而且使用非常方便。并且其技术是开源的。下图为QR码的结构。 ![](image/%E4%BA%8C%E7%BB%B4%E7%A0%81%E5%8C%BA%E5%9D%97%E6%98%8E%E7%A4%BA.png) ## 2、要求:ros2-humble usb摄像头 安装: ~~~ pip install qrcode pip install pyzbar pip install opencv-python ~~~ ## 2、功能包:QR_Code image_publisher ## 3、运行: 打开摄像头并发布数据: ~~~ ros2 launch image_publisher image_publisher_mono.launch.py ~~~ 启动功能并订阅数据,开始识别: ~~~ ros2 launch QR_Code launch.py ~~~ ![](image/%E4%BA%8C%E7%BB%B4%E7%A0%81%E8%AF%86%E5%88%AB%E5%8A%9F%E8%83%BD%E5%90%AF%E5%8A%A8%E6%98%BE%E7%A4%BA.png)   识别程序主要是订阅了一个名为image_raw的话题,接收到的消息是由摄像头节点发布出来的image类型的图片(具体应该是二维数组),成功解析后同过一个名为QR_Code_Content的话题将内容发布出去。以下是创建发布者和订阅者。 ``` self.identify_sub=self.create_subscription(Image,"camera/image_raw",self.command_callback,10) self.identify_pub=self.create_publisher(String,"QR_Code_Content",10) ```   接收到image_raw的Image类型消息后执行名为command_callback的回调函数,调用cv_bridge模块中的CvBridge方法将二维数组转换成颜色矩阵进行解析。 ``` frame = self.br.imgmsg_to_cv2(massage) gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) ```   之后将内容与二维码类型进行发布与输出,供生成二维码使用。 ## 4、效果: ![](image/%E4%BA%8C%E7%BB%B4%E7%A0%81%E8%AF%86%E5%88%AB%E5%86%85%E5%AE%B9%E6%98%BE%E7%A4%BA.png) # 十六、实现SLAM导航 十三、完成避障规划 十八、能完成机器人自动避障 ## 1、要求:Gazebo ros2-humble Cartographer Navigation2 ### 安装 Gazebo ``` sudo apt-get update sudo apt-get install lsb-release wget gnupg sudo wget https://packages.osrfoundation.org/gazebo.gpg -O /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/gazebo-stable.list > /dev/null sudo apt-get update sudo apt-get install gz-garden ``` ### 安装 Cartographer ``` sudo apt install ros-humble-cartographer Copy to clipboardErrorCopied sudo apt install ros-humble-cartographer-ros ``` ### 安装 Navigation2 ``` sudo apt install ros-humble-nav2-* ``` ## 2、功能包:robot_urdf robot_cartographer robot_navigation2 ## 3、启动地图: ``` ros2 launch robot_urdf gazebo.launch.py ``` ## 4、建图: 运行键盘控制节点 ``` ros2 run teleop_twist_keyboard teleop_twist_keyboard ``` 运行建图节点 ``` ros2 launch robot_cartographer cartographer.launch.py ``` 通过键盘操纵机器人进行建图 保存建图数据 ``` cd ~/wanghaozheng/src/robot_cartographer/map ros2 run nav2_map_server map_saver_cli -t map -f map ``` 复制地图文件 复制文件夹 `robot_cartographer/maps` 到 `robot_navigation2/maps` ## 5、运行Nav2 ``` ros2 launch fishbot_navigation2 navigation2.launch.py ``` # 五、通过TF功能实现机器人摄像头(雷达等)与机器人(小车)本体的坐标变换 ## 1、要求:ros2-humble ## 2、功能包:robot_urdf ## 3、结果 ![](image/五.1.png) # 七、能通过语音库获取语音指令 十七、能通过语音控制机器人 ## 1、要求:snowboy PaddleSpeech ### 安装 snowboy ``` sudo apt-get install python-pyaudio python3-pyaudio sox pip install pyaudio ``` ``` cd ~ git clone https://github.com/Kitt-AI/snowboy.git cd snowboy/swig/Python3 make ``` 复制 `_snowboydetect.so` 到 `robot_voice/lib` ### Windows 安装 PaddleSpeech (另一台设备) 选择一台有 NVIDA GPU 的设备安装 PaddleSpeech 首先安装 Conda 创建 `python==3.9` 环境 ``` pip install pytest-runner -i https://pypi.tuna.tsinghua.edu.cn/simple pip install paddlepaddle-gpu==2.3.2.post116 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html pip install paddlespeech -i https://pypi.tuna.tsinghua.edu.cn/simple ``` ### Windows 运行 PaddleSpeech (另一台设备) 管理员运行 `PaddleSpeech.bat` http://127.0.0.1:8090 为HTTP API 接口调用 URL ### 制作唤醒词模型 `https://snowboy.hahack.com/` 录制6条语音以上保证准确率 然后导出模型`white.pmdl`并放到`robot_voice/models` ## 2、功能包:robot_voice ## 3、运行: ``` ros2 launch robot_voice launch.py ``` ## 4、结果 ![](image/七.1.png) ![](image/七.2.png) # 八、控制小车移动 ## 1、要求:Gazebo ros2-humble ### 安装 Gazebo ``` sudo apt-get update sudo apt-get install lsb-release wget gnupg sudo wget https://packages.osrfoundation.org/gazebo.gpg -O /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/gazebo-stable.list > /dev/null sudo apt-get update sudo apt-get install gz-garden ``` ## 2、功能包:robot_urdf teleop_twist_joy ## 3、运行: ``` ros2 launch robot_urdf gazebo.launch.py ros2 launch teleop_twist_joy teleop-launch.py joy_config:='xbox' joy_dev:='/dev/input/js1' ``` ## 4、结果: ![](image/%E6%8E%A7%E5%88%B6%E5%B0%8F%E8%BD%A6%E7%A7%BB%E5%8A%A8.jpg) ![](image/%E6%8E%A7%E5%88%B6%E5%B0%8F%E8%BD%A6%E7%A7%BB%E5%8A%A82.jpg) 手柄控制小车移动 # 六、获取操纵杆(遥控)的操作数据 ## 1、要求:ros2-humble 手柄 ## 2、功能包:teleop_twist_joy 官方文档地址: https://index.ros.org/p/teleop_twist_joy/github-ros2-teleop_twist_joy/ ## 3、运行: ``` ros2 launch teleop_twist_joy teleop-launch.py joy_config:='xbox' joy_dev:='/dev/input/js1' ros2 topic echo joy ``` ## 4、结果: ![](image/%E8%8E%B7%E5%8F%96%E6%89%8B%E6%9F%84%E6%95%B0%E6%8D%AE.jpg) # 九、创建机械臂URDF模型 # 十、实现机械臂的关节空间规划 # 十一、实现机械臂的工作空间规划 # 十二、实现机械臂的笛卡尔运动规划 # 十四、机械臂完成自动抓取功能