Git Product home page Git Product logo

d2l-ros2's Introduction

动手学ROS2-Humble

亲爱的鱼粉(请允许小鱼这么称呼),你好!我是《鱼香ROS》作者小鱼,很高兴你能看到这本在线教程,那么从现在开始希望你可以和小鱼一起动手学习ROS2、学习机器人。

小鱼很荣幸的告诉你,现在你所看到的教程已经是《动手学ROS2》的第二版了,第二版相较于第一版主要有以下改进:

  • 采用ROS2五年长期支持版Humble版本进行讲解(第一版为Foxy版本,2023年停止维护)
  • 增加Moveit2机械臂运动规划内容
  • 增加Nav2进阶内容内容
  • 增加DDS和ROS2通信机制进阶内容
  • 优化文章结构和知识体系
  • 增加ROS2-Control部分内容
  • 增加MicroROS嵌入式内容
  • 增加ROS2开源小车制作内容
  • 完善机器人运动学相关内容
  • 增加图像(标定,识别)相关内容

1.为什么要学习ROS2?

后疫情时代,国内机器人行业也随之兴起,ROS机器人操作系统(Robot Operating System)作为快速搭建机器人的一大利器,在机器人行业的开发中被广泛使用。

ROS2作为第二代机器人操作系统,继承了ROS强大的生态,采用了全新的架构设计,使得ROS2满足现代机器人系统的实时性、安全性、标准性、可靠性等要求。

在未来,机器人将走进我们的生活之中,掌握机器人技术将成为每一个技术人员的必修课,而本教程旨在以ROS2为工具,从基础开始讲起,带你入门机器人,玩转机器人。

本教程采用在线教程文档形式,随着ROS2的更新而不断更新,大家可以关注小鱼个人公众号《鱼香ROS》,加入技术交流群第一时间获取更新通知

2.学了本课程能够做什么?

ROS2强大之处在于其生态系统,基于ROS2的软件库和工具集,针对不同种类的机器人和应用场景,衍生出了一系列机器人框架,比如:

3.本教程适合学习对象有哪些?

为了让不同阶段的读者从本教程受益,小鱼会从基础、入门、进阶三部分进行讲解,本教程主要适合人群有:

  • 机器人相关的大学生和的研究生等
  • 有一定编程基础想要转行从事机器人的小伙伴
  • 已有ROS基础想要学习ROS2的在职工程师
  • 机器人爱好者或其他想学习了解机器人的小伙伴

3.1 没有机器人基础可以学习吗?

没有任何问题,即使你不是机器人相关专业也没事,小鱼会在教程中给大家讲解。

3.2 没有编程基础可以学习吗?

本教程使用Python和C++编程语言实现,大家只需要掌握其中之一即可。

所以对于没有任何编程基础的小伙伴,可以简单的学习一下Python语言,两三天就可以无证上岗了。

4.课程规划

教程分为基础篇、机器人学篇、建模仿真篇、Nav2导航篇、ROS2控制篇、实体机器人篇、Moveit2机械臂篇。

4.1 基础篇

基础篇主要对ROS2的软件库和工具集进行介绍,通过基础篇的学习,你可以掌握ROS2常用工具使用,并可以通过C++或Python调用ROS2的API进行通信。

  • 第 1 章 ROS2介绍与安装
  • 第 2 章 ROS2概念通识
  • 第 3 章 ROS2通信机制入门(话题与服务)
  • 第 4 章 ROS2通信机制进阶(参数与Action)
  • 第 5 章 ROS2常用工具

4.2 机器人学篇

通过对基础的机器人学进行学习,丰富你的机器人理论知识,使得接下来的学习畅通无阻。

  • 第 6 章 运动学基础
  • 第 7 章 ROS2运动学

4.3 建模仿真篇

通过对机器人的结构进行建模,实现在ROS2的GUI工具中展示机器人模型,并进行仿真,让你的机器人动起来。

  • 第 8 章 机器人建模
  • 第 9 章 机器人仿真

4.4 Nav2导航篇

通过对Nav2框架结合仿真机器人进行实战,带你了解机器人建图导航技术,同时增加了进阶篇内容,小鱼带你一起将自己的算法在Nav2上进行实现。

  • 第 10 章 SLAM建图
  • 第 11 章 Nav2导航仿真实战
  • 第 12 章 Nav2进阶实践

4.5 ROS2控制篇

先介绍ROS2-Control,接着小鱼带你在硬件上实现ROS2控制。

  • 第 13 章 ROS2-Control
  • 第 14 章 MicroROS
  • 第 15 章 ROS2控制硬件实战

4.6 实体机器人

手把手小鱼带你做一个可以建图导航到处跑的真的机器人出来。

  • 第 16 章 实体机器人硬件搭建
  • 第 17 章 嵌入式控制及通信开发
  • 第 18 章 上位机建图及导航

4.7 Moveit2机械臂篇

手把手小鱼带你做一个可以建图导航到处跑的机器人出来。

  • 第 19 章 Moveit2仿真
  • 第 20 章 Moveit2进阶
  • 第 21 章 Moveit2真机控制

5.学习资源

5.1 公众号:鱼香ROS

几乎每日更新的学习教程和资源,后台回复学习资料可获得大礼包

5.2 技术交流群

  • 微信交流群:鱼香ROS公众号下方
  • QQ交流群:139707339,进群指令(d2lros2+fishros)

5.3 鱼香ROS官网

记住网址:fish(鱼)+ros+.com=fishros.com

网罗各种机器人工具和资源

image-20211124011241951

6.关于小鱼

小鱼目前主要在做移动机器人导航相关的工作,坐标深圳,有时间的小伙伴周末一起来喝个茶。

因为小鱼个人能力有限,教程之中难免有错误之处,如果你有发现请联系小鱼或直接提出PR,小鱼将第一时间修正。

最后欢迎关注小鱼的微信公众号《鱼香ROS》,和小鱼一起学习ROS2。公众号下方有小鱼的个人微信和机器人技术交流群,有问题可以联系。

参考资料


技术交流&&问题求助:

  • 微信公众号及交流群:鱼香ROS

  • 小鱼微信:AiIotRobot

  • QQ交流群:139707339

  • 版权保护:已加入“维权骑士”(rightknights.com)的版权保护计划

d2l-ros2's People

Contributors

alyssa1024 avatar babylonehy avatar celaraze avatar duanluan avatar fishros avatar joyboycz avatar kexianshen avatar lvxinliang avatar mingdonghu avatar mzebra avatar shampoodeng avatar sssdhjh avatar zhangzhiwei-zzw avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

d2l-ros2's Issues

ros2-foxy anaconda环境问题

您好,最近在ros和深度学习相关的工作,在anaconda中新建虚拟环境,安装pytorch等,在编译后运行节点,提示找不到torch,请问这种情况应该如何解决?

Cmake error

请问一下各位,这个问题如何解决
colcon build --packages-select village_interfaces
Starting >>> village_interfaces
--- stderr: village_interfaces
CMake Error at /opt/ros/foxy/share/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake:240 (list):
list index: 1 out of range (-1, 0)
Call Stack (most recent call first):
CMakeLists.txt:28 (rosidl_generate_interfaces)

CMake Error at /opt/ros/foxy/share/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake:240 (list):
list index: 1 out of range (-1, 0)
Call Stack (most recent call first):
CMakeLists.txt:28 (rosidl_generate_interfaces)

CMake Error at /opt/ros/foxy/share/rosidl_generator_c/cmake/rosidl_generator_c_generate_interfaces.cmake:67 (message):
Target dependency
'/town_ws/build/village_interfaces/rosidl_adapter/village_interfaces/msg/Novel.idl'
does not exist
Call Stack (most recent call first):
/opt/ros/foxy/share/ament_cmake_core/cmake/core/ament_execute_extensions.cmake:48 (include)
/opt/ros/foxy/share/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake:286 (ament_execute_extensions)
CMakeLists.txt:28 (rosidl_generate_interfaces)


Failed <<< village_interfaces [0.83s, exited with code 1]

Summary: 0 packages finished [1.06s]
1 package failed: village_interfaces
1 package had stderr output: village_interfaces

6.服务之RCLPY实现 (案例代码有误)

ipc-robot@ipcrobot-Precision-Tower-3420:~/ros2_ws$ ros2 run example_service_rclpy service_client_02
[INFO] [1722589543.093786297] [service_client_02]: 节点已启动:service_client_02!
Traceback (most recent call last):
  File "/home/ipc-robot/ros2_ws/install/example_service_rclpy/lib/example_service_rclpy/service_client_02", line 33, in <module>
    sys.exit(load_entry_point('example-service-rclpy==0.0.0', 'console_scripts', 'service_client_02')())
  File "/home/ipc-robot/ros2_ws/install/example_service_rclpy/lib/python3.10/site-packages/example_service_rclpy/service_client_02.py", line 14, in main
    node.send_request(3,4)
AttributeError: 'ServiceClient02' object has no attribute 'send_request'
[ros2run]: Process exited with failure 1

以下是client_02的代码:

#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
from example_interfaces.srv import AddTwoInts

class ServiceClient02(Node):
    def __init__(self,name):
        super().__init__(name)
        self.get_logger().info("节点已启动:%s!" % name)

def main(args=None):
    rclpy.init(args=args) # 初始化rclpy
    node = ServiceClient02("service_client_02")  # 新建一个节点
    node.send_request(3,4)
    rclpy.spin(node) # 保持节点运行,检测是否收到退出指令(Ctrl+C)
    rclpy.shutdown() # 关闭rclpy

安装不存在humble版本

ROS一键安装(不是ROS+docker的版本)中没有humble的版本,直接下载docker版本的humble也是一样的吗?

image

add_custom_target called with invalid target name "msg/RobotPose.msg".

自定义接口类型报错:colcon 编译之后报错:
CMake Error at /opt/ros/humble/share/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake:213 (add_custom_target):
add_custom_target called with invalid target name "msg/RobotPose.msg".
Target names may not contain a slash. Use ADD_CUSTOM_COMMAND to generate
files.
Call Stack (most recent call first):
CMakeLists.txt:12 (rosidl_generate_interfaces)

文章 8.4 中 “3.3 完成后代码” 存在问题

文章中 _therad_pub 部分代码好像没有更新消息的 header ,位置计算也有问题
我改为这样可以运行:

    def _thread_pub(self):
        last_update_time = time.time()
        while rclpy.ok():
            delta_time = time.time()-last_update_time
            # 更新位置
            self.joint_states.position[0] += delta_time*self.joint_speeds[0]
            self.joint_states.position[1] += delta_time*self.joint_speeds[1]
            # 更新速度
            self.joint_states.velocity = self.joint_speeds
            # 更新 header
            self.joint_states.header.stamp = self.get_clock().now().to_msg()
            self.joint_states.header.frame_id = ""
            # 发布关节数据
            self.joint_states_publisher_.publish(self.joint_states)
            last_update_time = time.time()
            self.pub_rate.sleep()

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.