[ROS 系列学习教程] 建模与仿真 - 使用 Arbotix 控制机器人

在这里插入图片描述

ROS 系列学习教程(总目录)

本文目录

  • 一、Arbotix 简介
  • 二、安装Arbotix
  • 三、配置Arbotix控制器
  • 四、配置launch启动文件
  • 五、数据交互接口
  • 六、在rviz中仿真控制机器人
    • 6.1 直接发topic控制
    • 6.2 使用键盘控制
    • 6.3 编写代码控制机器人移动

前面讲了机器人的建模,是静态的,接下来介绍对机器人的仿真控制,让你的机器人动起来。

一、Arbotix 简介

Arbotix 是一款控制电机、舵机的硬件控制板,并提供相应的 ros 功能包,是一款基于 ROS的机器人控制系统,它旨在为小型机器人提供硬件控制和传感器接口,以便于机器人的运动和感知。它不仅可以驱动真实的 arbotix 控制板,还提供一个差速控制器,通过接收速度控制指令更新机器人的 joint 状态,从而帮助我们实现机器人在仿真环境中的运动。

它的源代码可以在这个里得到:https://github.com/vanadiumlabs/arbotix_ros

arbotix_ros 源码包含如下几部分:

在这里插入图片描述

其中,

  • arbotix_controllers:控制器,现已合并到 arbotix_python 中。
  • arbotix_firmware:处理与 ArbotiX-ROS 绑定通信的固件源代码。
  • arbotix_msgs:ArbotiX 的消息和服务定义。
  • arbotix_python:驱动程序、用于与驱动程序交互的 GUI 以及用于设置伺服电器的终端工具。
  • arbotix_sensors:包含几个传感器模块,可在 arbotix_python 的基本结构上添加额外的 ROS 接口层。

我们主要使用 arbotix_python 的驱动程序模块 arbotix_driver 中的差速底盘控制器 diff_controller

更多关于 Arbotix 的信息见 https://wiki.ros.org/arbotix

关于 diff_controller 的信息见 http://wiki.ros.org/arbotix_python/diff_controller

二、安装Arbotix

对于 ROS1 ,有两种安装方法,命令行和源码安装。

  1. 命令行安装

    sudo apt install ros-<<VersionName()>>-arbotix*
    
  2. 源码安装

    首先在你的工作空间的 src 目录下下载源代码:

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

    然后编译即可使用 Arbotix

    catkin_make # 编译
    

三、配置Arbotix控制器

Arbotix 针对不同的机器人,需要配置不同的控制器,配置文件为 yaml 格式,如下:

# 该文件是控制器配置,一个机器人模型可能有多个控制器,比如: 底盘、机械臂、夹持器(机械手)....
# 因此,根 name 是 controllers
controllers: {# 单控制器设置base_controller: {# 类型: 差速控制器type: diff_controller,# 参考坐标base_frame_id: base_link,# 两个轮子之间的间距,单位:mbase_width: 0.38,# 机器人每移动一米,电机编码器所记录的脉冲数ticks_meter: 2000,# PID控制参数,使机器人车轮快速达到预期速度Kp: 12,Kd: 12,Ki: 0,Ko: 50,# 加速度限制accel_limit: 1.0}
}

四、配置launch启动文件

启动时 Arbotix 会作为一个节点加入到 ROS Master 中,我们使用 launch 文件配置快速启动。

<node name="arbotix" pkg="arbotix_python" type="arbotix_driver" output="screen"><rosparam file="$(find simulation_learning)/config/mbot_arbotix.yaml" command="load" /><param name="sim" value="true"/>
</node>

其中,节点名注册为 arbotix,包名为 arbotix_python,节点可执行文件名为 arbotix_driverrosparam 一行是载入上文的 Arbotix 配置文件;Arbotix 不仅可以用于真实控制板,也可以用于仿真环境,如用于仿真,需将参数 sim 设置为 true

五、数据交互接口

该节点订阅一个话题:/cmd_vel,用于接收对机器人的速度控制信息

消息格式为:geometry_msgs/Twist

geometry_msgs/Vector3 linear  # 机器人三轴线速度float64 xfloat64 yfloat64 z
geometry_msgs/Vector3 angular  # 机器人三轴角速度float64 xfloat64 yfloat64 z

发布一个话题:/odom,用于发布机器人里程计信息,包括定位与速度等信息

消息格式为:nav_msgs/Odometry

std_msgs/Header headeruint32 seq  # 消息序列号time stamp  # 时间戳string frame_id  # 消息帧id
string child_frame_id
geometry_msgs/PoseWithCovariance posegeometry_msgs/Pose posegeometry_msgs/Point position  # 机器人位置坐标float64 xfloat64 yfloat64 zgeometry_msgs/Quaternion orientation # 机器人方向的四元数表示float64 xfloat64 yfloat64 zfloat64 wfloat64[36] covariance  # 6x6协方差矩阵的行主表示
geometry_msgs/TwistWithCovariance twistgeometry_msgs/Twist twistgeometry_msgs/Vector3 linear  # 机器人三轴线速度float64 xfloat64 yfloat64 zgeometry_msgs/Vector3 angular  # 机器人三轴角速度float64 xfloat64 yfloat64 zfloat64[36] covariance  # 6x6协方差矩阵的行主表示

其中6x6协方差矩阵,用于量化位姿估计不确定性。这个矩阵对角线上的元素分别代表了位置与方向估计值的方差,而矩阵的非对角线元素则表示了位置与方向各估计值之间的协方差。矩阵各向量依次表示 (x,y,z,绕x轴旋转,绕y轴旋转,围绕z轴旋转)的估计不确定性。

有了这两个话题,我们就可以控制并获取机器人的位姿了。

六、在rviz中仿真控制机器人

使用前文 [5.1.3 URDF建模实践](#5.1.3 URDF建模实践) 创建的机器人模型,在 launch 文件中添加 Arbotix 节点的启动配置,启动后如下图:

在这里插入图片描述

6.1 直接发topic控制

发布 /cmd_vel 话题控制机器人移动,并订阅 /odom 显示机器人的实时位置与速度信息:

在这里插入图片描述

6.2 使用键盘控制

运行ROS提供的键盘控制包,控制机器人移动:

在这里插入图片描述

6.3 编写代码控制机器人移动

写两个节点,一个发布速度,一个订阅里程计,如下:

move.cpp 用于发布速度:

#include "ros/ros.h"
#include "geometry_msgs/Twist.h"geometry_msgs::Twist moveRobot(const double& linear, const double& angular)
{geometry_msgs::Twist msg;msg.linear.x = linear;msg.linear.y = 0.0;msg.linear.z = 0.0;msg.angular.x = 0.0;msg.angular.y = 0.0;msg.angular.z = angular;ROS_INFO("moveRobot, linear: %.3lf, angular: %.1lf", linear, angular*180/M_PI);return msg;
}int main(int argc, char **argv)
{ros::init(argc, argv, "move_robot");ros::NodeHandle nh;ros::Publisher velPub = nh.advertise<geometry_msgs::Twist>("/cmd_vel", 10);ros::Rate r(1);while (ros::ok()){velPub.publish(moveRobot(0.5, -0.3));ros::Duration(3.0).sleep();velPub.publish(moveRobot(-0.5, -0.3));ros::Duration(3.0).sleep();r.sleep();}return 0;
}

odom.cpp 用于订阅里程计:

#include "ros/ros.h"
#include "nav_msgs/Odometry.h"void odomCallback(const nav_msgs::Odometry::ConstPtr& msg)
{geometry_msgs::Quaternion q = msg->pose.pose.orientation;ROS_INFO("pose: [%.2lf, %.2lf, %.1lf], linear: %.2lf, angular: %.2lf", msg->pose.pose.position.x, msg->pose.pose.position.y, std::atan2(2.0 * (q.w * q.z + q.x * q.y), 1.0 - 2.0 * (q.y * q.y + q.z * q.z))*180/M_PI, msg->twist.twist.linear.x, msg->twist.twist.angular.z*180/M_PI);
}int main(int argc, char **argv)
{ros::init(argc, argv, "robot_odom");ros::NodeHandle nh;ros::Subscriber odomSub = nh.subscribe<nav_msgs::Odometry>("/odom", 10, odomCallback);ros::spin();return 0;
}

CMakeList.txt 中添加内容:

add_executable(move_robot_node src/move.cpp)
add_executable(robot_odom_node src/odom.cpp)target_link_libraries(move_robot_node${catkin_LIBRARIES}
)target_link_libraries(robot_odom_node${catkin_LIBRARIES}
)

启动 rviz 后,运行 move_robot_noderobot_odom_node ,如下:
在这里插入图片描述

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

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

相关文章

二进制中1的个数-java

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、二进制中1的个数 二、算法思路 1.将一个整数转化成二进制形式 2.查询一个数的二进制数中的第k位是多少 3.lowbit(x)操作 三、代码如下 1.代码如下&…

合并两个有序的单链表

25计算机考研&#xff0c;数据结构知识点整理&#xff08;内容借鉴了王道408&#xff0b;数据结构教材&#xff09;&#xff0c;还会不断完善所整理的内容&#xff0c;后续的内容也会不断更新&#xff08;可以关注&#xff09;&#xff0c;若有错误和不足欢迎各位朋友指出! 目…

Rust-03-数据类型

在 Rust 中&#xff0c;每一个值都属于某一个 数据类型&#xff0c;这告诉 Rust 它被指定为何种数据&#xff0c;以便明确数据处理方式。Rust 是 静态类型语言&#xff0c;也就是说在编译时就必须知道所有变量的类型。根据值及其使用方式&#xff0c;编译器通常可以推断出我们想…

ChatTTS 文字生成语言本地模型部署

ChatTTS部署 官方信息 [ChatTTS首页](https://chattts.com/)搭建步骤 1、下载源码 git clone https://github.com/2noise/ChatTTS.git 2、按照环境 pip install torch ChatTTS pip install -r requirements.txt 3、下载模型 git clone https://www.modelscope.cn/pzc163/ch…

[Vue3:axios]:实现实现登陆页面前后端请求,并用Vite解决跨域问题

文章目录 一&#xff1a;前置依赖查看依赖安装 axios&#xff1a;npm install axios 二&#xff1a;配置文件&#xff1a;创建一个用于全局使用的axios实例&#xff0c;并在main.js或main.ts文件中将其配置为全局属性。根目录mainjs文件引入axios 三&#xff1a;登录页面发送登…

【React】dayjs -- 格式化时间 的使用

中文文档 1.安装 Node.js 项目中使用 Day.js&#xff0c;只需使用 npm 安装 npm install dayjs其它地方使用&#xff0c;参考中文文档 2.引入 import dayjs from dayjs3.使用 时间格式化 dayjs().format() // 默认返回的是 ISO8601 格式字符串 2020-04-02T08:02:17-05:0…

Polar Web【中等】xxe

Polar Web【中等】xxe Contents Polar Web【中等】xxe思路&探索EXP运行&总结 思路&探索 如题目所示&#xff0c;此题考查XXE漏洞&#xff0c;具体细节需要逐步深挖 打开站点&#xff0c;提示了flag所在的文件&#xff0c;点击按钮&#xff0c;可见php的配置信息&am…

一款免费文件夹同步工具,旨在帮助用户在不同磁盘或文件夹间进行文件和目录的复制、移动和同步工作

一、简介 1、一款免费文件夹同步工具&#xff0c;旨在帮助用户在不同磁盘或文件夹间进行文件和目录的复制、移动和同步工作。这款工具因其简单易用、高度可定制化的特点&#xff0c;受到了广大用户的青睐。SyncToy支持多种同步模式&#xff0c;包括镜像同步、单向同步以及增量同…

Mysql使用中的性能优化——索引数对INSERT性能的影响

表的索引可以给数据检索提升效率&#xff0c;但是也给表的增删改操作带来代价。本文我们将关注&#xff0c;索引数量对INSERT操作的影响。 结论 索引数的新增会造成INSERT操作效率下降&#xff0c;约每增一个索引会降低10%效率。 实验数据 可以看到0个索引的效率是7个索引效…

Java Web学习笔记21——前后端分离开发

前后端混合开发&#xff1a; 沟通成本比较高。 分工不明确。 不便管理&#xff0c;不便于后期的维护和拓展。 前后端分离开发&#xff1a; 当前主流的开发模式&#xff1a;前后端分离开发&#xff1a; 接口文档&#xff1a; 接口并不是interface。 接口指的是业务功能。 …

学习java第九十六天

AOP有哪些实现方式&#xff1f; AOP有两种实现方式&#xff1a;静态代理和动态代理。 静态代理 静态代理&#xff1a;代理类在编译阶段生成&#xff0c;在编译阶段将通知织入Java字节码中&#xff0c;也称编译时增强。AspectJ使用的是静态代理。 缺点&#xff1a;代理对象需要与…

Wireshark自定义Lua插件

背景&#xff1a; 常见的抓包工具有tcpdump和wireshark&#xff0c;二者可基于网卡进行抓包&#xff1a;tcpdump用于Linux环境抓包&#xff0c;而wireshark用于windows环境。抓包后需借助包分析工具对数据进行解析&#xff0c;将不可读的二进制数转换为可读的数据结构。 wires…

React+TS前台项目实战(三)-- 国际化配置

文章目录 前言一、安装国际化相关插件包二、在src/locales目录下创建en.json和zh.json语言包文件三、配置与使用1. i18n.ts配置详细代码及注释如下2. 在layout布局组件中初始化&#xff0c;并处理路由跳转问题 总结 前言 本文主要讲项目的国际化配置和相关常用方法封装。 一、…

pytho入门教程

文章目录 随机数据生成的方式list操作方式数据操作方式处理缺失数据数据框操作方式画图的方式 随机数据生成的方式 # 随机生成数据的方式 # 1. 随机生成10-20之间的浮点数 holdForce random.uniform(10,20) # print(holdForce)# 2.for循环输出50个数据的方式 # for i in rang…

element-plus的el-text组件(文本组件)的介绍和使用

el-text&#xff08;适合文本操作的组件&#xff09; 设置文本type,如default,primary,success,info,warning,danger超出容器尺寸自动省略&#xff0c;tuncated属性设置size属性控制文本大小&#xff0c;有large,default,small设置tag属性&#xff0c;值为html5标签名&#xf…

前端工程化工具系列(十二)—— PostCSS(v8.4.38):CSS 转换工具

PostCSS 是转换 CSS 语法的工具。它提供 API 来对 CSS 文件进行分析和修改它的规则。 PostCSS 本身并不能直接使用&#xff0c;主要是使用基于 PostCSS 编写的插件。 1 安装 pnpm add -D postcss-import postcss-nested postcss-preset-env cssnano2 配置 在项目根目录下创…

基本类型值,是按值复制的,而不是按引用复制的。(深浅拷贝)

let obj[1,2,4] let obj2Array.from(obj) obj2[0]23 console.log(obj) 这是浅拷贝吗&#xff1f; 在给出的例子中&#xff0c;Array.from(obj) 实际上执行的是对数组 obj 的浅拷贝。这是因为数组在JavaScript中是一种特殊的对象&#xff0c;其元素存储在索引属性中。Array.fr…

Spring Cloud、Spring Cloud LoadBalancer、Nacos 和 OpenFeign整合

版本 Spring Cloud 3.1.1spring cloud loadbalancer 3.1.1nacos 2021.1open feign 3.1.1 引入依赖 在项目的 pom.xml 文件中添加相关依赖&#xff1a; <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter…

Nagios的安装和使用

*实验* *nagios安装和使用* Nagios 是一个监视系统运行状态和网络信息的监视系统。Nagios 能监视所指定的本地或远程主机以及服务&#xff0c;同时提供异常通知功能等. Nagios 可运行在 Linux/Unix 平台之上&#xff0c;同时提供一个可选的基于浏览器的 WEB 界面以方便系统管…

【创作活动】面对层出不穷的AI大模型产品我们应该怎么选择?

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…