打造两轮差速机器人fishbot:从零开始构建移动机器人

server/2024/12/28 0:54:14/

大家好,我是梦笔生花,我们一起来动手创建一个两轮差速的移动机器人fishbot

机器人除了雷达之外,还需要IMU加速度传感器以及可以驱动的轮子,我们曾介绍过机器人学部分,曾对两差速模型进行过介绍,所以我们还需要再创建两个差速驱动轮和一个支撑轮。

所以接下来梦笔生花将带你一起给机器人添加如下部件和关节:

  1. IMU传感器部件与关节

  2. 左轮子部件与关节

  3. 右轮子部件与关节

  4. 支撑轮子部件与关节

1.添加IMU传感器

1.1 修改颜色

透明度修改只需要在base_link中添加material

<link name="base_link"><visual><origin xyz="0 0 0.0" rpy="0 0 0"/><geometry><cylinder length="0.12" radius="0.10"/></geometry><material name="blue"><color rgba="0.1 0.1 1.0 0.5" /> </material></visual>
</link>

1.2 添加imu

  <link name="imu_link"><visual><origin xyz="0 0 0.0" rpy="0 0 0"/><geometry><box size="0.02 0.02 0.02"/></geometry></visual></link><!-- imu joint --><joint name="imu_joint" type="fixed"><parent link="base_link" /><child link="imu_link" /><origin xyz="0 0 0.02" /></joint>

2.添加右轮

2.1 添加关节

关节名称为right_wheel_link,我在做ros2小车的时候采用的轮子如下图:

轮子的宽为4cm,直径为6.4cm,几何形状是个圆柱体,所以geometry配置如下:

<geometry><cylinder length="0.04" radius="0.032"/>
</geometry>

需要注意的是,圆柱默认的朝向是向上的

我们可通过originrpy改变轮子的旋转角度,让其绕x轴旋转pi/2,所以origin的配置为

<origin xyz="0 0 0" rpy="1.57079 0 0"/>

颜色换黑色,可以得到下面的配置:

  <link name="right_wheel_link"><visual><origin xyz="0 0 0" rpy="1.57079 0 0"/><geometry><cylinder length="0.04" radius="0.032"/></geometry><material name="black"><color rgba="0.0 0.0 0.0 0.5" /> </material></visual></link>

2.2 添加joint

我们把左轮子的中心固定在机器人左后方

需要注意的是originaxis值的设置

先看origin

因为base_link的高度是0.12,我们

  • z表示child相对parent的z轴上的关系,想将轮子固定在机器人的下表面,所以origin的z向下偏移0.12/2=0.06m(向下符号为负)

  • y表示child相对parent的y轴上的关系,base_link的半径是0.10,所以我们让轮子的y轴向负方向偏移0.10m(向左符号为负)

  • x表示child相对parent的x轴上的关系,向后偏移则是x轴向后进行偏移,我们用个差不多的值0.02m(向后符号为负)

再看axis

轮子是会转动的,那应该按照哪个轴转动呢?从上图可以看出是绕着y轴的逆时针方向,所以axis的设置为:

<axis xyz="0 1 0" />

  <joint name="right_wheel_joint" type="continuous"><parent link="base_link" /><child link="right_wheel_link" /><origin xyz="-0.02 -0.10 -0.06" /><axis xyz="0 1 0" /></joint>

3.添加左轮

左轮就是右轮的映射,不再赘述

  <link name="left_wheel_link"><visual><origin xyz="0 0 0" rpy="1.57079 0 0"/><geometry><cylinder length="0.04" radius="0.032"/></geometry><material name="black"><color rgba="0.0 0.0 0.0 0.5" /> </material></visual></link><joint name="left_wheel_joint" type="continuous"><parent link="base_link" /><child link="left_wheel_link" /><origin xyz="-0.02 0.10 -0.06" /><axis xyz="0 1 0" /></joint>

4.添加支撑轮

支撑轮子固定在机器人的前方,用个球体,半径用0.016m,小球的直径为0.032m与左右轮子半径相同,然后向下偏移0.016+0.06=0.076m,向下值为负,同时把支撑论向前移动一些,选个0.06m

最终结果如下:

<link name="caster_link"><visual><origin xyz="0 0 0" rpy="0 0 0"/><geometry><sphere radius="0.016"/></geometry><material name="black"><color rgba="0.0 0.0 0.0 0.5" /> </material></visual></link><joint name="caster_joint" type="fixed"><parent link="base_link" /><child link="caster_link" /><origin xyz="0.06 0.0 -0.076" /></joint>

最终URDF文件:https://raw.githubusercontent.com/fishros/fishbot/master/src/fishbot_description/urdf/fishbot_base.urdf

5.测试运行

5.1 编译测试

colcon build
source install/setup.bash
ros2 launch fishbot_description display_rviz2.launch.py

5.2 最终结果

rviz的配置

最终结果

jointstate多出两个滑动条

节点关系

5.3 通过joint_state_gui改变关节tf中关节角度

在JointStatePublisher中,拖动滑动条,观察

  1. rviz2tf的变换

  2. joint_states中的值的变换

可以看到随着进度条拖动,话题中的值和rviz2中机器人关节在同步的旋转,joint_states话题也可以手动发送。

5.4 论如何让车轮着地

虽然显示出了机器人模型,但有一个问题不知道你发现没有,那就是在RVIZ中的机器人轮子是在地面之下的。

原因在于我们fixed-frame选择的是base_link,base_link的位置本来就在left_wheel_link和right_wheel_link只上,那该怎么办呢?

其实很简单,我们增加一个虚拟link和关节,这个关节与base_link相连,位置位于base_link向下刚好到车轮下表面的位置。

来,让我们**给base_link添加一个父link-base_footprint**,新增的URDF代码如下:

  <!-- Robot Footprint --><link name="base_footprint"/><joint name="base_joint" type="fixed"><parent link="base_footprint"/><child link="base_link"/><origin xyz="0.0 0.0 0.076" rpy="0 0 0"/></joint>

因为是虚拟关节,我们不用对这个link的形状进行描述,joint的origin设置为xyz="0.0 0.0 0.076"表示关节base_footprint向上0.076就是base_link(觉得不好理解可以看下图)。

保存编译再次运行测试,此时车轮就在地面只上啦~


http://www.ppmy.cn/server/153766.html

相关文章

3. Kafka入门—安装与基本命令

Kafka基础操作 一. 章节简介二. kafka简介三. Kafka安装1. 准备工作2. Zookeeper安装2.1 配置文件2.2 启动相关命令3. Kafka安装3.1 配置文件3.2 启动相关命令-------------------------------------------------------------------------------------------------------------…

基于PWLCM混沌映射的麋鹿群优化算法(Elk herd optimizer,EHO)的多无人机协同路径规划,MATLAB代码

一、麋鹿群优化算法EHO 基本概念 麋鹿群优化算法&#xff08;EHO&#xff0c;Elephant Herding Optimization&#xff09;是2024年提出的一种启发式优化算法&#xff0c;它的灵感来自麋鹿群的繁殖过程。麋鹿有两个主要的繁殖季节&#xff1a;发情和产犊。在发情季节&#xff0…

Unable to create data directory /var/lib/zookeeper/log/version-2

Unable to create data directory /var/lib/zookeeper/log/version-2 测试环境出现了这个问题&#xff0c;一开始是另外一个问题zookeeper无法写入日志&#xff0c;我以为坏掉了&#xff0c;就用docker rm&#xff0c; 然后docker run重新启动 结果还是不行&#xff0c;就把这…

短视频矩阵系统的视频批量剪辑源码技术开发,支持OEM

一、引言 在短视频蓬勃发展的时代&#xff0c;短视频矩阵系统成为了许多内容创作者和营销团队的得力助手。其中&#xff0c;视频批量剪辑功能尤为关键&#xff0c;它能够大幅提高视频制作效率&#xff0c;满足多平台、大规模内容分发的需求。本文将深入探讨短视频矩阵系统中视频…

chinahrt 题库

只针对 https://ouc-sz.chinahrt.com/center/MyExam import requests import time import random import pandas as pd from openpyxl import load_workbookexcel_file rC:\Users\N3verL4nd\Desktop\exam_answers.xlsx# 定义请求头&#xff0c;包含 Authorization headers {…

echarts进度仪表盘形式

const pointerData 55; // 仪表指针数据const steps 10; // 总共10个步骤 const borderColor {colorStops: [{offset: 0,color: rgba(208, 244, 255, 1)}, {offset: 1,color: rgba(35, 190, 240, 1)}] }; // 边框颜色// 使用数组和循环动态生成颜色数组 const axisLinecolor…

力扣-图论-20【算法学习day.70】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非…

前端的通信方式有哪些?比如子组件父组件间、子组件子组件间、其他等。。。

一、组件间通信 父组件与子组件 通过 Props&#xff08;单向数据流&#xff09; 父组件通过 props 将数据传递给子组件。 子组件不能直接修改父组件的状态&#xff0c;只能通过触发事件或回调通知父组件。适用场景&#xff1a; 父组件控制子组件的数据。 // 父组件 <Child…