继上一篇基础篇的结束,不用看以前的也可以,这里是不受前面的影响的。
如果你没有这个目录,就创建一个catkin_ws文件夹 然后里面再一个src文件夹就ok了,我在基础篇第一篇的时候就有这个文件夹了,所有我现在是直接进入
cd ~/catkin_ws/src/
catkin_create_pkg abot_description URDF xacro
进入abot_description目录里面
创建目录
mkdir URDF meshes launch config
解释:
URDF:存放机器人模型的 URDF 或 xacro 文件
meshes:放置 URDF 中引用的模型渲染文件
launch:保存相关启动文件
config:保存 rviz的配置文件
进入abot_description文件夹,然后vim abot_URDF.urdf 文件
复制代码,粘贴
<?xml version="1.0"?>
<robot name="abot">
<link name="base_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<box size="0.30 0.25 0.15"/>
</geometry>
<material name="yellow">
<color rgba="1 0.4 0 1"/>
</material>
</visual>
</link>
</robot>
按esc 输入:wq 保存退出
退回上级目录,进入launch 目录,输入 vim abot.launch 文件,复制代码粘贴。
<launch>
<param name="robot_description" textfile="$(find abot_description)/URDF/abot_URDF.urdf" />
<!--设置 GUI 参数,显示关节控制插件 -->
<param name="use_gui" value="true"/>
<!-- 运动 joint_state_publisher 节点,发布机器人关节状态 -->
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
<!-- 运行 robot_state_publisher 节点,发布 TF -->
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
</launch>
先执行命令。不然报错,没有package,如果不能执行命令,下载,就重启一下虚拟机吧,然后再下载。
sudo apt-get install ros-melodic-joint-*
然后再运行launch文件
roslaunch abot_description abot.launch
然后运行:
rosrun rviz rviz
复制代码,覆盖掉abot.launch 文件
<launch>
<param name="robot_description" textfile="$(find abot_description)/URDF/abot_URDF.urdf" />
<!--设置 GUI 参数,显示关节控制插件 -->
<param name="use_gui" value="true"/>
<!-- 运动 joint_state_publisher 节点,发布机器人关节状态 -->
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
<!-- 运行 robot_state_publisher 节点,发布 TF -->
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find abot_description)/config/abot.rviz" required="true" />
</launch>
执行命令:
两个终端。roscore 是一直运行的,终端分别执行两个命令
roscore
roslaunch abot_description abot.launch
效果:
编辑urdf 机器人模型文件
在 URDF 中添加机器人驱动轮,我给的是全部的代码,要么覆盖,要么选择复制
<?xml version="1.0"?>
<robot name="abot">
<link name="base_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<box size="0.30 0.25 0.15"/>
</geometry>
<material name="yellow">
<color rgba="1 0.4 0 1"/>
</material>
</visual>
</link>
<link name="left_front_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0"/>
<geometry>
<cylinder radius="0.04" length="0.025"/>
</geometry>
<material name="white">
<color rgba="1 1 1 0.9"/>
</material>
</visual>
</link>
<joint name="left_front_joint" type="continuous">
<origin xyz="0.10 0.15 -0.05" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="left_front_link"/>
<axis xyz="0 1 0"/>
</joint>
</robot>
然后按esc 输入:wq 保存退出
继续编辑urdf文件,添加另外的3个文件,我给出完整的文件了,直接复制,然后覆盖文件就可以了
<?xml version="1.0"?>
<robot name="abot">
<link name="base_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<box size="0.30 0.25 0.15"/>
</geometry>
<material name="yellow">
<color rgba="1 0.4 0 1"/>
</material>
</visual>
</link>
<link name="left_front_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0"/>
<geometry>
<cylinder radius="0.04" length="0.025"/>
</geometry>
<material name="white">
<color rgba="1 1 1 0.9"/>
</material>
</visual>
</link>
<joint name="left_front_joint" type="continuous">
<origin xyz="0.10 0.15 -0.05" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="left_front_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="left_back_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0"/>
<geometry>
<cylinder radius="0.04" length="0.025"/>
</geometry>
<material name="white">
<color rgba="1 1 1 0.9"/>
</material>
</visual>
</link>
<joint name="left_back_joint" type="continuous">
<origin xyz="-0.10 0.15 -0.05" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="left_back_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="right_front_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0"/>
<geometry>
<cylinder radius="0.04" length="0.025"/>
</geometry>
<material name="white">
<color rgba="1 1 1 0.9"/>
</material>
</visual>
</link>
<joint name="right_front_joint" type="continuous">
<origin xyz="0.10 -0.15 -0.05" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="right_front_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="right_back_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0"/>
<geometry>
<cylinder radius="0.04" length="0.025"/>
</geometry>
<material name="white">
<color rgba="1 1 1 0.9"/>
</material>
</visual>
</link>
<joint name="right_back_joint" type="continuous">
<origin xyz="-0.10 -0.15 -0.05" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="right_back_link"/>
<axis xyz="0 1 0"/>
</joint>
</robot>
执行命令:
roslaunch abot_description abot.launch
在 URDF 中添加传感器(激光雷达和摄像头)
cp abot_URDF.urdf abot_with_laser.urdf
复制代码,直接覆盖abot_with_laser.urdf 文件,我已经弄好了的,自己弄进去应该会吧?shift+insert 粘贴
<?xml version="1.0"?>
<robot name="abot">
<link name="base_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<box size="0.30 0.25 0.15"/>
</geometry>
<material name="yellow">
<color rgba="1 0.4 0 1"/>
</material>
</visual>
</link>
<link name="left_front_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0"/>
<geometry>
<cylinder radius="0.04" length="0.025"/>
</geometry>
<material name="white">
<color rgba="1 1 1 0.9"/>
</material>
</visual>
</link>
<joint name="left_front_joint" type="continuous">
<origin xyz="0.10 0.15 -0.05" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="left_front_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="left_back_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0"/>
<geometry>
<cylinder radius="0.04" length="0.025"/>
</geometry>
<material name="white">
<color rgba="1 1 1 0.9"/>
</material>
</visual>
</link>
<joint name="left_back_joint" type="continuous">
<origin xyz="-0.10 0.15 -0.05" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="left_back_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="right_front_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0"/>
<geometry>
<cylinder radius="0.04" length="0.025"/>
</geometry>
<material name="white">
<color rgba="1 1 1 0.9"/>
</material>
</visual>
</link>
<joint name="right_front_joint" type="continuous">
<origin xyz="0.10 -0.15 -0.05" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="right_front_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="right_back_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0"/>
<geometry>
<cylinder radius="0.04" length="0.025"/>
</geometry>
<material name="white">
<color rgba="1 1 1 0.9"/>
</material>
</visual>
</link>
<joint name="right_back_joint" type="continuous">
<origin xyz="-0.10 -0.15 -0.05" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="right_back_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="laser_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<cylinder radius="0.04" length="0.040"/>
</geometry>
<material name="black">
<color rgba="0 0 0 0.95"/>
</material>
</visual>
</link>
<joint name="laser_joint" type="fixed">
<origin xyz="0 0 0.09" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="laser_link"/>
</joint>
</robot>
退出上一个目录,进入launch 目录 执行命令:
cp abot.launch abot_with_laser.launch
复制以下的代码,复制这个abot_with_laser.launch 文件
<launch>
<param name="robot_description" textfile="$(find abot_description)/URDF/abot_with_laser.urdf" />
<!--设置 GUI 参数,显示关节控制插件 -->
<param name="use_gui" value="true"/>
<!-- 运动 joint_state_publisher 节点,发布机器人关节状态 -->
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
<!-- 运行 robot_state_publisher 节点,发布 TF -->
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find abot_description)/config/abot.rviz" required="true" />
</launch>
执行命令:
roslaunch abot_description abot_with_laser.launch
继续,回到上一级目录进入URDF目录,我们再做一个urdf文件是有摄像头的,这里我给出全部的代码了。直接复制粘贴就好了。这次我们使用gedit 命令来编辑文件,可能需要等一点时间,这个比较慢
<?xml version="1.0"?>
<robot name="abot">
<link name="base_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<box size="0.30 0.25 0.15"/>
</geometry>
<material name="yellow">
<color rgba="1 0.4 0 1"/>
</material>
</visual>
</link>
<link name="left_front_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0"/>
<geometry>
<cylinder radius="0.04" length="0.025"/>
</geometry>
<material name="white">
<color rgba="1 1 1 0.9"/>
</material>
</visual>
</link>
<joint name="left_front_joint" type="continuous">
<origin xyz="0.10 0.15 -0.05" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="left_front_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="left_back_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0"/>
<geometry>
<cylinder radius="0.04" length="0.025"/>
</geometry>
<material name="white">
<color rgba="1 1 1 0.9"/>
</material>
</visual>
</link>
<joint name="left_back_joint" type="continuous">
<origin xyz="-0.10 0.15 -0.05" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="left_back_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="right_front_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0"/>
<geometry>
<cylinder radius="0.04" length="0.025"/>
</geometry>
<material name="white">
<color rgba="1 1 1 0.9"/>
</material>
</visual>
</link>
<joint name="right_front_joint" type="continuous">
<origin xyz="0.10 -0.15 -0.05" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="right_front_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="right_back_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0"/>
<geometry>
<cylinder radius="0.04" length="0.025"/>
</geometry>
<material name="white">
<color rgba="1 1 1 0.9"/>
</material>
</visual>
</link>
<joint name="right_back_joint" type="continuous">
<origin xyz="-0.10 -0.15 -0.05" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="right_back_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="camera_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 1.5707"/>
<geometry>
<box size="0.04 0.015 0.04"/>
</geometry>
<material name="black">
<color rgba="0 0 0 0.9"/>
</material>
</visual>
</link>
<joint name="camera_joint" type="fixed">
<origin xyz="0.13 0 0.09" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="camera_link"/>
</joint>
</robot>
cp abot_URDF.urdf abot_with_camera.urdf
记得保存crtl+s
继续回到上一级目录,进入launch目录,然后执行命令,拷贝一个文件,填入下面的代码
<launch>
<param name="robot_description" textfile="$(find abot_description)/URDF/abot_with_camera.urdf" />
<!--设置 GUI 参数,显示关节控制插件 -->
<param name="use_gui" value="true"/>
<!-- 运动 joint_state_publisher 节点,发布机器人关节状态 -->
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
<!-- 运行 robot_state_publisher 节点,发布 TF -->
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find abot_description)/config/abot.rviz" required="true" />
</launch>
然后执行代码
roslaunch abot_description abot_with_camera.launch
好了。记得给虚拟机拍摄快照哦。以后就可以回到这里了。如果后面的代码搞错了的话。