Pressure sensor implementation [closed]
I'm implementing a tape pressure sensor (like this: http: //cnmat.berkeley.edu/system/files/sensor_modules/IMG_7786.jpg) in gazebo as a small link with attached a bumper to keep track of the contacts and measure the total_wrench acting on it (in particular to the z-axis component). This is my urdf:
<robot name="pressure_sensor">
<link name="base_link">
<inertial>
<mass value="0.001"/>
<origin xyz="0 0 0.0005"/>
<inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<box size="0.1 0.5 0.1"/>
</geometry>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<box size="0.1 0.5 0.001"/>
</geometry>
</collision>
</link>
<gazebo reference="base_link">
<sensor:contact name="contact_sensor">
<geom>base_link_geom</geom>
<updateRate>1.0</updateRate>
<controller:gazebo_ros_bumper name="gazebo_ros_bumper_controller" plugin="libgazebo_ros_bumper.so">
<alwaysOn>true</alwaysOn>
<updateRate>1.0</updateRate>
<bumperTopicName>weight</bumperTopicName>
<interface:bumper name="bumper_iface" />
</controller:gazebo_ros_bumper>
</sensor:contact>
</gazebo>
</robot>
and this is the callback function of the bumper topic "weight" subscriber node:
void pressureCallback(const gazebo_msgs::ContactsState::ConstPtr& msg){
if(msg != NULL && msg->states.size()>0) {
sum=0;
for(i=0;i<msg->states.size(); i++){
if((msg->states[i].geom2_name).compare("[MY_LINK_GEOM]")==0) {
if(msg->states[i].total_wrench.force.z >= 0) sum+=msg->states[i].total_wrench.force.z;
else sum-=msg->states[i].total_wrench.force.z;
}
}
ROS_INFO("Weight detected: %f Kg", sum);
}
where [MY_LINK_GEOM] is the name of the link - of the object I want to measure the weight - that touches my pressure sensor.
It seems to work but I cannot understand why the weight measurements vary in such a different way with the time passing as shown in the figure: https: //www.dropbox.com/s/98lepyi5015ew56/pressure1.png. Is there in your opinion a better implementation for that?