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

38469
88
2016年6月30日 16时51分

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

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

<gazebo>
  <plugin name="differential_drive_controller" filename="libdiffdrive_plugin.so">
    ... plugin parameters ...
  </plugin>
</gazebo>

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

<gazebo reference="your_link_name">
  <plugin name="your_link_laser_controller" filename="libgazebo_ros_laser.so">
    ... plugin parameters ...
  </plugin>
</gazebo>

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

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

1.差速驱动插件

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

<gazebo>
  <plugin name="differential_drive_controller" filename="libgazebo_ros_diff_drive.so">
    <alwaysOn>true</alwaysOn>
    <updateRate>${update_rate}</updateRate>
    <leftJoint>base_link_right_wheel_joint</leftJoint>
    <rightJoint>base_link_left_wheel_joint</rightJoint>
    <wheelSeparation>0.5380</wheelSeparation>
    <wheelDiameter>0.2410</wheelDiameter>
    <torque>20</torque>
    <commandTopic>cmd_vel</commandTopic>
    <odometryTopic>odom</odometryTopic>
    <odometryFrame>odom</odometryFrame>
    <robotBaseFrame>base_footprint</robotBaseFrame>
  </plugin>
</gazebo>

2.摄像头

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

<!-- camera -->
  <gazebo reference="camera_link">
    <sensor type="camera" name="camera1">
      <update_rate>30.0</update_rate>
      <camera name="head">
        <horizontal_fov>1.3962634</horizontal_fov>
        <image>
          <width>800</width>
          <height>800</height>
          <format>R8G8B8</format>
        </image>
        <clip>
          <near>0.02</near>
          <far>300</far>
        </clip>
        <noise>
          <type>gaussian</type>
          <!-- Noise is sampled independently per pixel on each frame.
               That pixel's noise value is added to each of its color
               channels, which at that point lie in the range [0,1]. -->
          <mean>0.0</mean>
          <stddev>0.007</stddev>
        </noise>
      </camera>
      <plugin name="camera_controller" filename="libgazebo_ros_camera.so">
        <alwaysOn>true</alwaysOn>
        <updateRate>0.0</updateRate>
        <cameraName>rrbot/camera1</cameraName>
        <imageTopicName>image_raw</imageTopicName>
        <cameraInfoTopicName>camera_info</cameraInfoTopicName>
        <frameName>camera_link</frameName>
        <hackBaseline>0.07</hackBaseline>
        <distortionK1>0.0</distortionK1>
        <distortionK2>0.0</distortionK2>
        <distortionK3>0.0</distortionK3>
        <distortionT1>0.0</distortionT1>
        <distortionT2>0.0</distortionT2>
      </plugin>
    </sensor>
  </gazebo>

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

  <gazebo reference="camera_link">

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

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

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

<update_rate>30.0</update_rate>

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

        <horizontal_fov>1.3962634</horizontal_fov>
        <image>
          <width>800</width>
          <height>800</height>
          <format>R8G8B8</format>
        </image>
        <clip>
          <near>0.02</near>
          <far>300</far>
        </clip>

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

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

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

        <cameraName>rrbot/camera1</cameraName>
        <imageTopicName>image_raw</imageTopicName>
        <cameraInfoTopicName>camera_info</cameraInfoTopicName>
        <frameName>camera_link</frameName>

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

clip_image002[4]

clip_image004[4]

3.Kinect

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

<gazebo>
  <plugin name="${link_name}_controller" filename="libgazebo_ros_openni_kinect.so">
    <baseline>0.2</baseline>
    <alwaysOn>true</alwaysOn>
    <updateRate>1.0</updateRate>
    <cameraName>${camera_name}_ir</cameraName>
    <imageTopicName>/${camera_name}/depth/image_raw</imageTopicName>
    <cameraInfoTopicName>/${camera_name}/depth/camera_info</cameraInfoTopicName>
    <depthImageTopicName>/${camera_name}/depth/image_raw</depthImageTopicName>
    <depthImageInfoTopicName>/${camera_name}/depth/camera_info</depthImageInfoTopicName>
    <pointCloudTopicName>/${camera_name}/depth/points</pointCloudTopicName>
    <frameName>${frame_name}</frameName>
    <pointCloudCutoff>0.5</pointCloudCutoff>
    <distortionK1>0.00000001</distortionK1>
    <distortionK2>0.00000001</distortionK2>
    <distortionK3>0.00000001</distortionK3>
    <distortionT1>0.00000001</distortionT1>
    <distortionT2>0.00000001</distortionT2>
    <CxPrime>0</CxPrime>
    <Cx>0</Cx>
    <Cy>0</Cy>
    <focalLength>0</focalLength>
    <hackBaseline>0</hackBaseline>
  </plugin>
</gazebo>

4.激光

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

<gazebo reference="hokuyo_link">
    <sensor type="ray" name="head_hokuyo_sensor">
      <pose>0 0 0 0 0 0</pose>
      <visualize>false</visualize>
      <update_rate>40</update_rate>
      <ray>
        <scan>
          <horizontal>
            <samples>720</samples>
            <resolution>1</resolution>
            <min_angle>-1.570796</min_angle>
            <max_angle>1.570796</max_angle>
          </horizontal>
        </scan>
        <range>
          <min>0.10</min>
          <max>30.0</max>
          <resolution>0.01</resolution>
        </range>
        <noise>
          <type>gaussian</type>
          <!-- Noise parameters based on published spec for Hokuyo laser
               achieving "+-30mm" accuracy at range < 10m.  A mean of 0.0m and
               stddev of 0.01m will put 99.7% of samples within 0.03m of the true
               reading. -->
          <mean>0.0</mean>
          <stddev>0.01</stddev>
        </noise>
      </ray>
      <plugin name="gazebo_ros_head_hokuyo_controller" filename="libgazebo_ros_laser.so">
        <topicName>/rrbot/laser/scan</topicName>
        <frameName>hokuyo_link</frameName>
      </plugin>
    </sensor>
  </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

 

 

发表评论

后才能评论

评论列表(88条)

  • 👄 2020年3月20日 下午7:52

    古月老师您好,请问有控制麦克纳姆轮的gazebo插件吗?如果没有我应该怎么写呢?

  • oysster 2020年3月17日 上午11:27

    老师您好,我想问一下话题odom是由哪部分发布的,有应该如何修改odom的发布频率。是由差速驱动插件libgazebo_ros_diff_drive.so发布的嘛?

  • kh 2019年8月11日 下午8:50

    老师您好,我现在正用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 2019年8月7日 下午8:06

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

    • kh 回复 超难受我2 2019年8月13日 下午4:58

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

  • 郭澈 2019年7月22日 上午11:00

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

  • 橘子香气 2019年7月16日 下午3:57

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

    • 古月 回复 橘子香气 2019年7月18日 下午7:45

      图像话题没选对吧,确定摄像头驱动跑起来了?

  • 牛大 2019年5月13日 上午11:19

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

    • 牛大 回复 牛大 2019年5月13日 上午11:20

      left_wheel_joint
      right_wheel_joint

    • 古月 回复 牛大 2019年5月14日 下午6:01

      这个不是可以参考书上的配置来么

    • 牛大 回复 古月 2019年5月14日 下午7:09

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

    • 古月 回复 牛大 2019年5月17日 上午11:36

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

    • 牛大 回复 古月 2019年5月17日 上午11:42

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

    • 古月 回复 牛大 2019年5月17日 下午3:45

      不行,只能有一个

    • 吴坚创 回复 古月 2019年5月16日 下午5:46

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

    • 古月 回复 吴坚创 2019年5月17日 下午12:40

      ROS星火计划有好几个群,里边都有我

    • 吴坚创 回复 古月 2019年5月18日 上午11:23

      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位的,请问老师这是什么问题

    • AAROS 回复 古月 2019年5月16日 下午9:17

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

  • 林杰 2019年4月23日 下午7:29

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

    • 古月 回复 林杰 2019年4月25日 下午7:45

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

  • Chen 2019年3月25日 下午11:00

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

  • 2019年3月20日 上午11:07

    古月老师,问一下我装了个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
    报错是这样的。希望您能帮解决下

    • 古月 回复 2019年3月20日 下午9:34

      好像没装gazebo_ros这个包吧

  • july 2019年3月8日 上午11:22

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

    • 古月 回复 july 2019年3月9日 下午4:11

      可能和传感器的数据精度有关系

  • 张一一 2019年3月3日 下午9:38

    古月老师您好,在这一部分。我在运行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
    感谢老师,请帮帮我,

    • 古月 回复 张一一 2019年3月5日 上午9:00

      gazebo传感器的仿真没有跑起来,请检查urdf中关于传感器仿真部分的配置

    • 张一一 回复 古月 2019年3月5日 下午7:31

      謝謝老師!

  • Yyzz寰 2019年2月26日 上午11:50

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

    • 古月 回复 Yyzz寰 2019年2月28日 下午9:23

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

  • lin 2019年1月27日 下午5:30

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

    • 古月 回复 lin 2019年2月8日 下午3:50

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

  • 金欢 2019年1月22日 上午10:40

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

    • 古月 回复 金欢 2019年1月22日 下午4:31

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

    • 金欢 回复 古月 2019年1月22日 下午4:48

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

    • 古月 回复 金欢 2019年1月24日 上午11:06

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

    • 金欢 回复 古月 2019年1月24日 下午1:12

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

  • 2019年1月16日 下午6:43

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

    • 古月 回复 2019年1月19日 下午6:19

      inf就是没有有效数据

  • ghy 2018年11月11日 下午11:07

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

    • 古月 回复 ghy 2018年11月12日 下午8:45

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

    • ghy 回复 古月 2018年11月18日 下午5:07

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

    • 古月 回复 ghy 2018年11月20日 下午1:45

      这方面我不了解

  • wxm 2018年11月8日 上午11:06

    古月老师您好!我在运行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 2018年11月12日 下午8:34

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

  • 2018年11月7日 下午8:31

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

    • 古月 回复 2018年11月12日 下午8:29

      终端里有错误提示么?

    • 熊 回复 古月 2018年12月14日 下午4:09

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

    • 熊 回复 古月 2018年12月14日 下午4:15

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

    • 张一一 回复 2019年3月3日 下午9:25

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

    • 熊 回复 古月 2018年12月14日 下午4:45

      老师,现在可以动了

  • cq 2018年10月10日 上午9:47

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

    • 古月 回复 cq 2018年10月15日 下午3:53

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

  • 吴杰 2018年10月9日 上午10:15

    运行 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
    请您指导。

    • 古月 回复 吴杰 2018年10月9日 下午7:23

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

  • 王小白 2018年9月29日 下午4:17

    古月大神,我在用 差速 插件的时候,出现了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命令空间等参数。。任然有这个问题,我很苦恼。请求大神指点一二,谢谢。

  • 王小白 2018年9月29日 下午4:06

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

    • 古月 回复 王小白 2018年10月3日 上午12:35

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

  • 王小白 2018年9月29日 上午11:18

    古月大神,我用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] 的根节点在不停改变。
    我很困惑,不知这个是什么问题造成的?古月大神遇到过吗?

    • 古月 回复 王小白 2018年10月3日 上午12:34

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

  • 姚~ 2018年9月17日 下午5:16

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

    • 姚~ 回复 姚~ 2018年9月17日 下午6:03

      已经知道,谢谢

    • 晨 回复 姚~ 2018年10月30日 下午8:27

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

    • 张桥 回复 姚~ 2018年12月10日 上午10:58

      同问

  • 小菜鸡 2018年8月22日 下午4:09

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

    • 古月 回复 小菜鸡 2018年8月23日 上午10:18

      自己创建一个models文件夹,然后把模型放进去

    • 小菜鸡 回复 古月 2018年8月23日 上午10:55

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

    • .-' _..`. / .'_.'.' | .' (.)`. ;' ,_ `. .--.__________.' ; `.;-' | ./ / | | / `..'`-._ _____, ..' / | | | |\ \ / /| | 回复 小菜鸡 2018年8月27日 上午8:38

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

    • 古月 回复 小菜鸡 2018年8月29日 下午2:36

      路径:/home/xxx/.gazebo/models

  • 一代瓜皮 2018年8月14日 下午7:42

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

    • 古月 回复 一代瓜皮 2018年8月14日 下午9:25

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

    • 张永华 回复 古月 2019年10月23日 下午3:52

      古月老师,您好,从动轮不需要插件的话,那他们之间的tf关系会在tf_tree里面显示出来吗,我在urdf.xacro里面定义好了tf关系,但是从动轮的tf关系一直不存在。用check_urdf命令检查整个关系是正确的。

  • 王涛 2018年7月26日 下午9:50

    古月大哥,你好,我在 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

    • 古月 回复 王涛 2018年7月27日 上午10:24

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

    • 大宝 回复 王涛 2018年12月3日 下午6:12

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

    • 大宝 回复 王涛 2018年12月3日 下午6:19

      地图的问题,已经解决

  • 小峰峰 2018年5月9日 上午8:52

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

    • 古月 回复 小峰峰 2018年5月9日 上午9:40

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

  • 朱洪彪 2017年12月13日 下午10:26

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

    • 古月 回复 朱洪彪 2017年12月14日 上午9:59

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

    • 金欢 回复 朱洪彪 2019年1月22日 上午10:31

      朱教授,学会了教教我呗

  • y 2017年10月31日 下午5:02

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

    • 古月 回复 y 2017年11月1日 下午4:32

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

  • 丿灬安 2017年10月12日 下午5:21

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

    • 古月 回复 丿灬安 2017年10月13日 上午8:25

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