[英]Subscribe to a child-link of the sdf model in Gazebo-simulated world
我在Gazebo中模拟了Baxter机器人(Baxter SDK urdf)和操纵杆模型(简单的sdk文件)。 需要记录的是在凉亭中显示的操纵杆俯仰和横滚的位置。
(我无法在Gazebo中记录世界日志,因为Baxter SDK使用了Gazebo版本2,并且该功能在该处无法正常工作)。
游戏杆的sdf如下所示:
<?xml version="1.0" ?>
<sdf version='1.4'>
<model name='joystick'>
<link name='joystick_base'>
<pose>0 0 0 0 -0 0</pose>
<inertial>
<pose>0 0 0.75 0 -0 0</pose>
<mass>0.01</mass>
<inertia>
<ixx>0.0001</ixx>
<ixy>0</ixy>
<ixz>0</ixz>
<iyy>0.0001</iyy>
<iyz>0</iyz>
<izz>0.0001</izz>
</inertia>
</inertial>
<collision name='joystick_base_collision'>
<pose>0 -0 0.77 0 -0 0</pose>
<geometry>
<box>
<size>0.07 0.07 0.04</size>
</box>
</geometry>
</collision>
<visual name='joystick_base_visual'>
<pose>0 -0 0.775 0 -0 0</pose>
<geometry>
<box>
<size>0.07 0.07 0.05</size>
</box>
</geometry>
</visual>
<velocity_decay>
<linear>0</linear>
<angular>0</angular>
</velocity_decay>
</link>
<link name='link_roll'>
<pose>0 0 0.05 0 -0 0</pose>
<inertial>
<pose>0 -0 0.75 0 -0 0</pose>
<mass>0.01</mass>
<inertia>
<ixx>0.0002</ixx>
<ixy>0</ixy>
<ixz>0</ixz>
<iyy>0.0002</iyy>
<iyz>0</iyz>
<izz>0.0002</izz>
</inertia>
</inertial>
<velocity_decay>
<linear>0</linear>
<angular>0</angular>
</velocity_decay>
</link>
<joint name='joint_roll' type='revolute'>
<child>link_roll</child>
<parent>joystick_base</parent>
<axis>
<xyz>0 1 0</xyz>
<limit>
<lower>-1.2</lower>
<upper>1.2</upper>
<effort>15</effort>
<velocity>4</velocity>
</limit>
<dynamics>
<damping>0.7</damping>
</dynamics>
</axis>
</joint>
<link name='joystick'>
<pose>0 0 0.05 0 -0 0</pose>
<inertial>
<pose>0 -0 0.75 0 -0 0</pose>
<mass>0.01</mass>
<inertia>
<ixx>0.0002</ixx>
<ixy>0</ixy>
<ixz>0</ixz>
<iyy>0.0002</iyy>
<iyz>0</iyz>
<izz>0.0002</izz>
</inertia>
</inertial>
<collision name='joystick_collision'>
<pose>0 -0 0.835 0 -0 0</pose>
<geometry>
<cylinder>
<length>0.17</length>
<radius>0.01</radius>
</cylinder>
</geometry>
</collision>
<visual name='joystick_visual'>
<pose>0 -0 0.835 0 -0 0</pose>
<geometry>
<cylinder>
<length>0.17</length>
<radius>0.01</radius>
</cylinder>
</geometry>
</visual>
<velocity_decay>
<linear>0</linear>
<angular>0</angular>
</velocity_decay>
</link>
<joint name='joint_pitch' type='revolute'>
<child>joystick</child>
<parent>link_roll</parent>
<axis>
<xyz>1 0 0</xyz>
<limit>
<lower>-1.2</lower>
<upper>1.2</upper>
<effort>15</effort>
<velocity>4</velocity>
</limit>
<dynamics>
<damping>0.7</damping>
</dynamics>
</axis>
</joint>
</model>
</sdf>
我想订阅'joint_pitch'
和'joint_roll'
以接收它们的值,例如:
from geometry_msgs.msg import Pose, PoseStamped
model_coordinates = rospy.ServiceProxy('/gazebo/get_model_state', GetModelState)
resp_coordinates = model_coordinates('joystick', 'joint_roll')
print(str(resp_coordinates.axis.position.x))
任何想法如何做到这一点才能真正起作用?
如果您想知道当前的关节属性(位置和比率),可以只请求凉亭服务/gazebo/get_joint_properties
。 您只需要按照此处的说明编写python服务客户端,或者也可以先尝试通过rqt_service_caller
获取信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.