【RVIZ+GAZEBO+URDF】 --- 1-1. 驱动机器人并查看

前言

  • 虽然在我们之前的例子中,看到gazebo和rviz都实现了相同的功能,但仍要知道的是:URDF 是创建机器人模型、Rviz 显示一些具体的传感器信息,Gazebo 用于仿真,可以模拟外界环境以及模拟传感器。
  • 本节实现:仍是前文实现的机器人,添加底盘的控制器动起来(对gazebo而言),用rviz查看里程计信息,用gazebo总体查看,控制台发布速度信息。
    沿用上一章的gazebo中的机器人
  1. 延用工作空间test2_ws;
  2. 功能包demo4_urdf_gazebo存放代码;
  3. 配置控制器的xacro代码放在demo4_urdf_gazebo/urdf/xacro/gazebo/move.xacro;
  4. 新的综合xacro文件放在demo4_urdf_gazebo/urdf/urdf/car_movexacro;
  5. 新的launch文件在demo4_urdf_gazebo/launch/car_move.launch;
  6. rviz的配置在demo4_urdf_gazebo/config/myrviz.rviz.
  7. 最后综合launch文件demo4_urdf_gazebo/launch/all.launch.

1、关键控制器xacro文件

在rviz中可以使用arbotix使机器人运动;
在gazebo中要用相关符合ros_control协议的xacro文件挑选控制器来仿真它的运动:

源码

move.xacro:

<robot name="my_car_move" xmlns:xacro="http://wiki.ros.org/xacro">

    <!-- joint -->
    <xacro:macro name="joint_trans" params="joint_name">
        <!-- Transmission is important to link the joints and the controller -->
        <transmission name="${joint_name}_trans">
            <type>transmission_interface/SimpleTransmission</type>
            <joint name="${joint_name}">
                <hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
            </joint>
            <actuator name="${joint_name}_motor">
                <hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
                <mechanicalReduction>1</mechanicalReduction>
            </actuator>
        </transmission>
    </xacro:macro>

    <xacro:joint_trans joint_name="left_wheel2base_link" />
    <xacro:joint_trans joint_name="right_wheel2base_link" />

    <!-- control -->
    <gazebo>
        <plugin name="differential_drive_controller" filename="libgazebo_ros_diff_drive.so">
            <rosDebugLevel>Debug</rosDebugLevel>
            <publishWheelTF>true</publishWheelTF>
            <robotNamespace>/</robotNamespace>
            <publishTf>1</publishTf>
            <publishWheelJointState>true</publishWheelJointState>
            <alwaysOn>true</alwaysOn>
            <updateRate>100.0</updateRate>
            <legacyMode>true</legacyMode>
            <leftJoint>left_wheel2base_link</leftJoint> 
            <rightJoint>right_wheel2base_link</rightJoint> 
            <wheelSeparation>${base_link_radius * 2}</wheelSeparation> 
            <wheelDiameter>${wheel_radius * 2}</wheelDiameter> 
            <broadcastTF>1</broadcastTF>
            <wheelTorque>30</wheelTorque>
            <wheelAcceleration>1.8</wheelAcceleration>
            <commandTopic>cmd_vel</commandTopic> 
            <odometryFrame>odom</odometryFrame> 
            <odometryTopic>odom</odometryTopic> 
            <robotBaseFrame>base_footprint</robotBaseFrame> 
        </plugin>
    </gazebo>

</robot>

关键语句:

<leftJoint>left_wheel2base_link</leftJoint> 
<rightJoint>right_wheel2base_link</rightJoint> 

<xacro:joint_trans joint_name="left_wheel2base_link" />
<xacro:joint_trans joint_name="right_wheel2base_link" />

记得名字一定要是自己的base.xacro文件中的驱动轮和底盘链接的joint名。
这里挑选的是两轮差速驱动控制器的代码进行改装。还有四轮以及其他传感器控制方式仿真另请参考: 链接.

2、重写综合xacro和launch

其实没有很大变化,只是加了move.xacro,launch中只是重新设置了启动的总文件。

xacro

car_move.xacro

<robot name="my_car_camera" xmlns:xacro="http://wiki.ros.org/xacro">
    <xacro:include filename="inertia.xacro" />
    <xacro:include filename="demo1_car_base.xacro" />
    <xacro:include filename="demo2_car_cam.xacro" />
    <xacro:include filename="demo3_car_laser.xacro" />

    <xacro:include filename="gazebo/move.xacro" />

</robot>

launch

car_move.launch

<launch>
    <!-- 将 Urdf 文件的内容加载到参数服务器 -->
    <param name="robot_description" command="$(find xacro)/xacro $(find demo4_urdf_gazebo)/urdf/xacro/car.xacro" />
    <!-- 启动 gazebo -->
    <include file="$(find gazebo_ros)/launch/empty_world.launch" >
            <arg name="world_name" value="$(find demo4_urdf_gazebo)/world/myworld.world" />
    </include>

    <!-- 在 gazebo 中显示机器人模型 -->
    <node pkg="gazebo_ros" type="spawn_model" name="model" args="-urdf -model mycar -param robot_description"  />
</launch>

关于rviz启动的launch文件

基本就是打开一个rviz,没有任何其他操作,然后添加odom,fixed frame,axes,robot等保存配置到myrviz.rviz再重改launch文件。
rviz.launch

<launch>
    <!-- 启动 rviz -->
    <node pkg="rviz" type="rviz" name="rviz" />

    <!-- 关节以及机器人状态发布节点 -->
    <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" />

</launch>

3.启动 展示 待改进

  1. 运行car_move.xacro综合gazebo文件,此时在话题列表中有cmd_vel速度话题,则证明控制器成功添加;
  2. 运行rviz的launch文件,做好配置后,机器人像gazebo中显示的;
  3. 向cmd_vel话题发速度信息,对机器人控制
rostopic pub -r 10 /cmd_vel geometry_msgs/Twist '{linear: {x: 0.2, y: 0, z: 0}, angular: {x: 0, y: 0, z: 0.5}}'

还可以用键盘控制机器人的运动,运行命令:

rosrun teleop_twist_keyboard teleop_twist_keyboard.py 

没有该包的话,sudo apd-get安装即可。

可以看到gazebo中和rviz中都成功显示。如图:

效果
改进:1-2-3可以写到一个launch文件中
这里只将1-2写入all.launch文件中,3可以写一个节点发布话题,然后launch文件中运行该节点,这里略。

all.launch内容:

<launch>

    <include    file="$(find demo4_urdf_gazebo)/launch/car_move.launch" />
    <include    file="$(find demo4_urdf_gazebo)/launch/rviz.launch" />
    
</launch>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值