日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ROS-URDF仿真

發(fā)布時間:2023/12/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ROS-URDF仿真 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言:URDF (標(biāo)準(zhǔn)化機(jī)器人描述格式),是一種用于描述機(jī)器人及其部分結(jié)構(gòu)、關(guān)節(jié)、自由度等的XML格式文件。

一、首先做一個帶有四個輪子的機(jī)器人底座。

1.1 新建urdf文件

在chapter4_tutorials/robot1_description/urdf文件夾下新建robot1.urdf文件,內(nèi)容如下:

<?xml version="1.0"?> <robot name="robot1"> <link name="base_link"><visual><geometry><box size="0.2 .3 .1"/></geometry><origin rpy="0 0 0" xyz="0 0 0.05"/><material name="white"><color rgba="1 1 1 1"/></material></visual><collision><geometry><box size="0.2 .3 0.1"/></geometry></collision><inertial><mass value="100"/><inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/></inertial> </link><link name="wheel_1"><visual><geometry><cylinder length="0.05" radius="0.05"/></geometry><origin rpy="0 1.5 0" xyz="0.1 0.1 0"/><material name="black"><color rgba="0 0 0 1"/></material></visual><collision><geometry><cylinder length="0.05" radius="0.05"/></geometry></collision><inertial><mass value="10"/><inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/></inertial></link><link name="wheel_2"><visual><geometry><cylinder length="0.05" radius="0.05"/></geometry><origin rpy="0 1.5 0" xyz="-0.1 0.1 0"/><material name="black"/></visual><collision><geometry><cylinder length="0.05" radius="0.05"/></geometry></collision><inertial><mass value="10"/><inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/></inertial></link><link name="wheel_3"><visual><geometry><cylinder length="0.05" radius="0.05"/></geometry><origin rpy="0 1.5 0" xyz="0.1 -0.1 0"/><material name="black"/></visual><collision><geometry><cylinder length="0.05" radius="0.05"/></geometry></collision><inertial><mass value="10"/><inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/></inertial></link><link name="wheel_4"><visual><geometry><cylinder length="0.05" radius="0.05"/></geometry><origin rpy="0 1.5 0" xyz="-0.1 -0.1 0"/><material name="black"/></visual><collision><geometry><cylinder length="0.05" radius="0.05"/></geometry></collision><inertial><mass value="10"/><inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/></inertial></link><joint name="base_to_wheel1" type="fixed"><parent link="base_link"/><child link="wheel_1"/><origin xyz="0 0 0"/></joint><joint name="base_to_wheel2" type="fixed"><parent link="base_link"/><child link="wheel_2"/><origin xyz="0 0 0"/></joint><joint name="base_to_wheel3" type="fixed"><parent link="base_link"/><child link="wheel_3"/><origin xyz="0 0 0"/></joint><joint name="base_to_wheel4" type="fixed"><parent link="base_link"/><child link="wheel_4"/><origin xyz="0 0 0"/></joint> </robot>

解析:urdf文件主要有l(wèi)ink和joint組成。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

<robot name="robot1">? ?機(jī)器人標(biāo)簽,機(jī)器人名字為robot1? ? ? ? ? ? ? ? ? ? ?

<link name="base_link">? 連桿標(biāo)簽,連桿名字為base_link

<visual>? 可視化屬性

<geometry>? 形狀

<box size="0.2 .3 .1"/>? ?方形,尺寸為0.2m*0.3m*1m

<origin rpy="0 0 0" xyz="0 0 0.05"/>? 起點(diǎn)位置無位移,繞z軸旋轉(zhuǎn)。

<material name="white">? 材料名稱為白色

<color rgba="1 1 1 1"/>? 顏色屬性為1 1 1 1?

<collision>??

<inertial>

<mass value="100"/>

<inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>

<joint name="base_to_wheel1" type="fixed">? joint標(biāo)簽,關(guān)節(jié)名稱為base_to_wheel1,類型為固定。continuous為繞某一軸旋轉(zhuǎn)

<parent link="base_link"/>? 父連桿是base_link

<child link="wheel_1"/>子連桿是wheel_1

<origin xyz="0 0 0"/>? ?起點(diǎn)位置無偏移。注:這里的起點(diǎn)是相對與父連桿的位置,并不是絕對坐標(biāo)。

?為了檢查書寫的語法是否正確和配置是否有誤,可以使用語法檢查工具

check_urdf robot1.urdf

?-------------------------------------------

顯示如下:

robot name is: Robot1
---------- Successfully Parsed XML ---------------
root Link: base_link has 4 child(ren)
child(1): wheel1
child(2): wheel2
child(3): wheel3
child(4): wheel4

查詢工具(可選)

使用urdf_to_graphiz命令工具:

urdf_to_graphiz robot1.urdf

生成兩個文件:robot1.pdf和robot1.gv

直接查看robot1.pdf或者使用命令:

evince Robot1.pdf

?-------------------------------------------

顯示如下:

1.2 在rviz里查看3D模型

新建launch文件

在robot_description/launch文件夾下新建display.launch文件,代碼如下:

<?xml version="1.0"?> <launch><arg name="model" /><arg name="gui" default="False" /><param name="robot_description" textfile="$(arg model)" /><param name="use_gui" value="$(arg gui)"/><node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" /><node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" /><node name="rviz" pkg="rviz" type="rviz" args="-d $(find urdf_tutorial)/urdf.rviz" /> </launch>

運(yùn)行l(wèi)aunch文件?

roslaunch chapter4_tutorials display.launch model:=/home/cdq/dev/catkin_ws/src/chapter4_tutorials/robot1_description/robot1.urdf

注意:不要把冒號和等號寫反了,文件位置信息可以把文件直接拖進(jìn)終端就會顯示出來。

--------------------------------------------

顯示如下:

默認(rèn)狀態(tài)下畫面中什么都沒有,此時需要做出調(diào)整。

在左下角的add按鈕中添加RobotModel,然后將Fixed Frame選為base_link

?

?

?二、添加基座臂、連接臂和夾持臂

2.1 補(bǔ)充urdf文件

在</robot>前增添以下代碼:

<link name="arm_base"> <visual> <geometry> <box size="0.1 .1 .1"/> </geometry> <origin rpy="0 0 0" xyz="0 0 0.1"/> <material name="white"> <color rgba="1 1 1 1"/> </material> </visual> <collision> <geometry> <box size="0.1 .1 .1"/> </geometry> </collision> <inertial> <mass value="1"/> <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/> </inertial> </link> <joint name="base_to_arm_base" type="continuous"> <parent link="base_link"/> <child link="arm_base"/> <axis xyz="0 0 1"/> <origin xyz="0 0 0"/> </joint> <link name="arm_1"> <visual> <geometry> <box size="0.05 .05 0.5"/> </geometry> <origin rpy="0 0 0" xyz="0 0 0.25"/> <material name="white"> <color rgba="1 1 1 1"/> </material> </visual> <collision> <geometry> <box size="0.05 .05 0.5"/> </geometry> </collision> <inertial> <mass value="1"/> <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/> </inertial> </link> <joint name="arm_1_to_arm_base" type="revolute"> <parent link="arm_base"/> <child link="arm_1"/> <axis xyz="1 0 0"/> <origin xyz="0 0 0.15"/> <limit effort ="1000.0" lower="-1.0" upper="1.0" velocity="0.5"/> </joint> <link name="arm_2"> <visual> <geometry> <box size="0.05 0.05 0.5"/> </geometry> <origin rpy="0 0 0" xyz="0.06 0 0.15"/> <material name="white"> <color rgba="1 1 1 1"/> </material> </visual> <collision> <geometry> <box size="0.05 .05 0.5"/> </geometry> </collision> <inertial> <mass value="1"/> <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/> </inertial> </link> <joint name="arm_2_to_arm_1" type="revolute"> <parent link="arm_1"/> <child link="arm_2"/> <axis xyz="1 0 0"/> <origin xyz="0.0 0 0.45"/> <limit effort ="1000.0" lower="-2.5" upper="2.5" velocity="0.5"/> </joint> <joint name="left_gripper_joint" type="revolute"> <axis xyz="0 0 1"/> <limit effort="1000.0" lower="0.0" upper="0.548" velocity="0.5"/> <origin rpy="0 -1.57 0" xyz="0.06 0 0.4"/> <parent link="arm_2"/> <child link="left_gripper"/> </joint> <link name="left_gripper"> <visual> <origin rpy="0 0 0" xyz="0 0 0"/> <geometry> <mesh filename="package://pr2_description/meshes/gripper_v0/l_finger.dae"/> </geometry> </visual> <collision> <geometry> <box size="0.1 .1 .1"/> </geometry> </collision> <inertial> <mass value="1"/> <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/> </inertial> </link> <joint name="left_tip_joint" type="fixed"> <parent link="left_gripper"/> <child link="left_tip"/> </joint> <link name="left_tip"> <visual> <origin rpy="0.0 0 0" xyz="0.09137 0.00495 0"/> <geometry> <mesh filename="package://pr2_description/meshes/gripper_v0/l_finger_tip.dae"/> </geometry> </visual> <collision> <geometry> <box size="0.1 .1 .1"/> </geometry> </collision> <inertial> <mass value="1"/> <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/> </inertial> </link> <joint name="right_gripper_joint" type="revolute"> <axis xyz="0 0 -1"/> <limit effort="1000.0" lower="0.0" upper="0.548" velocity="0.5"/> <origin rpy="0 -1.57 0" xyz="0.06 0 0.4"/> <parent link="arm_2"/> <child link="right_gripper"/> </joint> <link name="right_gripper"> <visual> <origin rpy="-3.1415 0 0" xyz="0 0 0"/> <geometry> <mesh filename="package://pr2_description/meshes/gripper_v0/l_finger.dae"/> </geometry> </visual> <collision> <geometry> <box size="0.1 .1 .1"/> </geometry> </collision> <inertial> <mass value="1"/> <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/> </inertial> </link> <joint name="right_tip_joint" type="fixed"> <parent link="right_gripper"/> <child link="right_tip"/> </joint> <link name="right_tip"> <visual> <origin rpy="-3.1415 0 0" xyz="0.09137 0.00495 0"/> <geometry> <mesh filename="package://pr2_description/meshes/gripper_v0/l_finger_tip.dae"/> </geometry> </visual> <collision> <geometry> <box size="0.1 .1 .1"/> </geometry> </collision> <inertial> <mass value="1"/> <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/> </inertial> </link>

2.2 顯示3D圖形

roslaunch chapter4_tutorials display.launch model:=/home/cdq/dev/catkin_ws/src/chapter4_tutorials/robot1_description/urdf/robot1.urdf  

-----------------------------------------

如果終端顯示錯誤:

[rospack] Error: package 'pr2_description' not found........

?則需要安裝pr2模型文件

sudo apt-get install ros-kinetic-pr2-common

-----------------------------------------

如果顯示如下警告,請忽視,程序正常運(yùn)行:

libGL error: failed to create drawable
TIFFFieldWithTag: Internal error, unknown tag 0x829a.
TIFFFieldWithTag: Internal error, unknown tag 0x829d.
TIFFFieldWithTag: Internal error, unknown tag 0x8822.

......

2.3 使機(jī)器人運(yùn)動?

配合joint_state_publisher,調(diào)用gui功能:

roslaunch chapter4_tutorials display.launch model:=/home/cdq/dev/catkin_ws/src/chapter4_tutorials/robot1_description/urdf/robot1.urdf gui:=ture

--------------------------------------------------

顯示如下:

urdf文件中每一個axis對應(yīng)一個調(diào)節(jié)器,joint_state_publisher應(yīng)該是ros中自帶的調(diào)節(jié)joint的功能,所以直接調(diào)用就可以。

如在arm_1_to_arm_base上所使用的限制通過<limit effort="1000.0"lower="-1.0"upper="1.0"velocity="0.5"/>這一行設(shè)置,可以用axis xyz="100"選擇轉(zhuǎn)動軸來運(yùn)動。

<limit>標(biāo)簽用于選擇以下屬性:

effort(關(guān)節(jié)所承受的最大力),lower(賦值給關(guān)節(jié)的下限,旋轉(zhuǎn)關(guān)節(jié)的單位是弧度,移動關(guān)節(jié)的單位是米),upper(賦值給關(guān)節(jié)的上限),velocity(強(qiáng)制關(guān)節(jié)的最大速度)。

?-END-?

轉(zhuǎn)載于:https://www.cnblogs.com/chendeqiang/p/10205874.html

總結(jié)

以上是生活随笔為你收集整理的ROS-URDF仿真的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。