Skip to content

OneOneLiu/s_s_ros

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

S_S_ROS

English 中文

使用这个仓库整理一下之前记的笔记, 也可以用来给之后的同学做参考

1. 下载本仓库

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src

# 如果不是clone到上面的文件夹, 则需要在Docker的启动文件中修改volume挂载的路径
git clone https://github.com/OneOneLiu/s_s_ros.git

2. 一些说明

  • 本仓库面向是一个面向初学者实操导向ROS使用笔记. 针对的任务机器人抓取操纵等任务, 涉及到的硬件主要是机械臂, 相机, 以及电动夹爪, 不涉及移动机器人, 无人机等技术.
  • 读的同学需要对ROS有一些基本的了解, 知道常用的概念, 如ROS的软件包(package), 节点(node), 和常用命令, 如catkin_make.
  • 本仓库基于ROS1 noetic版本.

2.1. 好的 ROS 编程习惯

要完成一个机器人操作任务, 我们需要使用ROS来控制多个硬件, 包括机械臂, 夹爪, 相机, 力/力矩传感器等. 那么在开发的时候就需要在 /catkin_ws/src 目录下创建软件包来实现这些功能, 也就是package.

一个比较好的习惯是尽量把不同的功能做好隔离, 也就是模块化. 比如, 相机的功能就创建一个相机的package, 机器人就创建机器人的package. 最后整体控制所有的主程序, 再创建一个整体功能的package.

这种模块化的思想可以帮助我们提高代码的可读性和可维护性,促进代码和功能的重复使用.

与此同时, 在每个package下面, 我们也应当做好文件夹的整理和分区, 比如把所有的launch file都放到launch目录下, 源文件都放到 scripts 目录下, 同时给每个文件夹或者功能都添加说明文档 README.md.

2.2. 使用Docker

建议使用Docker进行所有ROS项目的测试和开发, 这会极大地减少环境配置所带来的问题, 提高工作效率. 借用一下形容 python 的话:

Life is short, you need Docker!

本仓库提供了傻瓜式的docker启动命令, 就放在./docker目录下, 去读一下里面的README.md就知道怎么用了.

2.3. 文件夹说明

依据前一节说的编程习惯, 本仓库是包含多个ROS packages的, 而不是把整个仓库用作一个单一的ROS package, (我以前是这么搞的, 你们不要这么做, 这是个很坏的习惯).

我为每个单独的功能包都创建了单独的 git repository.

在实际测试的时候, 我们使用Docker, 我会把这些packagesrepositoryclonesrc目录下, 这样在启动container容器环境时他们就会存在的/catkin_ws/src/目录.

所以本仓库的文件夹结构大致会是下面的样子:

s_s_ros/
├── docker
│   ├── build.bash
│   ├── Dockerfile
│   ├── run_container.bash
    ├── entrypoint.sh
│   └── README.md
├── docs
│   └── Hardware
│       ├── 1.Realsense_camera.md
│       ├── 2.UR_robot.md
│       └── 3.Robotiq_gripper.md
├── README_en.md
├── README.md
└── src
    ├── pkg_grasp_main
    ├── pkg_virtual_cameara
    └── pkg_urdf

其中:

  • docker 目录下放的是Docker环境编译,启动的文件以及相关说明
  • docs目录下放的是各种说明文档
  • src目录下是空的或者只有少量几个以pkg_开头的就是尚在开发的功能package, 完成后我会给他们单独创建一个仓库并把他们移除

Docker container启动之后, 在虚拟环境中看到的目录大致会是这样:

catkin_ws/
└── src
  ├── Universal_Robots_ROS_Driver
  ├── pkg_grasp_main
  ├── pkg_urdf
  ├── pkg_virtual_camera
  ├── realsense2_description
  ├── realsense_camera
  ├── realsense_gazebo_plugin
  ├── roboticsgroup_gazebo_plugins
  ├── robotiq
  ├── robotiq_description
  ├── robotiq_gripper
  ├── universal_robot
  ├── ur5_gripper_moveit
  ├── ur5_robot
  └── ur5_robot_gripper

会比之前多了一些仓库, 因为其中包含了我们在构建 docker imageclone进来的仓库.

📝 这里包含的不仅是我的自定义仓库, 还有一些比如机器人, 夹爪相机的官方库. 你可以在 dockerfile 中的备注中找到哪些是我的自定义仓库. 如下:

# Clone my custimized repositories
RUN cd /catkin_ws/src && \
    git clone https://github.com/OneOneLiu/realsense_camera.git && \
    git clone https://github.com/OneOneLiu/robotiq_gripper.git && \
    git clone https://github.com/OneOneLiu/ur5_robot.git && \
    git clone https://github.com/OneOneLiu/ur5_gripper_moveit.git && \
    git clone https://github.com/OneOneLiu/ur5_robot_gripper.git

在启动container时, 会通过entrypoint.sh文件来自动同步这些自定义仓库.

2.4. 使用说明

本仓库是模块化的入门教程, 每个在 dockerfileclone 进来的自定义仓库都是一个单独的功能包(package), 比如使用相机, 使用夹爪等. 每个package里都有单独的源代码以及测试文件, 可以单独参考使用.

3. 常用硬件的使用

以上几个都是非常常用的硬件, 他们的官方也都提供对应的ROS功能包, 比如:

一般要使用这些硬件, 直接下载使用他们官方的软件包就可以了, 无需自己再创建一个package. 如果需要自定义功能, 一般也是在他们的packages里面添加, 或者在自己项目的main package里添加, 无需再创建一个新的package. 我这里仍旧创建相机, 机器人以及夹爪的三个packages是为了展示这一过程.

📝 Note

下载使用官方或者第三方提供的ROS package有多种方式, 具体可以参考这个说明.

4. ToDos

  • pkg_camera related
    • add notes for python executables in launch file
    • add notes for launch file (official) parameter setup
    • add notes for point cloud visualization
  • Docker
    • installation notes
  • Robots
    • add notes for ros_control
    • add notes for urdf and xacro
    • generate urdf for multiple robots
    • add notes for control multiple robots using ROS namespace feature
  • Trouble shooting
    • add trouble shooting for GUI in docker and ssh
    • add trouble shooting for roscore issue when using from ssh
    • add trouble shooting for qt lib when using from ssh
  • ROS basics
    • add notes for tf

About

S_S stands for step by step

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published