From 88b993d1a79d69d32de65e5b986418cedd2ff7d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=B1=BC=E9=A6=99ROS?= <87068644+fishros@users.noreply.github.com> Date: Mon, 22 Jul 2024 12:19:26 +0800 Subject: [PATCH] feat: add readme --- README.md | 13 +++++++++++++ image/book.jpg | Bin 0 -> 21352 bytes 2 files changed, 13 insertions(+) create mode 100644 README.md create mode 100644 image/book.jpg diff --git a/README.md b/README.md new file mode 100644 index 0000000..6b4704d --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# ROS 2机器人开发:从入门到实践 书籍配套代码 + +![](./image/book.jpg) + +机器人开发是一项复杂的系统工程,ROS 2为智能机器人开发提供了强有力的支持,极大地提高了机器人软件开发效率。本书首先对ROS 2的基础概念、通信机制、常用库和工具进行介绍,带领读者入门ROS 2机器人开发;接着引导读者完成移动机器人的建模和仿真、建图和导航、自定义控制器和规划器等一系列实践;然后在真机实战环节,通过制作一个基于ROS 2的真实机器人,帮助读者打通仿真与真机之间的壁垒;最后,本书深入讲解了ROS 2进阶使用的相关知识,为读者进一步在实战中使用ROS 2进行机器人开发打下夯实基础。考虑读者基础,书中示例均以C++和Python两种语言实现,同时加入了关于C++新特性、Git工具、多线程和回调函数等基础知识的讲解。 + +## 配套代码介绍 + +本项目为ROS 2机器人开发:从入门到实践 书籍配套代码,包含ROS 2机器人开发相关的示例代码。 + +## 作者 + +- [小鱼](https://github.com/fishros) \ No newline at end of file diff --git a/image/book.jpg b/image/book.jpg new file mode 100644 index 0000000000000000000000000000000000000000..76f3d3951dd5b147302b1d3e0346be36ce86ed8c GIT binary patch literal 21352 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 Y6isFq=K|CLA@_Fr7w|pK3*9398{EzXp8x;= literal 0 HcmV?d00001