{"id":34692428,"url":"https://github.com/oneoneliu/s_s_ros","last_synced_at":"2026-03-16T04:38:10.752Z","repository":{"id":237582541,"uuid":"794816919","full_name":"OneOneLiu/s_s_ros","owner":"OneOneLiu","description":"S_S stands for step by step","archived":false,"fork":false,"pushed_at":"2024-05-31T16:43:39.000Z","size":3689,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-06-01T17:50:30.167Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"CMake","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OneOneLiu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-02T02:32:29.000Z","updated_at":"2024-05-31T16:43:42.000Z","dependencies_parsed_at":null,"dependency_job_id":"4ca8d1ad-ac7b-4391-80ee-8182f70d9727","html_url":"https://github.com/OneOneLiu/s_s_ros","commit_stats":null,"previous_names":["oneoneliu/s_s_ros"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/OneOneLiu/s_s_ros","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OneOneLiu%2Fs_s_ros","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OneOneLiu%2Fs_s_ros/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OneOneLiu%2Fs_s_ros/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OneOneLiu%2Fs_s_ros/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OneOneLiu","download_url":"https://codeload.github.com/OneOneLiu/s_s_ros/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OneOneLiu%2Fs_s_ros/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28010312,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-24T02:00:07.193Z","response_time":83,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-12-24T22:00:32.011Z","updated_at":"2025-12-24T22:01:02.092Z","avatar_url":"https://github.com/OneOneLiu.png","language":"CMake","funding_links":[],"categories":[],"sub_categories":[],"readme":"# S_S_ROS\n\n[![English](https://img.shields.io/badge/README-English-blue)](README_en.md)\n[![中文](https://img.shields.io/badge/README-中文-orange)](README.md)\n\n使用这个仓库整理一下之前记的笔记, 也可以用来给之后的同学做参考\n\n## 1. 下载本仓库\n```bash{.line-numbers}\nmkdir -p ~/catkin_ws/src\ncd ~/catkin_ws/src\n\n# 如果不是clone到上面的文件夹, 则需要在Docker的启动文件中修改volume挂载的路径\ngit clone https://github.com/OneOneLiu/s_s_ros.git\n```\n\n## 2. 一些说明\n\n- 本仓库面向是一个面向**初学者**的**实操导向**`ROS`使用笔记. 针对的任务机器人抓取操纵等任务, 涉及到的硬件主要是机械臂, 相机, 以及电动夹爪, 不涉及移动机器人, 无人机等技术.\n- 读的同学需要对`ROS`有一些基本的了解, 知道常用的概念, 如`ROS`的软件包([`package`](https://wiki.ros.org/Packages)), 节点([`node`](https://wiki.ros.org/ROS/Tutorials/UnderstandingNodes)), 和常用命令, 如`catkin_make`.\n- 本仓库基于`ROS1 noetic`版本.\n\n### 2.1. 好的 ROS 编程习惯\n要完成一个机器人操作任务, 我们需要使用`ROS`来控制多个硬件, 包括机械臂, 夹爪, 相机, 力/力矩传感器等. 那么在开发的时候就需要在 `/catkin_ws/src` 目录下创建软件包来实现这些功能, 也就是`package`. \n\n一个比较好的习惯是尽量把不同的功能做好隔离, 也就是[**模块化**](https://answers.ros.org/question/364674/how-to-properly-structure-a-ros-package/). 比如, 相机的功能就创建一个相机的`package`, 机器人就创建机器人的`package`. 最后整体控制所有的主程序, 再创建一个整体功能的`package`.\n\n这种模块化的思想可以帮助我们提高代码的可读性和可维护性，促进代码和功能的重复使用.\n\n与此同时, 在每个`package`下面, 我们也应当做好文件夹的整理和分区, 比如把所有的`launch` file都放到`launch`目录下, 源文件都放到 `scripts` 目录下, 同时给每个文件夹或者功能都添加说明文档 `README.md`. \n\n### 2.2. 使用Docker\n建议使用`Docker`进行所有`ROS`项目的测试和开发, 这会极大地减少环境配置所带来的问题, 提高工作效率. 借用一下形容 `python` 的话:\n\u003e `Life is short, you need Docker`!\n\n本仓库提供了傻瓜式的docker启动命令, 就放在[`./docker`](docker)目录下, 去读一下里面的[`README.md`](docker/README.md)就知道怎么用了.\n\n\u003e - 这是一个很不错的视频教程: https://www.youtube.com/watch?v=qWuudNxFGOQ\n\n### 2.3. 文件夹说明\n\n依据前一节说的编程习惯, 本仓库是包含多个`ROS packages`的, 而不是把整个仓库用作一个单一的`ROS package`, (我以前是这么搞的, 你们不要这么做, 这是个很坏的习惯). \n\n我为每个单独的功能包都创建了单独的 `git repository`.\n\n在实际测试的时候, 我们使用`Docker`, 我会把这些`packages`的 `repository` 都 `clone` 到 `src`目录下, 这样在启动`container`容器环境时他们就会存在的`/catkin_ws/src/`目录.\n\n所以本仓库的文件夹结构大致会是下面的样子:\n```bash{.line-numbers}\ns_s_ros/\n├── docker\n│   ├── build.bash\n│   ├── Dockerfile\n│   ├── run_container.bash\n    ├── entrypoint.sh\n│   └── README.md\n├── docs\n│   └── Hardware\n│       ├── 1.Realsense_camera.md\n│       ├── 2.UR_robot.md\n│       └── 3.Robotiq_gripper.md\n├── README_en.md\n├── README.md\n└── src\n    ├── pkg_grasp_main\n    ├── pkg_virtual_cameara\n    └── pkg_urdf\n```\n其中:\n- `docker` 目录下放的是`Docker`环境编译,启动的文件以及相关说明\n- `docs`目录下放的是各种说明文档\n- `src`目录下是空的或者只有少量几个以`pkg_`开头的就是尚在开发的功能`package`, 完成后我会给他们单独创建一个仓库并把他们移除 \n\n当`Docker container`启动之后, 在虚拟环境中看到的目录大致会是这样:\n```bash{.line-numbers}\ncatkin_ws/\n└── src\n  ├── Universal_Robots_ROS_Driver\n  ├── pkg_grasp_main\n  ├── pkg_urdf\n  ├── pkg_virtual_camera\n  ├── realsense2_description\n  ├── realsense_camera\n  ├── realsense_gazebo_plugin\n  ├── roboticsgroup_gazebo_plugins\n  ├── robotiq\n  ├── robotiq_description\n  ├── robotiq_gripper\n  ├── universal_robot\n  ├── ur5_gripper_moveit\n  ├── ur5_robot\n  └── ur5_robot_gripper\n```\n会比之前多了一些仓库, 因为其中包含了我们在构建 `docker image` 时`clone`进来的仓库.\n\n\u003e :memo: \n\u003e 这里包含的不仅是我的自定义仓库, 还有一些比如机器人, 夹爪相机的官方库. 你可以在 `dockerfile` 中的备注中找到哪些是我的自定义仓库. 如下:\n```bash{.line-numbers}\n# Clone my custimized repositories\nRUN cd /catkin_ws/src \u0026\u0026 \\\n    git clone https://github.com/OneOneLiu/realsense_camera.git \u0026\u0026 \\\n    git clone https://github.com/OneOneLiu/robotiq_gripper.git \u0026\u0026 \\\n    git clone https://github.com/OneOneLiu/ur5_robot.git \u0026\u0026 \\\n    git clone https://github.com/OneOneLiu/ur5_gripper_moveit.git \u0026\u0026 \\\n    git clone https://github.com/OneOneLiu/ur5_robot_gripper.git\n```\n\u003e 在启动`container`时, 会通过[`entrypoint.sh`](docker/entrypoint.sh)文件来自动同步这些自定义仓库.\n\n### 2.4. 使用说明\n本仓库是模块化的入门教程, 每个在 `dockerfile` 中 `clone` 进来的自定义仓库都是一个单独的功能包(`package`), 比如使用相机, 使用夹爪等. 每个`package`里都有单独的源代码以及测试文件, 可以单独参考使用.\n\n## 3. 常用硬件的使用\n\n- `Intel Realsense` 相机的使用, 请参照 [docs/Hardware/1.Realsense_camera.md](docs/Hardware/1.Realsense_camera.md).\n\n- `UR` 机器人的使用, 请参照 [docs/Hardware/2.UR_robot.md](docs/Hardware/2.UR_robot.md).\n\n- `Robotiq` 夹爪的使用, 请参照 [docs/Hardware/3.Robotiq_gripper.md](docs/Hardware/3.Robotiq_gripper.md).\n\n\u003e 以上几个都是非常常用的硬件, 他们的官方也都提供对应的ROS功能包, 比如:\n\u003e - [Intel RealSense相机的ROS软件包](https://github.com/IntelRealSense/realsense-ros)\n\u003e - [UR 机器人的ROS驱动软件包](https://github.com/UniversalRobots/Universal_Robots_ROS_Driver)\n\n一般要使用这些硬件, 直接下载使用他们官方的软件包就可以了, 无需自己再创建一个`package`. 如果需要自定义功能, 一般也是在他们的`packages`里面添加, 或者在自己项目的`main package`里添加, 无需再创建一个新的`package`. 我这里仍旧创建相机, 机器人以及夹爪的三个`packages`是为了展示这一过程.\n\n\u003e :memo: **Note**\n\u003e\n\u003e 下载使用官方或者第三方提供的ROS package有多种方式, 具体可以参考[这个说明](docs/ROS_basics/install_ros_packages.md).\n\n## 4. ToDos\n- [ ] pkg_camera related\n  - [ ] add notes for python executables in launch file\n  - [ ] add notes for launch file (official) parameter setup\n  - [ ] add notes for point cloud visualization\n- [ ] Docker\n  - [ ] installation notes\n- [ ] Robots\n  - [ ] add notes for `ros_control`\n  - [ ] add notes for urdf and xacro\n  - [ ] generate urdf for multiple robots\n  - [ ] add notes for control multiple robots using `ROS namespace` feature\n- [ ] Trouble shooting\n  - [x] add trouble shooting for GUI in docker and ssh\n  - [ ] add trouble shooting for roscore issue when using from ssh\n  - [ ] add trouble shooting for qt lib when using from ssh\n- [ ] ROS basics\n  - [ ] add notes for tf","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foneoneliu%2Fs_s_ros","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foneoneliu%2Fs_s_ros","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foneoneliu%2Fs_s_ros/lists"}