ros安装和入门(自己的学习笔记)
双系统安装Ubuntu方法:
在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
安装$ sudo apt update
$ sudo apt upgrade
$ sudo apt install tos-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文章来源地址https://www.toymoban.com/news/detail-855093.html
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文章来源:https://www.toymoban.com/news/detail-855093.html
ros2 run turtlesim turtle_teleop_key
到了这里,关于ROS2安装与入门——古月居视频学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!