700|0

15

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

ROS2智能机器人开发实践-阅读分享9-机器人建模仿真 [复制链接]

 

ROS2智能机器人开发实践-阅读分享9-机器人建模仿真

首先我们要清楚建模和仿真并不是直接关联的,因为仿真使用的是单独的gazeboo,我们可以只建模不仿真这是完全没有问题的。
再建模中我们可以使用urdf文件
先新建一个工作包空间(c和python类型都行,因为不需要写代码只需要launch发布节点就行)
root@ubuntu:~/dev_ws_voice/src# ros2 pkg create mycar_description --build-type ament_cmake
在urdf里面分为连杆和关节,连杆可以通过关节来定义位置,并且关节之间的位置会被一些节点以tf形式发出。我们这里来建模一个麦克纳姆轮小车和一个摄像头(建模比较简单,大家感兴趣细节可以前往图书观看参数细节)
<?xml version="1.0" ?>
<!-- 定义一下这个urdf的名字 -->
<robot name="wheeltec_robot">
<!-- link也称作连杆 -->
<link name="base_link">
<visual>
<!-- 基座坐标可以高一点-->
<origin xyz=" 0 0 0.05" rpy="0 0 0" />
<geometry>
<box size="0.4 0.26 0.03"/>
</geometry>
<material name="white">
<color rgba="1 1 1 1"/>
</material>
</visual>
</link>

<!--关节-->
<!--关节是连接两个连杆之间的关系-->
<joint name="left_wheel_joint" type="continuous">
<origin xyz="-0.15 0.15 0.05" rpy="1.57 0 0"/>
<parent link="base_link"/>
<child link="left_wheel_link"/>
<axis xyz="0 1 0"/>
<!--定义关节旋转轴为y轴-->
</joint>

<link name="left_wheel_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<cylinder radius="0.1" length = "0.04"/>
</geometry>
<material name="black">
<color rgba="0 0 0 1"/>
</material>
</visual>
</link>

<joint name="right_wheel_joint" type="continuous">
<origin xyz="-0.15 -0.15 0.05" rpy="1.57 0 0"/>
<parent link="base_link"/>
<child link="right_wheel_link"/>
<axis xyz="0 1 0"/>
</joint>

<link name="right_wheel_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<cylinder radius="0.1" length = "0.04"/>
</geometry>
<material name="black">
<color rgba="0 0 0 1"/>
</material>
</visual>
</link>

<joint name="left_front_joint" type="continuous">
<origin xyz="0.15 0.15 0.05" rpy="1.57 0 0"/>
<parent link="base_link"/>
<child link="left_front_link"/>
<axis xyz="0 1 0"/>
</joint>

<link name="left_front_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<cylinder radius="0.1" length = "0.04"/>
</geometry>
<material name="black">
<color rgba="0 0 0 1"/>
</material>
</visual>
</link>

<joint name="right_front_joint" type="continuous">
<origin xyz="0.15 -0.15 0.05" rpy="1.57 0 0"/>
<parent link="base_link"/>
<child link="right_front_link"/>
<axis xyz="0 1 0"/>
</joint>

<link name="right_front_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<cylinder radius="0.1" length = "0.04"/>
</geometry>
<material name="black">
<color rgba="0 0 0 1"/>
</material>
</visual>
</link>

<!--除了几个轮子我这里还需要添加我的单目摄像头在前面-->
<joint name="camera_joint" type="fixed">
<origin xyz="0.2 0 0.05" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="camera_link"/>
</joint>

<link name="camera_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<box size="0.02 0.08 0.06"/>
</geometry>
<material name="blue">
<color rgba="0 0 1 1"/>
</material>
</visual>
</link>

</robot>
写完urdf文件之后,我们需要启动两个节点来使用功能包进行转化,我们在这个工作包下的launch文件夹下面新建一mycar.launch.py(名字自己起).
import os
from launch import LaunchDescription
from launch.substitutions import LaunchConfiguration
from launch_ros.actions import Node
from launch_ros.substitutions import FindPackageShare


def generate_launch_description():
package_name = 'mycar_description'
urdf_name = "mycar.urdf"

ld = LaunchDescription()
pkg_share = FindPackageShare(package=package_name).find(package_name)
urdf_model_path = os.path.join(pkg_share, f'urdf/{urdf_name}')

#发布joint_state话题
robot_state_publisher_node = Node(
package='robot_state_publisher',
executable='robot_state_publisher',
name='robot_state_publisher',
arguments=[urdf_model_path]
)

# 这个通常和urdf在一起发布一些joint
# 这个节点读取joint_states (sensor_msgs/JointState)然后转换转换成tf
# 可能开发者忘记删除了
# 具体作用可以查看ros2的wiki
# http://wiki.ros.org/joint_state_publisher
joint_state_publisher_node = Node(
package='joint_state_publisher',
executable='joint_state_publisher',
name='joint_state_publisher',
)

ld.add_action(robot_state_publisher_node)
ld.add_action(joint_state_publisher_node)

return ld
然后我们需要在cmakelist2把我们的文件复制到install里面
install(DIRECTORY launch urdf
DESTINATION share/${PROJECT_NAME}
)
随后编译执行就行了
colcon build
source install/setup.bash
ros2 launch (自己填)
打开虚拟机可以看一下 topic然后打开rviz2之后添加一下tf就可以了。

查看本帖全部内容,请登录或者注册
点赞 关注(1)
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

关闭
站长推荐上一条 1/10 下一条
【有奖直播】2025是德科技数字月-数字新品来助阵
直播时间:3月19日(周三)14:00
直播奖励:小米口红充电宝、倍思充电线、是德科技十周年鼠标垫

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表