ROS2安装与入门——古月居视频学习笔记

ros安装和入门(自己的学习笔记)

双系统安装Ubuntu22.04方法:

在Ubuntu官网下载好https://cn.ubuntu.com/download/desktop

准备一个U盘作为启动盘该过程会对U盘格式化

开始->右键->磁盘管理->选择一个磁盘->右键->压缩卷;压缩出40~60G空白分区

下载Rufus

插入U盘开机进入启动项(我的是按F12)选择u盘启动Ubuntu之后进入Ubuntu的安装即可

以下是学习视频内容,来源:【古月居】古月·ROS2入门21讲 | 带你认识一个全新的机器人操作系统_哔哩哔哩_bilibili

0 install

0.1

设置编码

$ sudo apt update && sudo apt install locales

$ sudo locale-gen en_US en_US.UTF-8

$ sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8

$ export LANG=en_US.UTF-8

添加源

$ sudo apt update && sudo apt install curl gnupg lsb-release

$ sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg

$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

安装humble

$ sudo apt update

$ sudo apt upgrade

$ sudo apt install ros-humble-desktop

环境变量

$ source /opt/ros/humble/setup.bash

$ echo "source /opt/ros/humble/setup.bash">>~/.bashrc

安装ros2包

$ sudo apt update

$ sudo apt install ros-humble-ros1-bridge

0.2开发环境配置

安装git

$ sudo apt install git

课程代码包下载:

$ git clone https://gitee.com/guyuehome/ros2_21_tutorial.git

同时官网安装VsCode,ded版,并安装扩展插件

0.3 workspace工作空间

src: Source Space

install: Install Space

build: Build Space

log: Log Space

创建工作空间

$ mkdir -p ~/dev_ws/src

$ cd ~/dev_ws/src

自动安装依赖

$ sudo apt install -y python3-pip

$ sudo pip3 install rosdepc

$ sudo rosdepc init& rosdepc update

(如果不成功使用:$ rosdepc update --include-eol-distros)

$ cd ..

$ rosdepc install -i --from-path src --rosdistro humble -y

编译工作空间

$ sudo apt install python3-colcon-ros

$ cd ~/dev_ws/

$ colcon build

设置环境变量:

$ source install/local_setup.sh

$ echo " source ~/dev_ws/install/local_setup.sh">>~/.bashrc

(创建功能包: ros2 pkg create --build-type <build-type><package_name>

$ cd ~/dev_ws/src

$ ros2 pkg create --build-type ament_cmake learning_pkg_c

$ ros2 pkg create --build-type ament_python learning_pkg_python

编译功能包:

$ colcon build

$ source install/local_setuo.bash)

1.节点:可以比喻成工人独立完成一部分任务

执行具体任务的进程;独立运行的可执行文件;可以使用不用的编程语言;可分布式运行在不同主机;通过节点名称进行管理

先colcon build进行编译,编译成功后才能进行运行

import rclpy #ros2、python接口库
from rclpy.node import Node #ROS2 节点类

#面向过程的编程方法
def main(args=Node):#ROS2节点主入口main函数
    rclpy.init(args=args)#接口初始化
    node=Node(  )#创建ros2节点对象并进行初始化

    ###功能部分

    node.destroy_node()#销毁节点对象
    rclpy.shutdown()#关闭ROS2、python接口

#建议使用面向对象方法
class HelloworldNode(Node):
    def _init_(self,name)#节点父类初始化
   
    ###功能部分
    
def main(args=None):#ROS2节点主入门main函数
    rclpy.init(args=args)#ROS2 python接口初始化
    node = HelloWorldNode(" ")#创建ROS2节点对象并初始化
    rclpy.spin(node)#循环等待ROS2退出
    node.destory_node()#销毁节点对象
    rclpy.shutdown()#关闭接口

#setup配置
    'node_helloworld =learning_node node_helloworld:main()'

编程接口初始化

创建节点并初始化

实现节点功能

销毁节点并关闭接口

$ ros2 run learning_node node_helloworld/node_helloworld_class

$ ros2 run learning_node node_object (识别苹果)

可以更改图片路径去识别自己加载的图片

$ ros2 run learning_node node_object_webcam(识别摄像头中的画面)

2.话题topic:节点之间传递数据的桥梁

DDS的发布/订阅模型;订阅者或发布者可以不唯一,多对多;异步通信机制;.msg文件通信的消息结构

适合单项传输

import rclpy #ros2、python接口库
from rclpy.node import Node #ROS2 节点类
from std_msgs.msg import String
'''
创建一个发布者节点
'''
class PubishNode(Node):
    def _init_(self,name)#节点父类初始化
    self.pub =self.create_pubisher(String,'chatter',10)#创建发布者(消息类型,话题名,队列)
    self.timer=self.create_timer(0.5,self.timer_callback)#创建一个定时器(单位为秒的周期,定时执行的回调函数)
    def###功能部分

def main(args=None):#ROS2节点主入门main函数
    rclpy.init(args=args)#ROS2 python接口初始化
    node = PublisherNode("  ")#创建ROS2节点对象并初始化
    rclpy.spin(node)#循环等待ROS2退出
    node.destory_node()#销毁节点对象
    rclpy.shutdown()#关闭接口

#SubscribeNode相似
#setup配置
    'topic_helloworld_pub =learning_topic.topic_helloworld_pub:main()

编程接口初始化

创建节点并初始化

创建订阅者对象

回调函数处理话题数据

销毁节点并关闭接口

$ros2 run learning_topic topic_webcam_pub/sub(摄像头发布和订阅图像识别)

话题通信:

$sudo apt install ros-humble-usb-cam#针对相机的标准驱动

$ros2 run usb_cam usb_cam_node_exe#相机驱动节点

$ros2 run learning_topic topic_webcam_sub#订阅者节点

不同点:之前是使用opencv的相机驱动改成了ros2中的标准相机驱动

状态查看:

$ ros2 topic list

$ ros2 topic info /image_raw#查看该话题详细信息

$ ros2 topic bw /image_raw#查看该话题带宽

3.服务:节点间的你问我答(请求和反馈)

客户端/服务端(C/S)模型;同步通信机制;服务器端唯一,客户端可以不唯一,一对多;.srv文件定义请求和应答数据结构

适合一问一答双向,同步性要求较高的

服务通信:

$ros2 run learning_service service_adder_server

$ros2 run learning_service service_adder_client 2 3(加法求和器)

###主要函数
##创建服务器
from learning_interface.srv import AddTwoInts

class adderServer(Node):
    def _init_(self, name):
        super()._init_(name)
        self.srv = self.create_service(AddTwoInts,'add_two_ints',self.adder_callback)
    #功能
def main(args=None):#同上
    
##创建客户端
from learning_interface.srv import AddTwoInts

class adderClient(Node):
    def _init_(self, name):
        super()._init_(name)
        self.client = self.create_client(AddTwoInts,'add_two_ints')#创建客户端对象(服务器类型、服务名)
        while not self.client.wait_for_service(timeout_sec=1.0):#循环等待服务器成功启动
            self.get_logger().info(service not available,awiting again...')
        self.request = AddTwoInts.Request()#创建服务请求的数据对象

    def send_request(self):#创建一个发送服务请求的函数
        #...
        #...
        self.future = self.client.call_async(self.request)#异步方式发送服务请求
    def main(args=None):
        rclpy.spin_once(node)
        if node.futuew.done():  #数据是否处理完成
            try:
                response = node.future.result()  #接收服务器的反馈数据
            except Exception as e:
                node.get_logger().info(
                    'Service call failed %r' % (e,))
            else:
                node.get_logger().info(  #接收到的反馈信息打印输出
                    'Result of add_two_ints: for %d +%d = %d' % (node.request.a, node.request.b, response.sum))
            break
    node.destroy_node()
    rclpy.shutdown()

编辑接口初始化

创建节点并初始化

创建服务器端对象

通过回调函数处进行服务

向客户端反馈应答结果

销毁节点并关闭接口

创建接口初始化

创建节点并初始化

创建客户端对象

创建并发送请求数据

等待服务器端应答数据

销毁节点并关闭接口

服务通信:

$ ros2 run usb_cam usb_cam_node_exe #相机驱动节点,发布图像数据

$ ros2 run learning_service service_object_server#视觉识别节点,订阅图像数据,并且集成一个服务器端,随时提供目标的位置

$ ros2 run learning_service service_object_client#客户端节点,机器人目标跟踪的节点

4.通信接口:数据传递的标准结构

5.动作:完整行为的流程管理

客户端/服务器(C/S)模型;服务器端唯一,客户端可以不唯一;同步通信机制;.action文件定义通信接口的数据结构

小海龟仿真旋转动作:

$ ros2 run turtlesim turtlesim_node

$ ros2 run turtlesim turtle_teleop_key

$ ros2 action info /turtle1/rotate_absolute

$ ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: -1.57}"

$ ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: -1.57}" --feedback

动作通信:(机器人完成360度旋转)

$ ros2 run learning_action action_move_server

$ ros2 run learning_action action_move_client

6.参数:机器人系统的全局字典

全局共享字典;由键和值组成;可实现动态监控

小海龟仿真

$ ros2 run turtlesim turtlesim_node

$ ros2 run turtlesim turtle_teleop_key

$ ros2 param list (/get 节点名 某个参数 : 来得到详细信息; /set 节点名 某个参数 数值 : 来更改参数; /dump 节点名 >> 某个文件 : 来转移其中所有参数的具体值 ;/load 节点名 文件名 : 更新为文件中的所有参数)

参数应用:

$ ros2 run usb_cam usb_cam_node_exe

$ ros2 run learning_parameter param_object_detect

$ ros2 param set param_object_detect red_h_upper 180  #(更改参数)

7.分布式通信:多计算平台的任务分配

如使用树莓派安装ros系统连接各个装置如驱动、电动机、传感器等,收集数据,电脑PC端接收数据并发布指令。

树莓派和电脑只需要连接如同一个网络即可实现通信

8.通信模式DDS:机器人的神经网络 Data Distribution Service

是数据为中心的模式,通信间包含很多并行的通路,每个节点可以只关注到需要的东西,而忽略不需要关注的东西。专门为实时系统设计的数据分发/订阅标准

ROS2中DDS的特性:质量服务策略如deadline、history、reliability(beat effoet/reliable)、durability。

在命令行中配置DDS:

ros2 topic pub /chatter std_msgs/msg/Int32 "data: 42" --qos-reliability best_effort#发布数据

ros2 topic echo /chatter --qos-reliability reliable

ros2 topic echo /chatter --qos-reliability best_effort #(qos设置必须一致才能产生通讯连接)

ros2 topic info/chatter --verbose    #(查看该话题的详细信息)

9.Launch:多节点启动与配置脚本

可以通过launch对节点进行重命名,避免不能同时启动同一个模型

可以对参数进行配置

10.TF:机器人坐标系管理

Base Frame、World Frame、Tool Frame

查看两个小海龟坐标系的变动

sudo apt install ros-humble-turtle-tf2-py (ros-humble-tf2-tools)

sudo pip3 install transforms3d

ros2 launch turtle_tf2_py turtle_tf2_demo.launch.py #打开两个小海龟的launch,其中一个小海龟会追着另一个小海龟走

ros2 run turtlesim turtle_teleop_key

ros2 run tf2_tools view_frames #订阅5秒钟内的坐标系结构并绘制保存tf结果

ros2 run tf2_ros tf2_echo turtle2 turtle1 #得到任意两个坐标系相对变化的具体数值

ros2 run rviz2 rviz2 #可视化

相对位置不会发生变化:

静态TF(变化)广播:ros2 run learning_tf static_tf_broadcaster

ros2 run tf2_tools view_frames

TF监听:ros2 run learning_tf tf_listener

11.URDF:统一机器人描述格式

解析URDF中使用XML格式描述的机器人模型,包括link和joint子深深及相关属性的描述信息

<link>

描述机器人的某个刚体部分的外观和物理属性;描述连杆尺寸、颜色,形状,惯性矩阵,碰撞参数等

每个link会成为一个坐标系

其中<visual>部分描述机器人的外观视觉效果,<collision>描述碰撞,运动中的状态

<joint>

描述两个link之间的关系,分为六种类型

包括关节运动的位置和速度限制;描述机器人的关节运动学和动力学属性

最后全都放在<robot>中

模型示例:

ros2 launch learning_urdf display.launch.py

查看模型结构:

在模型文件夹下 $ urdf_to_graphviz mbot_base.urdf

12.Gazebo:三维物理仿真平台

具备强大的物理引擎

高质量的图形渲染

可以测试机器人算法、机器人设计、现实情景下的回溯测试

 file: .bashrc *** source /usr/share/gazebo/setup.bash

sudo apt install ros-humble-gazebo-*

ros2 launch gazebo_ros gazebo.launch.py

通过宏定义的方式把各个模块组合到一起

配置模型中的仿真参数:

为link添加惯性参数和碰撞属性;为link添加gazebo标签;为joint添加传动装置;添加gazebo控制器插件

运动仿真:

ros2 launch learning_gazebo load_urdf_into_gazebo.launch.py #启动仿真文件

ros2 run teleop_twist_keyboard teleop_twist_keyboard #启动键盘控制

13.Rviz 三维可视化工具

可以使用可扩展标记语言XML对机器人、周围物体等任何实物进行尺寸、质量、位置、材质、关节等属性的描述并在界面中呈现

通过图形化方式实时显示机器人传感器的信息、运动状态、周围环境的变化等

也可以在Rviz的控制界面下,通过按钮、滑动条、数值等方式控制机器人的行为

启动Rviz ros2 run rviz2 rviz2

14.RQT:模块化可视化工具

logging-console对日志信息进行管理和搜索;topic-massager pubulisher可视化的话题发布和服务调用;对数据订阅并直接画成曲线图

$ sudo apt install ros-humble-rqt

$ rqt

小海龟仿真:

ros2 run turtlesim turtlesim_node

ros2 run turtlesim turtle_teleop_key

  • 9
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
古月ROS入门21课笔记主要涵盖了ROS安装和基本使用方法,以下是我的总结: 1. 安装ROS:首先要安装ROS操作系统,根据教程可以选择安装适合自己系统的版本,如ROS Kinetic或ROS Melodic等。 2. 创建工作空间:使用catkin工具创建ROS工作空间,可以将所有的ROS相关文件放在这个空间中。 3. 创建包:在工作空间内创建一个ROS包,这个包是ROS项目的基本单元。可以使用catkin_create_pkg命令来创建包,并指定包的依赖项。 4. 编写节点代码:节点是ROS中最基本的执行单元,可以通过编写节点来实现各种功能。可以使用C++或Python编写节点代码。 5. 编译代码:使用catkin_make命令编译ROS代码,编译后会生成可执行文件。编译成功后,可以在工作空间中的bin目录下找到生成的可执行文件。 6. 运行节点:使用rosrun命令来运行编译好的节点。节点运行后会执行相应的功能。 7. 使用消息通信:ROS中的节点通过发布和订阅消息来进行通信。可以编写发布节点和订阅节点代码,通过话题的方式进行消息传递。 8. 使用服务通信:除了消息通信,ROS还提供了服务通信的机制。可以编写服务端和客户端代码,进行服务调用和响应。 9. 使用参数服务器:ROS提供了参数服务器来存储和共享参数。可以将特定的参数存储在参数服务器上,并在节点中进行访问和修改。 10. 使用RViz可视化:RViz是ROS环境下的可视化工具,可以将机器人模型和传感器数据等进行可视化展示,方便调试和分析。 通过学习古月ROS入门21课,我对ROS的基本使用方法和常用功能有了初步了解。在实践中,我将进一步深入学习和应用ROS,提高自己在机器人开发和控制方面的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值