ROS机器人入门:机器人系统仿真【学习记录】——2

承接上一篇博客:

ROS机器人入门:机器人系统仿真【学习记录】——1-CSDN博客

我们先前结束了(上一篇博客中):

1. 概述

2. URDF集成Rviz基本流程

3. URDF语法详解

4. URDF优化_xacro

下面让我们继续学习ROS机器人系统仿真!


让我们接着新的开始:

5. Rviz中控制机器人模型运动

        通过 URDF 结合 rviz 可以创建并显示机器人模型,不过,当前实现的只是静态模型,如何控制模型的运动呢?在此,可以调用 Arbotix 实现此功能。

简介

Arbotix:Arbotix 是一款控制电机、舵机的控制板,并提供相应的 ros 功能包,这个功能包的功能不仅可以驱动真实的 Arbotix 控制板,它还提供一个差速控制器,通过接受速度控制指令更新机器人的 joint 状态,从而帮助我们实现机器人在 rviz 中的运动。

这个差速控制器在 arbotix_python 程序包中,完整的 arbotix 程序包还包括多种控制器,分别对应 dynamixel 电机、多关节机械臂以及不同形状的夹持器。

Arbotix使用流程

        控制机器人模型在 rviz 中做圆周运动

实现流程:

  1. 安装 Arbotix

  2. 创建新功能包,准备机器人 urdf、xacro 文件

  3. 添加 Arbotix 配置文件

  4. 编写 launch 文件配置 Arbotix

  5. 启动 launch 文件并控制机器人模型运动

1.安装 Arbotix

方式1:命令行调用

sudo apt-get install ros-<<VersionName()>>-arbotix

将 <<VsersionName()>> 替换成当前 ROS 版本名称,如果提示功能包无法定位,请采用方式2。

方式2:源码安装

先从 github 下载源码,然后调用 catkin_make 编译

git clone https://github.com/vanadiumlabs/arbotix_ros.git


下面我们采用方式2来进行源码的下载:

将git到的arbotix_ros文件复制到自己工作空间的src下,然后需要进行catkin_make编译

这里我遇到了一个问题,就是编译失败,报错信息如下:

主要的报错信息为: AttributeError: module 'em' has no attribute 'RAW_OPT' 

下面结合这篇博客解决了这个问题:

在进行编译时,遇到AttributeError:module ‘em‘ has no attribute ‘RAW_OPT‘问题_no attribute 'raw_opt-CSDN博客

具体问题就是在“empy”这个库中没有'RAW_OPT'这个属性

原因:

由于empy的版本不匹配,我下载的empy版本为4.1,但是似乎4.0版本以上都会出现这个错误

可以pip show来查看一下empy的版本:

解决方法:

将原来自己的conda环境中的"empy"卸载并重新安装旧版本的“empy”:

conda activate hjx

pip uninstall empy
pip install empy==3.3.4

安装好empy的低版本后,再次进行catkin_make编译,可以发现问题得到了解决:


2.创建新功能包,准备机器人 urdf、xacro

这里的urdf 和 xacro 沿用上一篇博客的实现即可

3.添加 arbotix 所需的配置文件

下面开始添加 arbotix 所需配置文件,代码如下:

# 该文件是控制器配置,一个机器人模型可能有多个控制器,比如: 底盘、机械臂、夹持器(机械手)....
# 因此,根 name 是 controller
controllers: {
   # 单控制器设置
   base_controller: {
          #类型: 差速控制器
       type: diff_controller,
       #参考坐标
       base_frame_id: base_footprint, 
       #两个轮子之间的间距
       base_width: 0.2,
       #控制频率
       ticks_meter: 2000, 
       #PID控制参数,使机器人车轮快速达到预期速度
       Kp: 12, 
       Kd: 12, 
       Ki: 0, 
       Ko: 50, 
       #加速限制
       accel_limit: 1.0 
    }
}

另请参考: http://wiki.ros.org/arbotix_python/diff_controller

下面我们开始进行 arbotix 所需配置文件的配置工作:

在urdf01_rviz文件夹中的config文件夹中新建一个control.yaml文件,再将上面的代码复制进去:

4.launch 文件中配置 arbotix 节点

下面开始新建一个launch文件(control.launch),代码如下:

<launch>
    <param name="robot_description" command="$(find xacro)/xacro $(find urdf01_rviz)/urdf/xacro/car.xacro" />
    
    <node pkg="rviz" type="rviz" name="rviz" args="-d $(find urdf01_rviz)/config/show_mycar.rviz" />
    <node pkg="joint_state_publisher" type="joint_state_publisher" name="joint_state_publisher" output="screen" />
    <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher" output="screen" />

    <!-- 集成 arbotix 运动控制节点 -->
    <node pkg="arbotix_python" type="arbotix_driver" name="driver" output="screen" >
        <rosparam command="load" file="$(find urdf01_rviz)/config/control.yaml" />
        <param name="sim" value="true" />
    </node>

</launch>

代码解释:

<node> 调用了 arbotix_python 功能包下的 arbotix_driver 节点

<rosparam> arbotix 驱动机器人运行时,需要获取机器人信息,可以通过 file 加载配置文件

<param> 在仿真环境下,需要配置 sim 为 true

下面开始启动launch文件并控制机器人运动,进入工作空间中先source一下,再执行launch文件:

source ./devel/setup.bash

conda activate hjx

roslaunch urdf01_rviz control.launch 

运行launch文件时遇到报错:

ModuleNotFoundError: No module named 'serial'

解决方法:

conda activate hjx

pip install pyserial

再次执行launch文件,可以发现启动成功:

下面需要将base_footprint修改为odom(里程计):

下面查看一下ROS系统中存在的一些话题,开启一个终端执行:

rostopic list

也就说我们可以发布 cmd_vel 话题消息控制小陈运动了,该实现策略有多种,可以另行编写节点,或者更简单些可以直接通过如下命令发布消息,给出例子:

rostopic pub -r 10 /cmd_vel geometry_msgs/Twist '{linear: {x: 0.2, y: 0, z: 0}, angular: {x: 0, y: 0, z: 0.5}}'

实操环节开始,其中/cmd_vel这个话题可以发布速度消息,这个话题现在是被arbotix订阅的,我们现在只需要发消息即可,下面开始发送,在终端中输入:

rostopic pub -r 10 /cmd_vel

然后一直Tab补齐,出现如下界面:

设置一下线速度和角速度:

最后进行回车,可以在rviz中发现小车运动了起来:

为了增强视觉感受,可以在rviz中添加一下组件(Odometry):

 下面在Odometry中的Topic处设置为/odom,出现如下界面:

这个红色的箭头指向就是小车的运动方向,其中箭头的数量默认保存为100个

6. URDF集成Gazebo

        URDF 需要集成进 Rviz 或 Gazebo 才能显示可视化的机器人模型,前面已经介绍了URDF 与 Rviz 的集成,本节主要介绍:

  • URDF 与 Gazebo 的基本集成流程;
  • 如果要在 Gazebo 中显示机器人模型,URDF 需要做的一些额外配置;
  • 关于Gazebo仿真环境的搭建。

URDF与Gazebo基本集成流程

URDF 与 Gazebo 集成流程与 Rviz 实现类似,主要步骤如下:

  1. 创建功能包,导入依赖项

  2. 编写 URDF 或 Xacro 文件

  3. 启动 Gazebo 并显示机器人模型

1.创建功能包

创建新功能包,导入依赖包: urdf、xacro、gazebo_ros、gazebo_ros_control、gazebo_plugins

2.编写URDF文件

~~~未完待更~~~

参考资料:

第 6 章 机器人系统仿真 · Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于ESP32和ESP8266的物联网开发过程(一)

给大家演示一个小工具&#xff0c;通过Wifi去连接ESP32或者ESP8266出来的一个热点。连接到这个热点之后&#xff0c;可以输密码&#xff0c;也可以不输密码。这里我设置的是不输密码直接进来&#xff0c;我这个是ESP8266。 进来之后直接点配置Wifi&#xff0c;然后可以看到ESP8…

tecplot 宏的使用方法及代码改写

我们在对流场数据进行批量提取时&#xff0c;不可避免的需要使用tecplot宏文件&#xff0c;因此&#xff0c;俺就研究了一下&#xff0c;主要针对的是批量切片-批量转换成dat文件-批量转换成excel的格式 以下贴出我的宏文件 1.批量切片 重点在于设置循环 2.批量dat转excel 大…

SPSS之聚类分析

SPSS中系统聚类分析功能在【分析】—【分类】—【系统聚类】中完成。系统聚类有两种类型&#xff0c;一种是对样本进行聚类&#xff0c;称为Q型聚类&#xff1b;一种是对变量进行聚类&#xff0c;称为R型聚类。在【系统聚类分析】—【聚类】框下选择【个案】——Q型聚类&#x…

优惠券样式案例

优惠券样式案例 <template><view class"box"><view class"boxItem"><img src"../../../static/come.png" alt"" class"img"/><span class"icon">&#xffe5;</span><s…

MySQL之查询 拿下 * 。*

DQL数据查询语言 对上述的的查询操作进行代码演示&#xff08;续上一篇学生表代码进行处理&#xff09; 下面是上一篇的代码分享 下面进行简单的查询操作 字符串如果强行进行算数运算默认只为0 查询时常用的单行函数列举 未完待续

电源管理芯片该如何测试?

电源管理芯片作为电子产品的重要组成部分&#xff0c;其性能测试必不可少。通过各项指标测试&#xff0c;评估电源管理芯片是否符合设计规范&#xff0c;及其稳定性和可靠性。 可通过检测以下指标参数来评估电源芯片的性能&#xff1a; 输入/出电压范围、输出纹波、电压调整率、…

数据结构学习/复习8--树与二叉树的概念与基本性质练习

一、树 1.概念 2.树的表示 二、二叉树 1.二叉树的概念 2.与性质相关的题

StreamingT2V

下面首先是参考的一些博客 https://blog.csdn.net/qq_44681809/article/details/137081515 qustion SDEdit:就是给图片加一点噪声然后再用模型去噪&#xff0c;来获得一个更好的帧&#xff0c;比如去掉伪影和污点 这里的分割为m个24帧的块&#xff0c;块与块之间已经有8帧重叠…

抖音 通用交易系统 下单 密钥生成

已PHP为例 前提提条件 必须在 linux 系统中 生成 准备工作 接下来打开命令 执行命令即可 openssl genrsa -out private_key.pem 2048 rsa -in private_key.pem -pubout -out public_key.pem exit 会生成 公匙和 私匙 在小程序中 将 生成应用公匙 复制到小程序后台 在执行…

C++ 概览并发

并发 资源管理 资源 程序中符合先获取后释放&#xff08;显式或隐式&#xff09;规律的东西&#xff0c;比如内存、锁、套接字、线程句柄和文件句柄等。RAII&#xff1a; (Resource Acquisition Is Initialization),也称为“资源获取就是初始化”&#xff0c;是C语言的一种管…

C语言-设置控制台信息

Win_API Win_API是Windows应用程序接口&#xff08;Windows Application Programming Interface&#xff09;的缩写&#xff0c;它是一组函数、系统服务和程序接口&#xff0c;允许开发者在微软Windows操作系统上创建应用程序。Win32 API 是Windows API的一个主要部分&#xff…

测试用例执行的结果pass_fail_block_skip

pass fail block skip 测试用例的执行结果通常包括以下几个方面&#xff1a; 1. **测试结果状态**&#xff1a;通常分为“通过”、“失败”、“阻塞”和“跳过”等状态。 - **通过**&#xff1a;测试用例执行完毕&#xff0c;预期结果与实际结果一致。 - **失败**&am…

C++ 多态(一)

一、多态定义 同一种操作作用于不同的对象时&#xff0c;可以产生不同的行为。在面向对象编程中&#xff0c;多态性是指通过继承和重写实现的&#xff0c;同一个方法在不同的子类中可以表现出不同的行为。多态性可以提高代码的灵活性和可扩展性&#xff0c;使得程序更易于维护…

Golang中实现调用Windows API向指定目标发送ARP请求

简介 Go库中很多实现的arp都是支持osx/linux/bsd之类的&#xff0c; 但几乎没有支持windows的&#xff0c; 也试了一些方式&#xff0c; 目前还是选用调用windows的API&#xff0c; 记录一下这一次windows的API的调用经验。 实现 代码 package main/* #cgo CFLAGS: -I. #cgo …

Altium Designer——检查原理图库正确性并生成报告

一、方法&#xff1a; 1.打开原理图库&#xff1a; 2.点击菜单栏的报告选项&#xff1a; 3.选择器件规则检查&#xff1a; 根据需求勾选&#xff0c;一般都是全部勾选&#xff1a; 二、问题&#xff1a; 1.缺少封装会导致什么问题&#xff1a; 1.首先&#xff1a; 封装是…

网络相关笔记

IPv4地址 IPv4地址通常以“点分十进制”形式书写&#xff0c;即四个0-255之间的十进制数&#xff0c;各数之间用英文句点&#xff08;.&#xff09;分隔&#xff0c;例如&#xff1a;192.0.2.1。总共32位的地址空间可以表示大约42亿个不同的地址。 IPv4地址结构包括&#xff…

Django开发实战之登录用户鉴权登录界面实现

Django自带的鉴权系统非常的安全&#xff0c;大家可以放心使用&#xff0c;那么如何使用呢&#xff1f; 1、首先需要检查settings文件种的INSTALLED_APPS&#xff0c;有没有这两部分内容&#xff1a; 2、检查中间件&#xff0c;比如这两个中间件&#xff0c;一个是用于登录&a…

io (fscanf fprintf)

20 #include <sys/un.h>21 typedef struct stu22 {23 char name[16];24 int age;25 double score;26 }stu;27 int main(int argc, const char *argv[])28 {29 /* 有如下结构体30 31 申请该结构体数组&#xff0c;容量为5&#xff0c;初始化5个学生的信息32 …

【高校科研前沿】中国科学院地理资源所钟帅副研究员研究组博士生朱屹东为一作在Top期刊发文:从潜力到利用:探索西藏风能资源开发的技术路径优化布局

01 文章简介 论文名称&#xff1a;From potential to utilization: Exploring the optimal layout with the technical path of wind resource development in Tibet&#xff08;从潜力到利用:探索西藏风能资源开发的技术路径优化布局&#xff09; 文章发表期刊&#xff1a;《…

Wireshark明文抓取

目录 原理 配置 1、配置环境变量 2、Wireshark配置 原理 SSLKEYLOGFILE是一个用于记录SSL/TLS会话中使用的密钥的文件。它主要用于调试和分析SSL/TLS协议。当启用了SSLKEYLOGFILE配置&#xff0c;系统会将所有SSL/TLS会话中使用的密钥记录到指定的文件中。这些密钥可以用来…