ROS2机器人编程简述humble-第二章-SIMULATED ROBOT SETUP .4

news2024/11/15 23:51:14

ROS2机器人编程简述新书推荐-A Concise Introduction to Robot Programming with ROS2

ROS2机器人编程简述humble-第二章-Executors .3.5

书中没有使用几乎所有教程都会采用的turtlesim。

美美的圣诞树画出来-CoCube

如何将数学曲线变为机器人轨迹-花式show爱心代码-turtlesim篇

直接Gazebo仿真案例走起了。

到目前为止,已经看到了基本包,展示了ROS2的基本元素,以及如何创建节点、发布和订阅。ROS2不是通信中间件,而是机器人编程中间件,试图为机器人创建行为。因此,需要一个机器人。机器人相对昂贵。有可能有一个真正的机器人,比如装有激光和RGBD相机的Kobuki,价格约为1000欧元。一个被认为是专业机器人的价格可以达到数万欧元。由于并非所有读者都计划购买机器人来运行ROS2,将在模拟器中使用Tiago机器人。Pal Robotics的Tiago机器人由带距离传感器的差动底座和带手臂的躯干组成,头部装有RGBD摄像头。在我们已经添加到worsespace的软件包中,已经有必要在Gazebo中模拟Tiago机器人(ROS2中的参考模拟器之一)。

仿真0成本!除此之外,算法也基本都可以验证,学习机器人学必备利器。

sim.launch

import os

from ament_index_python.packages import get_package_share_directory

from launch import LaunchDescription
from launch.actions import (DeclareLaunchArgument, GroupAction,
                            IncludeLaunchDescription, SetEnvironmentVariable)
from launch.conditions import IfCondition
from launch.launch_description_sources import PythonLaunchDescriptionSource
from launch.substitutions import LaunchConfiguration, PythonExpression

def generate_launch_description():
    tiago_gazebo_dir = get_package_share_directory('tiago_gazebo')

    world = LaunchConfiguration('world', default='home')
    declare_world_cmd = DeclareLaunchArgument(
        'world',
        default_value='home',
        description='World name')

    tiago_sim_cmd = IncludeLaunchDescription(
        PythonLaunchDescriptionSource(os.path.join(tiago_gazebo_dir, 'launch', 'tiago_gazebo.launch.py')),
        launch_arguments={
          'world_name': world,
          'arm': 'no-arm'
        }.items())

    declare_use_sim_time_cmd = DeclareLaunchArgument(
        'use_sim_time',
        default_value='True',
        description='Use simulation (Gazebo) clock if true')

    ld = LaunchDescription()

    ld.add_action(tiago_sim_cmd)

    ld.add_action(declare_use_sim_time_cmd)
    ld.add_action(declare_world_cmd)

    return ld

运行仿真:

ros2 launch br2_tiago sim.launch.py

支持环境如下:

$ ros2 launch br2 tiago sim.launch.py world:=factory
$ ros2 launch br2 tiago sim.launch.py world:=featured
$ ros2 launch br2 tiago sim.launch.py world:=pal office
$ ros2 launch br2 tiago sim.launch.py world:=small factory
$ ros2 launch br2 tiago sim.launch.py world:=small office
$ ros2 launch br2 tiago sim.launch.py world:=willow garage

注意:world依据需要进行加载。

复习一下之前章节中学过的所有内容,可以更好的掌握ROS2和Gazebo。

比如:ros2 topic list

 ros2 topic list
/arm_controller/joint_trajectory
/arm_controller/state
/arm_controller/transition_event
/base_imu
/clock
/diagnostics
/distance/sonar_base
/dynamic_joint_states
/floating_base_pose_simulated
/gripper_controller/joint_trajectory
/gripper_controller/state
/gripper_controller/transition_event
/ground_truth_odom
/head_controller/joint_trajectory
/head_controller/state
/head_controller/transition_event
/head_front_camera/depth/image_raw/compressed
/head_front_camera/depth/image_raw/compressedDepth
/head_front_camera/depth/image_raw/theora
/head_front_camera/depth_registered/camera_info
/head_front_camera/depth_registered/image_raw
/head_front_camera/depth_registered/points
/head_front_camera/image_raw/compressed
/head_front_camera/image_raw/compressedDepth
/head_front_camera/image_raw/theora
/head_front_camera/rgb/camera_info
/head_front_camera/rgb/image_raw
/input_joy/cmd_vel
/joint_state_broadcaster/transition_event
/joint_states
/joy
/joy_priority
/joy_vel
/key_vel
/marker
/marker_vel
/mobile_base_controller/cmd_vel_unstamped
/mobile_base_controller/odom
/mobile_base_controller/transition_event
/nav_vel
/parameter_events
/pause_navigation
/performance_metrics
/phone_vel
/robot_description
/rosout
/rviz_joy_vel
/scan_raw
/servoing_cmd_vel
/stop_closing_loop
/tab_vel
/tf
/tf_static

一个机器人通常具备超过20个以上主题。

例如:节点负责传感器。通过机器人的摄像头、imu、激光和声纳发布信息。最复杂的节点是相机节点,即RGBD传感器,因为它分别发布深度和RGB图像。每个图像都关联了一个主题相机信息,其中包含机器人相机的固有值。对于每个传感器,标准消息类型用于提供的信息。

遥控机器人:

ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args -r cmd_vel:=key_vel

图形化工具:rqt和rviz2

ROS 2-带Rviz2的数据显示
RVIZ是一个ROS图形界面,它允许您可视化大量信息,并使用多种可用主题的插件。RVIZ2只是RVIZ进入ROS2的一个端口。
要创建自己的RVIZ2配置,可以组合以下插件。
全局选项
为了能够可视化ZED摄像机发布的信息,必须正确配置全局选项:
关键参数:
固定帧:指示用作所有其他帧参考的帧的名称。可以选择组合框中的每个可用帧。
帧速率:用于更新三维视图的最大频率。30或60 FPS是好值。可用的计算能力应指导决策。
网格
该插件允许可视化通常与地板平面关联的网格。
关键参数:
参考帧:用作栅格坐标参考的帧(通常:<fixed_frame>)
平面单元格计数:单元格中网格的大小
正常单元格计数:垂直于网格平面的方向上的单元格数(通常为0)
单元尺寸:每个网格单元的尺寸(单位:米)
平面:标识栅格平面的两个轴
机器人模型
该插件允许根据URDF模型的描述可视化机器人模型。
关键参数:
可视化启用:启用/禁用模型的三维可视化
描述来源:可以在文件和主题之间进行选择。在编写本指南时,“主题”选项未按预期工作,因此“文件”是正确的选项
描述文件:包含Robot Description.URDF。
通过展开“链接”,可以看到整个模型树,其中包含所有可用的关节和链接,以及空间中相对于固定框架的相对位置和方向。
时间间隔(TF)
该插件允许可视化组成TF层次结构的所有帧的位置和方向。
关键参数:
显示名称:启用/禁用链接名称的三维可视化
显示轴:启用/禁用框架轴的三维可视化
显示箭头:启用/禁用连接各个框架的箭头的三维可视化
标记比例:用于重新缩放所有TF对象,使其更清晰,更不混乱
更新间隔:以秒为单位的更新时间。在0离开以查看每个更新
使用此插件的关键是启用/禁用可视化单个帧的功能。允许只专注于对当前任务最重要的部分。
视频
通过遵循视频与RVIZ2教程,了解如何配置RVIZ以可视化视频信息。
深度传感
通过遵循RVIZ2深度教程,了解如何配置RVIZ以可视化深度信息。
位置跟踪
通过遵循RVIZ位置教程,了解如何配置RVIZ以可视化位置信息。
3D对象检测
通过遵循RVIZ对象检测教程,了解如何使用custon Stereolabs插件配置RVIZ以可视化对象检测信息。
平面检测
通过遵循RVIZ对象检测教程,了解如何配置RVIZ以可视化平面检测信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/175503.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ribbon集成Nacos实现权重配置(本篇暂未支持spring gateway)

1场景&#xff1a;本篇&#xff0c;是师范 ribbon 与nacos 的权重测试&#xff0c;ribbon读取 nacos内权重设置。在调用端增加配置文件代码如下&#xff1a;&#xff08;1&#xff09; 本次测试nacos 1.4.1&#xff1b;&#xff08;2&#xff09; spring cloud 版本&#xff1a…

趣味三角——第2章——弦

目录 2.1 三角学的雏形与和弦表的产生 2.2 解读残缺粘土板“Plimpton 322”上的三角学 “知识来自影子&#xff0c;影子来自 磬折形(The knowledge comes from the shadow, and the shadow comes from the gnomon)” ——摘自<<Chou-pei Suan-king>>(周髀(b)算经…

while循环——求100以内偶数和

1 问题 求100以内的偶数和。 2 方法 public class EvenNumber{ public static void main(String[] args){ int i 1; int sum 0; while(i < 100){ if(i % 2 0){ System.out.println(i); sum sum i; } i; } System.out.println("100以内的偶数和为&#xff1a;"…

Java-线程基础

Java 线程详解 一个程序至少需要一个进程&#xff0c;而一个进程至少需要一个线程&#xff0c;它也被称为主线程。 线程是程序执行流的最小单位&#xff0c;而进程是系统进行资源分配和调度的一个最小单位。 在单个进程中&#xff0c;可以拥有多个并发执行的线程&#xff0c…

MYSQL分页查询时没有用ORDER BY出现数据重复的问题

背景 产品反馈&#xff0c;用户在使用分页列表时&#xff0c;出现数据重复的问题&#xff0c;查看代码后发现对应的分页SQL并没有使用order by进行排序&#xff0c;但是印象中Mysql的InnoDB引擎会默认按照主键id进行排序&#xff0c;本地测试了一下的确出现了部分数据在不同的页…

单线程事件处理器ControllerEventManager

0 前言 单线程事件处理器&#xff0c;Controller端定义的一个组件。该组件内置了一个专属线程&#xff0c;负责处理其他线程发送过来的Controller事件。还定义了一些管理方法&#xff0c;为专属线程输送待处理事件。 0.11.0.0版本前&#xff0c;Controller组件源码复杂。集群…

【Ajax】XMLHttpRequest和Level2

一、XMLHttpRequest什么是XMLHttpRequestXMLHttpRequest&#xff08;简称 xhr&#xff09;是浏览器提供的 Javascript 对象&#xff0c;通过它&#xff0c;可以请求服务器上的数据资源。之前所学的 jQuery 中的 Ajax 函数&#xff0c;就是基于 xhr 对象封装出来的。二、了解xhr…

java面试

java面试目录概述需求&#xff1a;设计思路实现思路分析1.代码&#xff1a;参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,challenge Surv…

【数据结构】保姆级队列各接口功能实现

目录 &#x1f34a;前言&#x1f34a;&#xff1a; &#x1f95d;一、队列概述&#x1f95d;&#xff1a; 1.队列的概念&#xff1a; 2.队列的结构&#xff1a; &#x1f349;二、队列的各接口功能实现&#x1f349;&#xff1a; 1.初始化队列&#xff1a; 2.入队&#…

k8s之挂载NFS到POD中

写在前面 在k8s之挂载本地磁盘到POD中 一文中我们看了如何将POD中的数据写到本地磁盘中&#xff0c;这种方式要求POD只能在指定的Node上&#xff0c;一旦POD更换Node&#xff0c;数据依然会丢失&#xff0c;所以本文看下如何通过将数据写到NFS中来解决这个问题。下面我们就开始…

sklearn数据降维之字典学习

文章目录字典学习简介构造函数实战Step1 制作实验数据Step2 小批字典学习Step 3 参数调整字典学习简介 如果把降维理解成压缩的话&#xff0c;那么字典学习的本质是编码&#xff0c;其目的是找到少量的原子&#xff0c;用以描述或构建原始样本。举个一维的例子&#xff0c;以a…

程序员护眼指南

前言 前言&#xff1a;脱发和近视是当代年轻人的两大痛点&#xff0c;今天来聊聊如何护眼。 文章目录前言一、护眼的核心二、调节睫状肌的方法1. 眨眼2. 望远3. 睡觉4. 促进血液循环5. 吃补剂6. 好的屏幕一、护眼的核心 护眼的核心就是保护睫状肌。 睫状肌是眼内的一种平滑肌…

一起自学SLAM算法:7.7 典型SLAM算法

连载文章&#xff0c;长期更新&#xff0c;欢迎关注&#xff1a; 针对式&#xff08;7-38&#xff09;所述的在线SLAM系统&#xff0c;以扩展卡尔曼滤波&#xff08;EKF&#xff09;为代表的滤波方法&#xff0c;是求解该状态估计问题最典型的方法&#xff0c;在7.4节中已经详细…

GY-US42超声波传感器模块介绍

GY-US42超声波传感器模块简介GY-US42 是一款低成本高品质测距传感器模块。工作电压 3-5v&#xff0c;功耗小&#xff0c;体积小&#xff0c;安装方便。其工作原理是&#xff0c;探头发射超声波&#xff0c;照射到被测物体后&#xff0c;探头接收返回声波&#xff0c;利用时间差…

学人工智能电脑主机八大件配置选择指南

来源&#xff1a;深度之眼 作者&#xff1a;frank 编辑&#xff1a;学姐 本篇主要是帮助大家构建高性能、高性价比的AI开发的硬件平台。如何不把钱浪费到不必要的硬件上&#xff0c;并合理搭配硬件配置节省预算是本文想要去讨论的问题。如果预算充足&#xff0c;笔者建议购买一…

【JavaSE专栏1】Java的介绍、特点和历史

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发&#xff08;Vue、SpringBoot和微信小程序&#xff09;、系统定制、远程技术指导。CSDN学院、蓝桥云…

Python ·保险理赔分析:数据分析

介绍 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 在本笔记本中&#xff0c;我们将仔细研究保险索赔&#xff0c;并弄清一些有关血压、BMI、糖尿病、吸烟、年龄和性别等条件如何影响索赔价值的事实。 我们将使用散点图、饼图、直…

IDEA必装插件-Gyro

前言用SpringBootTest运行单测的时候&#xff0c;是不是每运行都需要重新启动Spring容器&#xff1f;大型应用启动一次会浪费大量的时间&#xff0c;导致效率比较低。Gyro插件可以解决你的问题。Gyro介绍它是一个IDEA插件&#xff0c;安装之后&#xff0c;用Gyro Debug运行你的…

一起自学SLAM算法:7.4 基于贝叶斯网络的状态估计

连载文章&#xff0c;长期更新&#xff0c;欢迎关注&#xff1a; 在7.2.4节中&#xff0c;讨论了表示机器人观测与运动之间依赖关系的概率图模型&#xff0c;主要是贝叶斯网络&#xff08;实际应用在机器人中的是动态贝叶斯网络&#xff09;和马尔可夫网络&#xff08;实际应用…

fpga实操训练(lcd字符显示)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 用fpga编写屏幕显示,和c语言编写有很大的不同。用c语言开发,很大程度上是遵循soc ip提供的规范进行编写。而用fpga开发的话,则需要考虑不同信号的时序关系。但是,用fpga开发也有…