赞
踩
mkdir -p ~/dev_ws/src
cd dev_ws/src/git clone https://gitee.com/guyuehome/ros2_21_tutorials.git
sudo apt install python3-pip
sudo pip3 install rosdepc
cd ..
sudo rosdepc init & rosdepc update
rosdepc install -i --from-path src --rosdistro foxy -y (注意:执行此句报错)
搜索src中项目所有功能包的依赖项,自动安装依赖项
sudo apt install python3-colcon-ros
colcon build 扫描功能包,扫描依赖,开始编译
编译后生成build、install和log文件夹
source install/local_setup.sh
.bashrc文件中,最后一行添加
source ~/dev_ws/install/local_setup.sh
ros2 pkg create --build-type <build-type><package_name>
如
cd ~/dev_ws/src
ros2 pkg create --build-type ament_cmake learning_pkg_c # c++
或 ros2 pkg create --build-type ament_python learning_pkg_python # python
cd ~/dev_ws/src
colcon build # 编译工作空间所有功能包
source install/local_setup.bash
ros2 run learning_node(功能包) node_helloworld(节点)
ros2 run learning_node node_helloworld_class
rclpy.init(arg=args) python接口初始化
node = HelloWorldNode("节点名") 创建ROS2节点对象并进行初始化
rclpy.spin(node) 循环等待ros2退出
node.destroy_node() 销毁节点对象 当按下ctrl+c时
rclpy.shutdown() 关闭ros2 python接口
sudo apt install python3-opencv
ros2 run learning_node node_object
读取摄像头图像,动态检测
ros2 run learning_node node_object_webcam
cv2.VideoCapture(0) 获取摄像头实时信息
while rclpy.ok(): ret,image = cap.read() 读取一帧图像 if ret==True: object_detect(image) 检测
ros2 node list 查看运行的节点列表
ros2 node info /node_object_webcam 查看节点信息,有哪些发布者订阅者
订阅者或发布者可以不唯一 多对多
异步通信机制
.msg文件定义通信的消息结构
发布者Publisher->Topic:chatter Message:String Data:Hello world->订阅者Subscriber
Publisher->Topic:image_raw Message:Image Data:Image Data->Subscriber
ros2 run learning_topic topic_webcam_pub
ros2 run learning_topic topic_webcam_sub
sudo apt install ros-版本(foxy)-usb-cam
ros2 run usb_cam usb_cam_node_exe
info信息 bw带宽(两帧中的数据量)
ros2 topic echo bw /image_raw 打印图像带宽
rqt_graph 节点视图
同步通信机制;服务器端唯一,客户端可以不唯一;.srv文件定义请求和应答数据结构
ros2 run learning_service service_adder_server
ros2 run learning_service service_adder_client 2 3
Client——Service:service_object_client Request Data:true Response Data:x,y——Server
ros2 run use_cam usb_cam_node_exe
ros2 run learning_service service_object_server
ros2 run learning_service service_object_client
self.server = self.create_service(接口类型(srv数据类型), 服务名, 服务器回调函数self.object_position_callback)
self.client = self.create_client(接口类型(srv数据类型), 服务名)
while not self.client.wait_for_service(timeout_sec=1.0):
self.get_logger().info('service not available, waiting again...')
.msg文件 话题
int32 x
int32 y
.srv文件 服务
请求数据
int64 a
int64 b
---
应答数据
int64 sum
.action文件 动作
目标
bool enable
---
结果
bool finish
---
反馈
int32 state
ros2 interface list
ros2 interface show std_srvs/srv/SetBool 查看接口信息内容
ros2 interface package learning_interface 查看功能包中的接口
如:机器人转个圈--》当转到90度--》旋转完毕
动作:完整行为的流程管理
客户端/服务器(C/S)模型
Action包含:Goal Service Request Response -- Feedback Topic -- Result Service Request Response
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
ros2 param list
ros2 param describe turtlesim background_b
ros2 param set/get turtlesim background_b (100)
ros2 param dump turtlesim >> turtlesim.yaml 重定向,将信息保存到yaml中
ros2 param load turtlesim turtlesim.yaml 读取参数并更新
ros2 run learning_parameter param_declare
ros2 param set param_declare robot_name turtle
self.declare_parameter(参数名,参数值) 创建一个参数,设置参数默认值
self.get_parameter(参数名).get_parameter_value().string_value 从ROS2系统中读取参数的值
rclpy.parameter.Parameter(参数名,rclpy.Parameter.Type.STRING('参数值')) 设置参数为制定值
self.set_parameters(参数列表)
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
Computer A 树莓派 电机驱动、摄像头
Computer B 笔记本 监控、操作
树莓派端配置
分布式数据传输
ros2 run demo_nodes_cpp talker(树莓派端)
ros2 run demo_nodes_py listener(PC端)
ssh 树莓派端主机名+ip地址
vim ~/.bashrc
export ROS_DOMAIN_ID=设置数字(9)
source ~/.bashrc
小海龟仿真
ros2 run turtlesim turtlesim_node (PC端)
ros2 run turtlesim turtle_teleop_key (树莓派端)
运行dev_ws中代码
cd ~/dev_ws
source install/local_setup.sh 或 写入到~/.bashrc中
点对点模式 TCP,REST,WS*,OPC UA CORBA,Thrift
Broker模式(Brokered ESB Daemon) MQTT,XMPP,AMQP,Kafka
广播模式 FieldbuS,CANbus,OPC UA Pub-Sub
数据为中心模式 shared Data Model DataBus DDS
DDS, Data Distribution Service 数据分发服务
专门为实时系统设计的数据分发/订阅鲍屯
强调以数据为中心,提供丰富的服务质量策略(QoS),以保障数据进行实时、高校、灵活地分发,可满足各种分布式实时通信应用需求
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
ros2 topic info /chatter --verbose
ros2 run learning_qos qos_helloworld_pub
ros2 run learning_qos qos_helloworld_sub
from rclpy.qos impor QoSProfile, QoSReliabilityPolicy, QoSHistoryPolicy # ros2 QoS类
Launch文件:实现多节点的配置和启动
ros2 launch learning_launch simple.launch.py
- from launch import LaunchDescription
- from launch_ros.actions import Node
-
- def generate_launch_description():
- return LaunchDescription([
- Node(
- package='learning_topic',
- executable='topic_helloworld_pub'
- ),
- Node(
- package='learning_topic',
- executable='topic_helloworld_sub'
- ),
- ])
- import os
-
- from ament_index_python.packages import get_package_share_directory # 查询功能包路径的方法
-
- from launch import LaunchDescription # launch文件的描述类
- from launch_ros.actions import Node # 节点启动的描述类
-
-
- def generate_launch_description(): # 自动生成launch文件的函数
- rviz_config = os.path.join( # 找到配置文件的完整路径
- get_package_share_directory('learning_launch'),
- 'rviz',
- 'turtle_rviz.rviz'
- )
-
- return LaunchDescription([ # 返回launch文件的描述信息
- Node( # 配置一个节点的启动
- package='rviz2', # 节点所在的功能包
- executable='rviz2', # 节点的可执行文件名
- name='rviz2', # 对节点重新命名
- arguments=['-d', rviz_config] # 加载命令行参数
- )
- ])
重映射
- from launch import LaunchDescription # launch文件的描述类
- from launch_ros.actions import Node # 节点启动的描述类
-
- def generate_launch_description(): # 自动生成launch文件的函数
- return LaunchDescription([ # 返回launch文件的描述信息
- Node( # 配置一个节点的启动
- package='turtlesim', # 节点所在的功能包
- namespace='turtlesim1', # 节点所在的命名空间
- executable='turtlesim_node', # 节点的可执行文件名
- name='sim' # 对节点重新命名
- ),
- Node( # 配置一个节点的启动
- package='turtlesim', # 节点所在的功能包
- namespace='turtlesim2', # 节点所在的命名空间
- executable='turtlesim_node', # 节点的可执行文件名
- name='sim' # 对节点重新命名
- ),
- Node( # 配置一个节点的启动
- package='turtlesim', # 节点所在的功能包
- executable='mimic', # 节点的可执行文件名
- name='mimic', # 对节点重新命名
- remappings=[ # 资源重映射列表
- ('/input/pose', '/turtlesim1/turtle1/pose'), # 将/input/pose话题名修改为/turtlesim1/turtle1/pose
- ('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'), # 将/output/cmd_vel话题名修改为/turtlesim2/turtle1/cmd_vel
- ]
- )
- ])
setup.py中data_files需要配置
sudo apt install ros-foxy-turtle-tf2-py ros-foxy-tf2-tools
sudo pip3 install transform3d
ros2 launch turtle_tf2_py turtle_tf2_demo.launch.py
ros2 run turtlesim turtle_teleop_key
ros2 run tf2_tools view_frames
ros2 run tf2_ros tf2_echo turtle2 turtle1
ros2 run rviz2 rviz2 -d
(ros2 pkg prefix --share turtle_tf2_py)/rviz/turtle_rviz.rviz
机器人组成:硬件结构、驱动系统、控制系统、传感系统
硬件:底盘、外壳、电机
Unified Robot Description Format统一机器人描述格式
使用XML格式描述机器人模型,包括link和joint自身及相关属性的描述信息
<link> 描述机器人某个刚体部分的外观和物理属性
描述连杆尺寸size、颜色color、形状shape、惯性矩阵inertial matrix、碰撞参数collision properties等
每个Link会成为一个坐标系
<joint>描述两个link之间的关系,包括
包括关节运动的位置和速度限制,描述机器人关节的运动学和动力学属性
<robot name=''>
urdf 存放机器人模型的URDF或xacro文件
meshes 放置URDF中引用的模型渲染文件
launch 保存相关启动文件
rviz 保存rviz的配置文件
ros2 launch learning_urdf display.launch.py
查看描述URDF模型结构
urdf_to_graphviz mbot_base.urdf 在模型文件夹下
用于测试机器人算法、机器人的设计、现实情景下的回溯测试
sudo apt install ros-foxy-gazebo-*
ros2 launch gazebo_ros gazebo.launch.py
使用虚拟机时,需要强制使用cpu渲染
~/.bashrc
export SVGA_VGPU10=0
sudo apt install ros-foxy-xacro
精简模型代码:创建宏定义、文件包含
提供可编程接口:常量、变量、数学计算、条件语句
常量定义 <xacro:property name="M_PI" value="3.14159">
常量使用 <origin xyz="0 0 0" rpy="${M_PI/2} 0 0">
数学计算 <origin xyz="0 ${(motor_length+wheel_length)/2} 0" rpy="0 0 0">
注意:所有数学运算都会转换成浮点数进行,以保证运算精度
宏定义 <xarco:macro name="name" param="A B C"> ... </xacro:macro>
宏调用 <name A="A_value" B="B_value" C="C_value" />
文件包含 <xacro:include filename="$(find mbot_description)/urdf/mbot_base_gazebo.xacro" />
ros2 launch learning_gazebo load_urdf_into_gazebo.launch.py
ros2 run teleop_twist_keyboard teleop_twist_keyboard
ros2 launch learning_gazebo load_mbot_camera_into_gazebo.launch.py
Gazebo 仿真平台:创造数据
Rviz 可视化平台:显示数据
sudo apt install ros-foxy-rqt
rqt
https://www.autoware.org/
https://autowarefoundation.gitlab.io/autoware.auto/AutowareAuto/
https://moveit.ros.org/
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。