ROS探索总结(二十四)——使用gazebo中的插件

  • 内容
  • 评论
  • 相关

URDF文件完成后,可以在rviz中显示机器人的模型,如果要在gazebo中进行物理环境仿真,还需要为URDF文件加入一些gazebo相关的标签。既然是仿真,那么机器人应该像真在真实环境中一样,可以通过传感器感知周围环境,还可以根据指令进行运动。

gazebo中可以通过插入一些插件,来仿真机器人的传感器、执行器的特性,这些插件通过<gazebo>元素中的<plugin>标签描述,使用下边的格式加入到URDF文件中:

  1. <gazebo>
  2.   <plugin name="differential_drive_controller" filename="libdiffdrive_plugin.so">
  3.     ... plugin parameters ...
  4.   </plugin>
  5. </gazebo>

当然,这些插件常常需要附着于机器人的某个部分,比如要加入一个激光传感器的插件,那么我们需要将这个插件与机器人模型中的激光传感器link绑定:

  1. <gazebo reference="your_link_name">
  2.   <plugin name="your_link_laser_controller" filename="libgazebo_ros_laser.so">
  3.     ... plugin parameters ...
  4.   </plugin>
  5. </gazebo>

gazebo默认支持不少常用的设备,可以找到ros安装目录中的gazebo_plugins功能包,里边就是所有支持的插件。当然,你也可以自己编写需要的gazebo插件。

下边列出一些常用插件的使用方法:

1.差速驱动插件

很多机器人本体都采用差速驱动的方式,gazebo提供差速机器人的仿真插件,可以直接将下边的代码放到URDF文件中,修改相应的参数,指定运动控制需要订阅的主题,让机器人在gazebo中动起来。

  1. <gazebo>
  2.   <plugin name="differential_drive_controller" filename="libgazebo_ros_diff_drive.so">
  3.     <alwaysOn>true</alwaysOn>
  4.     <updateRate>${update_rate}</updateRate>
  5.     <leftJoint>base_link_right_wheel_joint</leftJoint>
  6.     <rightJoint>base_link_left_wheel_joint</rightJoint>
  7.     <wheelSeparation>0.5380</wheelSeparation>
  8.     <wheelDiameter>0.2410</wheelDiameter>
  9.     <torque>20</torque>
  10.     <commandTopic>cmd_vel</commandTopic>
  11.     <odometryTopic>odom</odometryTopic>
  12.     <odometryFrame>odom</odometryFrame>
  13.     <robotBaseFrame>base_footprint</robotBaseFrame>
  14.   </plugin>
  15. </gazebo>

2.摄像头

   gazebo中也可以让机器人的摄像头看到虚拟的环境,将下边的代码放到URDF文件中,“reference”修改成机器人的摄像头link,还有一些分辨率、刷新率、发布的图像主题等等参数。把机器人模型在gazebo中运行起来后,用image_view或者rviz就可以看到机器人在虚拟环境中的视野了。

  1. <!-- camera -->
  2.   <gazebo reference="camera_link">
  3.     <sensor type="camera" name="camera1">
  4.       <update_rate>30.0</update_rate>
  5.       <camera name="head">
  6.         <horizontal_fov>1.3962634</horizontal_fov>
  7.         <image>
  8.           <width>800</width>
  9.           <height>800</height>
  10.           <format>R8G8B8</format>
  11.         </image>
  12.         <clip>
  13.           <near>0.02</near>
  14.           <far>300</far>
  15.         </clip>
  16.         <noise>
  17.           <type>gaussian</type>
  18.           <!-- Noise is sampled independently per pixel on each frame.
  19.                That pixel's noise value is added to each of its color
  20.                channels, which at that point lie in the range [0,1]. -->
  21.           <mean>0.0</mean>
  22.           <stddev>0.007</stddev>
  23.         </noise>
  24.       </camera>
  25.       <plugin name="camera_controller" filename="libgazebo_ros_camera.so">
  26.         <alwaysOn>true</alwaysOn>
  27.         <updateRate>0.0</updateRate>
  28.         <cameraName>rrbot/camera1</cameraName>
  29.         <imageTopicName>image_raw</imageTopicName>
  30.         <cameraInfoTopicName>camera_info</cameraInfoTopicName>
  31.         <frameName>camera_link</frameName>
  32.         <hackBaseline>0.07</hackBaseline>
  33.         <distortionK1>0.0</distortionK1>
  34.         <distortionK2>0.0</distortionK2>
  35.         <distortionK3>0.0</distortionK3>
  36.         <distortionT1>0.0</distortionT1>
  37.         <distortionT2>0.0</distortionT2>
  38.       </plugin>
  39.     </sensor>
  40.   </gazebo>

     我们来解释一下这个插件中的参数含义:

  1.   <gazebo reference="camera_link">

插件都是用来描述linkjoint的,是一种虚无的属性描述,需要关联相应的实体,所以首先我们需要通过reference参数来定义关联的link或者joint。这里我们关联的是camera_link

  1. <sensor type="camera" name="camera1">

       然后声明插件的类型,并为该插件取一个唯一的名称。

  1. <update_rate>30.0</update_rate>

       设置摄像头数据更新的最大频率。

  1.         <horizontal_fov>1.3962634</horizontal_fov>
  2.         <image>
  3.           <width>800</width>
  4.           <height>800</height>
  5.           <format>R8G8B8</format>
  6.         </image>
  7.         <clip>
  8.           <near>0.02</near>
  9.           <far>300</far>
  10.         </clip>

再来设置一些摄像头相关的参数,尽量让这些仿真的参数与实际使用的硬件相同。

  1. <plugin name="camera_controller" filename="libgazebo_ros_camera.so">

关联摄像头插件,该插件已经在gazebo中实现,所以直接关联即可。

  1.         <cameraName>rrbot/camera1</cameraName>
  2.         <imageTopicName>image_raw</imageTopicName>
  3.         <cameraInfoTopicName>camera_info</cameraInfoTopicName>
  4.         <frameName>camera_link</frameName>

声明摄像头发布的消息话题,以及数据所在的参考系。

clip_image002[4]

clip_image004[4]

3.Kinect

Kinect在机器人导航中用的也很多,为机器人的kinect link绑定这个kinect插件,我们就可以在gazebo中进行SLAM、导航了,对于一些初学者,就算没有实体机器人,也可以在仿真器中玩转机器人。

  1. <gazebo>
  2.   <plugin name="${link_name}_controller" filename="libgazebo_ros_openni_kinect.so">
  3.     <baseline>0.2</baseline>
  4.     <alwaysOn>true</alwaysOn>
  5.     <updateRate>1.0</updateRate>
  6.     <cameraName>${camera_name}_ir</cameraName>
  7.     <imageTopicName>/${camera_name}/depth/image_raw</imageTopicName>
  8.     <cameraInfoTopicName>/${camera_name}/depth/camera_info</cameraInfoTopicName>
  9.     <depthImageTopicName>/${camera_name}/depth/image_raw</depthImageTopicName>
  10.     <depthImageInfoTopicName>/${camera_name}/depth/camera_info</depthImageInfoTopicName>
  11.     <pointCloudTopicName>/${camera_name}/depth/points</pointCloudTopicName>
  12.     <frameName>${frame_name}</frameName>
  13.     <pointCloudCutoff>0.5</pointCloudCutoff>
  14.     <distortionK1>0.00000001</distortionK1>
  15.     <distortionK2>0.00000001</distortionK2>
  16.     <distortionK3>0.00000001</distortionK3>
  17.     <distortionT1>0.00000001</distortionT1>
  18.     <distortionT2>0.00000001</distortionT2>
  19.     <CxPrime>0</CxPrime>
  20.     <Cx>0</Cx>
  21.     <Cy>0</Cy>
  22.     <focalLength>0</focalLength>
  23.     <hackBaseline>0</hackBaseline>
  24.   </plugin>
  25. </gazebo>

4.激光

有没有感叹过激光传感器太贵了!现在不要9999,不要999,只要把激光传感器的插件放到URDF模型中,上万的激光传感器在gazebo里随便用,妈妈再也不用担心玩机器人败家了。

  1. <gazebo reference="hokuyo_link">
  2.     <sensor type="ray" name="head_hokuyo_sensor">
  3.       <pose>0 0 0 0 0 0</pose>
  4.       <visualize>false</visualize>
  5.       <update_rate>40</update_rate>
  6.       <ray>
  7.         <scan>
  8.           <horizontal>
  9.             <samples>720</samples>
  10.             <resolution>1</resolution>
  11.             <min_angle>-1.570796</min_angle>
  12.             <max_angle>1.570796</max_angle>
  13.           </horizontal>
  14.         </scan>
  15.         <range>
  16.           <min>0.10</min>
  17.           <max>30.0</max>
  18.           <resolution>0.01</resolution>
  19.         </range>
  20.         <noise>
  21.           <type>gaussian</type>
  22.           <!-- Noise parameters based on published spec for Hokuyo laser
  23.                achieving "+-30mm" accuracy at range < 10m.  A mean of 0.0m and
  24.                stddev of 0.01m will put 99.7% of samples within 0.03m of the true
  25.                reading. -->
  26.           <mean>0.0</mean>
  27.           <stddev>0.01</stddev>
  28.         </noise>
  29.       </ray>
  30.       <plugin name="gazebo_ros_head_hokuyo_controller" filename="libgazebo_ros_laser.so">
  31.         <topicName>/rrbot/laser/scan</topicName>
  32.         <frameName>hokuyo_link</frameName>
  33.       </plugin>
  34.     </sensor>
  35.   </gazebo>

当然,实践是第一要义,这些插件用起来效果到底怎么样,还得你上手来试试。ROS中的很多机器人也提供了gazebo中仿真的模型和实验的案例,如果你还不太明白,直接运行这些已有的模型,看看别人写的代码,理解会更快。这里,推荐一个husky机器人的案例,可以在gazeboSLAM和自主导航。

clip_image006[4]

    husky机器人的主页是http://wiki.ros.org/Robots/Husky,仿真案例在Demo Applications那里。

 

 

参考链接:

http://gazebosim.org/tutorials?tut=ros_gzplugins

http://wiki.ros.org/Robots/Husky

 

 


原创文章,转载请注明: 转载自古月居

本文链接地址: ROS探索总结(二十四)——使用gazebo中的插件

微信 OR 支付宝 扫描二维码
为本文作者 打个赏
pay_weixinpay_weixin

评论

85条评论
  1. Gravatar 头像

    kh 回复

    老师您好,我现在正用gazebo进行cartographer和hector_slam的仿真,在rviz的map坐标系下,base_link和hokuyo_frame不停高频率闪灭跳动,但可以完成建图,切换到hokuyo_frame系下又没有地图。
    运行navigation中的planner出现:
    [ WARN] [1565525706.869090552]: [hector_exploration_planner] The start coordinates are outside the costmap!
    [ WARN] [1565525706.875438520]: [hector_exploration_planner] inner-exploration: no inner-frontiers have been found! exploration failed!
    运行controller出现:
    [ INFO] [1565525736.880034032]: Generated exploration path with 0 poses
    [ERROR] [1565525736.880073505]: Received plan with zero length
    [ERROR] [1565525736.880114476]: Could not transform the global plan to the frame of the controller
    请问是哪里出了问题?

  2. Gravatar 头像

    超难受我2 回复

    老师您好,在仿真环境跑cartographer的时候,发现map或odom坐标系一直抖动,请问这是什么原因???卡了好几天了

    • Gravatar 头像

      kh 回复

      @超难受我2 请问你解决了吗,我的是坐标系一闪一灭,也是仿真跑cartographer

  3. Gravatar 头像

    郭澈 回复

    老师你好,在学习gazebo摄像头仿真时(我使用的是您的例程代码),我发现运行仿真环境后,我的话题列表与您的不一样,缺少了/image_raw/下的几个话题,其次就是,运行rqt_image_raw之后,gazebo就会报错,摄像头界面也是灰色的,不知道这其中出了什么问题?老师可以帮忙解答一下吗?谢谢老师。

  4. Gravatar 头像

    橘子香气 回复

    请问古老师,我现在的模型是四旋翼,想在四旋翼上面添加摄像头。根据您说的我改了URDF文件里面的一个文件,程序 对应进行了相应修改,在后续打开gazebo后另一个终端输入rosrun image_view image_view image:=/robot/mera1/image_raw出来的图不是仿真里面的图,而是我电脑桌面。总感觉我是差了步骤但是刚开始学习并不清楚到底差了哪里,希望您能指点一下。万分感谢。

  5. Gravatar 头像

    牛大 回复

    古老师,我尝试把自己的6轴机器人导入gazebo中,按照书上6.7章节的教程,控制器插件那部分应该怎么编写啊,差速控制libgazebo_ros_diff_drive.so和滑动转向驱动libgazebo_ros_skid_steer_drive.so都是控制少数几个轮子的,那多个revolute或prismatic应该怎么编写或者选用哪个插件啊,
    类似left_wheel_joint
    right_wheel_joint这部分

    • Gravatar 头像

      牛大 回复

      @牛大 left_wheel_joint
      right_wheel_joint

      • Gravatar 头像

        牛大 回复

        @古月 书上的配置(leftJoint)base_to_wheel_left_joint(/leftJoint),其中base_to_wheel_left_joint我可以改成我的关节名字j1,但是括号内的参数名字怎么改啊,leftJoint是特定的参数名称吗?

        • 古月

          古月 回复

          @牛大 按个是gazebo定义的标签,代表左侧关节

          • Gravatar 头像

            牛大 回复

            @古月 那我是不是可以(leftJoint)j1(/leftJoint)
            (leftJoint)j2(/leftJoint)
            ........这样一直到第六个

      • Gravatar 头像

        吴坚创 回复

        @古月 老师,ros学习的微信交流群有吗?找不到您的!

          • Gravatar 头像

            吴坚创 回复

            @古月 wjc@wjc-CW65S:~/SensorKinect/Bin$ tar xvf SensorKinect093-Bin-Linux-x64-v5.1.2.1.tar.bz2
            Sensor-Bin-Linux-x64-v5.1.2.1/
            Sensor-Bin-Linux-x64-v5.1.2.1/Bin/
            Sensor-Bin-Linux-x64-v5.1.2.1/Bin/XnSensorServer
            Sensor-Bin-Linux-x64-v5.1.2.1/GPL.txt
            Sensor-Bin-Linux-x64-v5.1.2.1/install.sh
            Sensor-Bin-Linux-x64-v5.1.2.1/Install/
            Sensor-Bin-Linux-x64-v5.1.2.1/Install/55-primesense-usb.rules
            Sensor-Bin-Linux-x64-v5.1.2.1/Install/blacklist-gspca-kinect.conf
            Sensor-Bin-Linux-x64-v5.1.2.1/Config/
            Sensor-Bin-Linux-x64-v5.1.2.1/Config/GlobalDefaultsKinect.ini
            Sensor-Bin-Linux-x64-v5.1.2.1/LGPL.txt
            Sensor-Bin-Linux-x64-v5.1.2.1/Lib/
            Sensor-Bin-Linux-x64-v5.1.2.1/Lib/libXnCore.so
            Sensor-Bin-Linux-x64-v5.1.2.1/Lib/libXnDeviceSensorV2KM.so
            Sensor-Bin-Linux-x64-v5.1.2.1/Lib/libXnDDK.so
            Sensor-Bin-Linux-x64-v5.1.2.1/Lib/libXnDeviceFile.so
            Sensor-Bin-Linux-x64-v5.1.2.1/Lib/libXnFormats.so
            wjc@wjc-CW65S:~/SensorKinect/Bin$ sudo./install.sh
            bash: sudo./install.sh: 没有那个文件或目录
            wjc@wjc-CW65S:~/SensorKinect/Bin$

            用您视频中的32位的相关代码和64位的,都会出现“没有那个文件和目录”,我电脑是64位的,请问老师这是什么问题

      • Gravatar 头像

        AAROS 回复

        @古月 为什么我在turtlebot找不到kinect.jpg 和 kinect.tga 两张图片,只有kinect.dae,但是仿真的时候没有kinect传感器在模型上面??求解,谢谢

  6. Gravatar 头像

    林杰 回复

    古月老师,ROS中gazebo一运行rqt_image_view命令,运行gazebo的终端就报错,摄像头也是灰的,如果只运行键盘命令可以操纵机器人运动。请问是除了什么问题呢?

    • 古月

      古月 回复

      @林杰 可能是底层的图形渲染出问题了,试下用rviz显示图像

  7. Gravatar 头像

    Chen 回复

    您好,我按照gazebo官网的(教程)[http://gazebosim.org/tutorials?tut=ros_gzplugins#IMU(GazeboRosImu)]配置了imu的gazebo插件,但是在gazebo中加载机器人后查看topic列表发现并没有相应的传递sensor_msgs/Imu的话题生成,请问应该从哪些方面排查导致这个问题的原因?

  8. Gravatar 头像

    回复

    古月老师,问一下我装了个gazebo9,怎么将小车放在gazebo9中运行呢?而不是在默认的gazebo7中
    roslaunch mrobot_gazebo view_mrobot_gazebo.launch
    ... logging to /home/robot/.ros/log/29bc776c-4b3c-11e9-880e-94c6917df537/roslaunch-robot-ZHENGJIUZHE-REN7000-25ICZ-11639.log
    Checking log directory for disk usage. This may take awhile.
    Press Ctrl-C to interrupt
    Done checking log file disk usage. Usage is <1GB.

    Traceback (most recent call last):
    File "/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch/__init__.py", line 306, in main
    p.start()
    File "/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch/parent.py", line 268, in start
    self._start_infrastructure()
    File "/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch/parent.py", line 217, in _start_infrastructure
    self._load_config()
    File "/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch/parent.py", line 132, in _load_config
    roslaunch_strs=self.roslaunch_strs, verbose=self.verbose)
    File "/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch/config.py", line 451, in load_config_default
    loader.load(f, config, verbose=verbose)
    File "/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch/xmlloader.py", line 749, in load
    self._load_launch(launch, ros_config, is_core=core, filename=filename, argv=argv, verbose=verbose)
    File "/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch/xmlloader.py", line 721, in _load_launch
    self._recurse_load(ros_config, launch.childNodes, self.root_context, None, is_core, verbose)
    File "/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch/xmlloader.py", line 685, in _recurse_load
    val = self._include_tag(tag, context, ros_config, default_machine, is_core, verbose)
    File "/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch/xmlloader.py", line 95, in call
    return f(*args, **kwds)
    File "/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch/xmlloader.py", line 589, in _include_tag
    inc_filename = self.resolve_args(tag.attributes['file'].value, context)
    File "/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch/xmlloader.py", line 183, in resolve_args
    return substitution_args.resolve_args(args, context=context.resolve_dict, resolve_anon=self.resolve_anon)
    File "/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch/substitution_args.py", line 370, in resolve_args
    resolved = _resolve_args(resolved, context, resolve_anon, commands)
    File "/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch/substitution_args.py", line 383, in _resolve_args
    resolved = commands[command](resolved, a, args, context)
    File "/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch/substitution_args.py", line 151, in _find
    source_path_to_packages=source_path_to_packages)
    File "/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch/substitution_args.py", line 197, in _find_executable
    full_path = _get_executable_path(rp.get_path(args[0]), path)
    File "/usr/lib/python2.7/dist-packages/rospkg/rospack.py", line 203, in get_path
    raise ResourceNotFound(name, ros_paths=self._ros_paths)
    ResourceNotFound: gazebo_ros
    ROS path [0]=/opt/ros/kinetic/share/ros
    ROS path [1]=/home/robot/catkin_ws/src
    ROS path [2]=/opt/ros/kinetic/share
    报错是这样的。希望您能帮解决下

  9. Gravatar 头像

    july 回复

    古月老师你好,请问在小车的移动过程中,地图随着小车移动出现偏移,导致原先定的点和到达的点不一致。 只更换了local_planner,请问问题可能会出现在哪呢?

  10. Gravatar 头像

    张一一 回复

    古月老师您好,在这一部分。我在运行gazebo时发现,终端没用报错,移动控制动不了,话题列表里没有cmd_vel,odom.之后在运行相机,Kinect以及激光雷达时也没有相关话题。。。话题列表都是
    /clock
    /gazebo/link_states
    /gazebo/model_states
    /gazebo/parameter_descriptions
    /gazebo/parameter_updates
    /gazebo/set_link_state
    /gazebo/set_model_state
    /gazebo_gui/parameter_descriptions
    /gazebo_gui/parameter_updates
    /joint_states
    /rosout
    /rosout_agg
    /tf
    /tf_static
    感谢老师,请帮帮我,

  11. Gravatar 头像

    Yyzz寰 回复

    古月老师,我在用您的例子跑6.7章节gazebo仿真环境中,发现小车在不控制的情况下会自己移动,然后走直线也会跑偏,关节处出现晃动,请问这是gazebo的问题吗?

    • 古月

      古月 回复

      @Yyzz寰 和gazebo、物理参数都有关系,试下把质量参数都改小一点

  12. Gravatar 头像

    lin 回复

    古老师你好,我用rviz显示机器人的时候都没有问题,但是使用gazebo做仿真的时候,模型就发生混乱。关节类型是fixed的都正正常显示,但是活动关节就显示错误。运行终端的时候没有提示错误。

    • 古月

      古月 回复

      @lin 应该是关节的controller配置有问题

  13. Gravatar 头像

    金欢 回复

    古月老师你好,我是在gazebo中用kinect2相机做仿真。我想问下在仿真环境中如何将像素坐标转换为对应的世界坐标,是在gazebo中标定得到内外参吗,还是直接在kinect2.gazebo.xacro设置参数就可以,不是太懂,望指教。

    • 古月

      古月 回复

      @金欢 像素坐标指的是只有图像么,原理是一样的,主要是外参标定

      • Gravatar 头像

        金欢 回复

        @古月 谢谢您的回复,像素坐标就是图像中的一个像素点,外参我在定义模型的时候就能得到,我想知道仿真中kinect相机的内参如何获得呢?

        • 古月

          古月 回复

          @金欢 仿真里的话内参应该是由仿真参数设置决定的

          • Gravatar 头像

            金欢 回复

            @古月 好的谢谢您,我在urdf文件里设置一下

  14. Gravatar 头像

    回复

    古月老师,我用gazebo的激光雷达插件时数据都是 -inf,强度都是 1,这是什么原因呢?

  15. Gravatar 头像

    ghy 回复

    古哥,我利用了husky开源包在gazebo中跑仿真时,用teleop控制其旋转运动时,它很难在仿真环境实现原地旋转,有时跑偏得挺厉害的;再是通过EKF(robot_localiztion包)融合imu和里程计实现定位时,在gazebo中让它跑一段距离在跑回来时,它在rviz中的位置也定位得差别有大;想问有什么方法可以将它仿真环境运动误差降低,同时提高它定位精度(还是想用4轮差速底盘,又不太想用slam去实现定位,尝试过添加gps效果改善的好像不是明显);可以通过调整哪些参数改善它吗,或者哪些开源包能用?真心感谢古哥!! 😀

    • 古月

      古月 回复

      @ghy 首先gazebo仿真本身就存在一些误差,其次使用的这些功能包也并不是完善的,就和实际机器人一样,首先提高传感器精度,然后优化定位算法,这些包光改参数提升的空间不大,往深的话还是得代码优化或替换

      • Gravatar 头像

        ghy 回复

        @古月 哦哦,谢谢谷哥!如果采用单线激光雷达/GPS/imu 做室外融合定位的话,有没有推荐的开源包.

  16. Gravatar 头像

    wxm 回复

    古月老师您好!我在运行roslaunch mbot_gazebo view_mbot_gazebo_play_ground.launch语句时,查看了rostopic list ,/clock/gazebo/link_states/gazebo/model_states/gazebo/parameter_descriptions/gazebo/parameter_updates
    /gazebo/set_link_state/gazebo/set_model_state/gazebo_gui/parameter_descriptions/gazebo_gui/parameter_updates
    /joint_states/rosout/rosout_agg/tf/tf_static,在运行roslaunch mbot_teleop mbot_teleop.launch 时候,机器人怎么也不动?

    • 古月

      古月 回复

      @wxm 话题当中没看到速度话题,看下运行gazebo时候终端有没有报错

  17. Gravatar 头像

    回复

    古老师你好,在学习你的书,我用你的代码跑6.5的例子时,其他的没问题,用键盘操作时机器人一点也不动,跑6.7的例子也是不动

      • Gravatar 头像

        回复

        @古月 终端里面没有错误提示,都是正常开启的

      • Gravatar 头像

        回复

        @古月 这是话题列表/clicked_point
        /cmd_vel
        /diagnostics
        /initialpose
        /joint_states
        /move_base_simple/goal
        /odom
        /rosout
        /rosout_agg
        /tf
        /tf_static

        • Gravatar 头像

          张一一 回复

          @熊 你好,我也碰到这个问题,没有速度话题,请问您是怎么解决的。

      • Gravatar 头像

        回复

        @古月 老师,现在可以动了

  18. Gravatar 头像

    cq 回复

    古月老师你好,想问下如何查看gazebo里插件有哪些标签,当我接触到一个新的插件时,比如libgazebo_ros_diff_drive,要怎么查看有哪些标签和这些标签要如何设置呢?

    • 古月

      古月 回复

      @cq 主要看已有的例程、wiki、gazebo的官网

  19. Gravatar 头像

    吴杰 回复

    运行 roslaunch mrobot_gazebo view_mrobot_gazebo.launch 时,
    报错:
    [gazebo-2] process has died [pid 8435, exit code 255, cmd /opt/ros/kinetic/lib/gazebo_ros/gzserver -e ode /home/wj/wujie/src/mrobot_gazebo/worlds/playground.world __name:=gazebo __log:=/home/wj/.ros/log/4e09b742-cb67-11e8-a6d1-000c29f716ad/gazebo-2.log].
    log file: /home/wj/.ros/log/4e09b742-cb67-11e8-a6d1-000c29f716ad/gazebo-2*.log
    请您指导。

    • 古月

      古月 回复

      @吴杰 gazebo启动失败,重启几次,还不行的话就重新安装试试,这个看不到明确的错误信息,硬件显卡问题、软件依赖问题都有可能

  20. Gravatar 头像

    王小白 回复

    古月大神,我在用 差速 插件的时候,出现了tf_tree错误。不知道您遇到过没有
    问题描述:
    (1)我在xacro文件中,规定好了一套 link 之间的连接方式, [left_wheel_link]和 [right_wheel_link]的parent link 是 [base_link];
    (2)配置 差速插件时,定义[left_wheel_link]和 [right_wheel_link] 为插件中左右轮的节点 ;
    (3) rviz中发现 [left_wheel_link]和 [right_wheel_link]的parent节点不停在跳变;
    (4)用roswtf 检查,发现了tf冲突,大概意思是,[/gazebo]和[/robot_state_publisher] 同时将 [left_wheel_link]和 [right_wheel_link] 映射到了不同的 parent link。
    1. ERROR TF re-parenting contention:
    * reparenting of [left_wheel_link] to [base_link] by [/robot_state_publisher]
    * reparenting of [right_wheel_link] to [base_link] by [/robot_state_publisher]
    * reparenting of [right_wheel_link] to [base_footprint] by [/gazebo]
    * reparenting of [left_wheel_link] to [base_footprint] by [/gazebo]
    我尝试修改了 插件的robot命令空间等参数。。任然有这个问题,我很苦恼。请求大神指点一二,谢谢。

  21. Gravatar 头像

    王小白 回复

    古月大神,为什么差速插件中的base_footprint 用的是base_footprint,而不是base_link?

    • 古月

      古月 回复

      @王小白 这个和模型有关系,只要模型中有,其实用哪个都可以

  22. Gravatar 头像

    王小白 回复

    古月大神,我用libgazebo_ros_diff_drive时碰到一个tf_tree的问题。问题描述:我在xacro中维护的tf关系是(1)base_footprint->base_link-> [left_wheel_link],(2)base_footprint->base_link->[right_wheel_link]。用libgazebo_ros_diff_drive.so插件控制,配置好左右轮的节点为 [left_wheel_link] 和 [right_wheel_link]。但是我用roswtf检查时出现了 tf 冲突,大概意思是 /gazebo 和 /ros_state_publiser 同时维护了 [left_wheel_link] 和 [right_wheel_link]的坐标关系。
    reparenting of [left_wheel_link] to [base_link] by [/robot_state_publisher]
    * reparenting of [right_wheel_link] to [base_link] by [/robot_state_publisher]
    * reparenting of [right_wheel_link] to [base_footprint] by [/gazebo]
    * reparenting of [left_wheel_link] to [base_footprint] by [/gazebo]
    观察rivz的tf可以明显看到 [right_wheel_link] 和[left_wheel_link] 的根节点在不停改变。
    我很困惑,不知这个是什么问题造成的?古月大神遇到过吗?

    • 古月

      古月 回复

      @王小白 应该是同时在发布tf变换,检查下是否可以把其中一个关掉

  23. Gravatar 头像

    姚~ 回复

    你好,博文中描述的摄像头,我怎么才能才ros里面获取这个摄像头的视频流呢~

    • Gravatar 头像

      姚~ 回复

      @姚~ 已经知道,谢谢

      • Gravatar 头像

        回复

        @姚~ 您好,请问您是怎样获取的gazebo中摄像头的视频呢?

  24. Gravatar 头像

    小菜鸡 回复

    请问,下载好的模型放在哪里啊 ?有说gazebo/model,可是没有找到。。

      • Gravatar 头像

        小菜鸡 回复

        @古月 在home里面建就可以吗?在usr-share-gazebo里面新建不了文件夹,usr-include-gazebo7-gazebo里面也新建不了。。

        • Gravatar 头像

          .-' _..`. / .'_.'.' | .' (.)`. ;' ,_ `. .--.__________.' ; `.;-' | ./ / | | / `..'`-._ _____, ..' / | | | |\ \ / /| | 回复

          @小菜鸡 ctrl+h 可以显示隐藏文件夹,那个是.gazebo

  25. Gravatar 头像

    一代瓜皮 回复

    古月老师,我写了一个3轮的小车模型,左右各一个动力轮,前面一个万向轮。现在,轮子走一步卡一步,不知道给万向轮添加什么插件合适。

    • 古月

      古月 回复

      @一代瓜皮 万向轮是被动运动的,不需要插件,做一个固定关节或者转动关节就可以了

  26. Gravatar 头像

    王涛 回复

    古月大哥,你好,我在 roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch 时,报如下错误,月哥能否知道什么原因

    Warning [parser.cc:478] XML Attribute[frame] in element[pose] not defined in SDF, ignoring.
    Error [parser.cc:697] XML Element[torsional], child of element[friction] not defined in SDF. Ignoring.[friction]
    Error [parser.cc:688] Error reading element
    Error [parser.cc:688] Error reading element
    Error [parser.cc:688] Error reading element
    Error [parser.cc:688] Error reading element
    Error [parser.cc:688] Error reading element
    Error [parser.cc:688] Error reading element
    Error [parser.cc:348] Unable to read element

    • 古月

      古月 回复

      @王涛 你用的ros版本或者gazebo版本是不是不一样,看上去是版本导致的,先把这个launch里调用的地图删掉,用空环境试试。空环境可以的话,应该就是版本导致,那就自己做一个环境。

    • Gravatar 头像

      大宝 回复

      @王涛 我也遇到了这个问题,请问你怎么解决的,谢谢

    • Gravatar 头像

      大宝 回复

      @王涛 地图的问题,已经解决

  27. Gravatar 头像

    小峰峰 回复

    古神,请问请问,怎么在gazebo中搭建道路公路模型??

    • 古月

      古月 回复

      @小峰峰 这个要看gazebo官网的教程,或者使用solidworks建模导出

  28. Gravatar 头像

    朱洪彪 回复

    你好,我现在在做实际的小车,想用实际的激光雷达代替虚拟的激光雷达,但是不明白怎么把实际的激光雷达和urdf中的相应关节联系起来,就像gazebo是用reference直接关联虚拟的传感器关节那样。

    • 古月

      古月 回复

      @朱洪彪 URDF模型中的激光雷达模型有一个激光坐标系,激光数据发布在这个坐标系下就可以了

    • Gravatar 头像

      金欢 回复

      @朱洪彪 朱教授,学会了教教我呗

  29. Gravatar 头像

    y 回复

    月哥,我用move_group和gazebo已经连接成功了,目标点位置,随机位置都没有问题,但只有笛卡尔坐标系的不行,我的圆弧,直线和样条曲线都是在笛卡尔坐标系中实现的,不知道是我不应该用笛卡尔坐标系规划不对,还是对于笛卡尔坐标系规划的设置有问题。

    • 古月

      古月 回复

      @y 笛卡尔空间的运动,最终还是通过IK反解为关节角度,才能驱动机器人运动

  30. Gravatar 头像

    丿灬安 回复

    “当然,你也可以自己编写需要的gazebo插件。”
    如果要自己编写gazebo插件,要怎么操作呢。。。网上好像都找不到相关教程啊

    • 古月

      古月 回复

      @丿灬安 gazebo插件暂时我也没写过,在gazebo的官网上找找看

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据