From 2f86fcb8aaa558a3a529d9bf9f7630d489b8d453 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sergi=20Hern=C3=A0ndez=20Juan?= <shernand@iri.upc.edu>
Date: Sat, 20 May 2017 23:48:07 +0200
Subject: [PATCH] Added the necessary files for the simulation of the charge
 environment.

---
 darwin_apps/launch/charge/charge_sim.launch   |  19 +++
 darwin_controller/CMakeLists.txt              |   1 +
 darwin_description/launch/charge_env.launch   |  10 ++
 .../meshes/charge/charge_support.stl          | Bin 0 -> 80884 bytes
 .../meshes/charge/connector.stl               | Bin 0 -> 13284 bytes
 darwin_description/meshes/charge/far_qr.stl   | Bin 0 -> 1684 bytes
 darwin_description/meshes/charge/near_qr.stl  | Bin 0 -> 6884 bytes
 .../urdf/charge/charge_env.xacro              |  11 ++
 .../urdf/charge/charge_station.xacro          | 152 ++++++++++++++++++
 9 files changed, 193 insertions(+)
 create mode 100644 darwin_apps/launch/charge/charge_sim.launch
 create mode 100644 darwin_description/launch/charge_env.launch
 create mode 100755 darwin_description/meshes/charge/charge_support.stl
 create mode 100755 darwin_description/meshes/charge/connector.stl
 create mode 100755 darwin_description/meshes/charge/far_qr.stl
 create mode 100755 darwin_description/meshes/charge/near_qr.stl
 create mode 100755 darwin_description/urdf/charge/charge_env.xacro
 create mode 100644 darwin_description/urdf/charge/charge_station.xacro

diff --git a/darwin_apps/launch/charge/charge_sim.launch b/darwin_apps/launch/charge/charge_sim.launch
new file mode 100644
index 0000000..8510b1f
--- /dev/null
+++ b/darwin_apps/launch/charge/charge_sim.launch
@@ -0,0 +1,19 @@
+<launch>
+
+  <arg name="robot" default="darwin" />
+  <arg name="environment" default="charge_env" />
+
+  <include file="$(find darwin_description)/launch/darwin_sim.launch">
+    <arg name="robot" value="$(arg robot)" />
+  </include>
+
+  <!-- launch dynamic reconfigure -->
+  <node name="rqt_reconfigure" pkg="rqt_reconfigure" type="rqt_reconfigure" respawn="false"
+    output="screen"/>
+
+  <include file="$(find darwin_description)/launch/charge_env.launch">
+    <arg name="environment" value="$(arg environment)" />
+  </include>
+
+</launch>
+
diff --git a/darwin_controller/CMakeLists.txt b/darwin_controller/CMakeLists.txt
index 3b96092..be33c40 100644
--- a/darwin_controller/CMakeLists.txt
+++ b/darwin_controller/CMakeLists.txt
@@ -119,6 +119,7 @@ add_library(${PROJECT_NAME} src/darwin_controller.cpp
                             ${DARWIN_FW_PATH}/src/joint_motion.c
                             ${DARWIN_FW_PATH}/src/head_tracking.c
                             ${DARWIN_FW_PATH}/src/motion_manager.c
+                            ${DARWIN_FW_PATH}/src/smart_charger.c
                             ${DARWIN_FW_PATH}/src/grippers.c
                             src/sim/stm32_hal.c
                             src/sim/stm32_cortex.c
diff --git a/darwin_description/launch/charge_env.launch b/darwin_description/launch/charge_env.launch
new file mode 100644
index 0000000..7e24a80
--- /dev/null
+++ b/darwin_description/launch/charge_env.launch
@@ -0,0 +1,10 @@
+<launch>
+  <arg name="environment" default="charge_env" />
+
+  <!-- Convert an xacro and put on parameter server -->
+  <param name="charge_environment"
+         command="$(find xacro)/xacro.py '$(find darwin_description)/urdf/charge/$(arg environment).xacro'" />
+
+  <node name="spawn_charge_station" pkg="gazebo_ros" type="spawn_model" args="-param charge_environment -urdf -model charge_station -x 1.0 -y 0.25 -z 0.03 -R 0 -P 0 -Y 3.14159"/>
+
+</launch>
diff --git a/darwin_description/meshes/charge/charge_support.stl b/darwin_description/meshes/charge/charge_support.stl
new file mode 100755
index 0000000000000000000000000000000000000000..3f0a0d183d43f5471dabca68a8fa26d3733f8167
GIT binary patch
literal 80884
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
T$_(yX?#%7EaxA0PdddF_k*r`3

literal 0
HcmV?d00001

diff --git a/darwin_description/meshes/charge/connector.stl b/darwin_description/meshes/charge/connector.stl
new file mode 100755
index 0000000000000000000000000000000000000000..27fa7fe0987a890003b936267a52c694aec85e58
GIT binary patch
literal 13284
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

literal 0
HcmV?d00001

diff --git a/darwin_description/meshes/charge/far_qr.stl b/darwin_description/meshes/charge/far_qr.stl
new file mode 100755
index 0000000000000000000000000000000000000000..201896091af9f860b8c06b31436aaf4ab914b3e5
GIT binary patch
literal 1684
zcmb`F(P;xQ5JdBxDhz4kj2mzdArJzAK(O7w73RYY#NTcwnz<c$ypqrP$bs0kG;e1m
z@8SFF^L_R4wtwC2SO4)n`8RH!FE2w`$Mes29c!|jd$)wE5)G1cL(~%|;4AM%qN-FM
zJ#-27>vba^{zOm(rB>rnPrPo)@rHd5C#ot4zWR;FDeB^6@)i5=n7RZ{oQNF$j|r-x
ztG<VNS63uTZA9ixS58!w-MsAzgl=95)$iUT6BAVNR;<)?bxa;4Kxu&(H{!~!I#GmD
zIU?`TC8SiOTEx`{JE<m=QZuTb*~f^xB<r8V1tGN}YwPST0d*!ws`^NuqEbD@Ox6Fq
zA)wT9dVbw{51XHL<d|3G^*^8Mqdy}s8JbEFpi@^#g^6*GWda^fC{I(;QK5Hq^_Y-{
Y6UeXk;QU4{sRsNuk7WWLPAD%Pza15Z)c^nh

literal 0
HcmV?d00001

diff --git a/darwin_description/meshes/charge/near_qr.stl b/darwin_description/meshes/charge/near_qr.stl
new file mode 100755
index 0000000000000000000000000000000000000000..c229ea9b16b0d5a466ae346d8c9129ad0c291551
GIT binary patch
literal 6884
zcmbuDJ&R>U5QYz$h@rVKa0fIo5yar^Frf&uFsxv@2pR~YxT0%#14Y5VAc*XO{sE)2
z!+;<gxGDxR!Gb3K1XIC&>-2kls!#VIIKfbK_0#py)pfe>2k*V}_M1oVzV*hP+wb2w
z`u~5QPx{-R{{Gij_ayxI=<MX@pUzL7zPh(So+Y2}ZpQeQux3EaTjI0*?xNU;b*miq
zo_+CHHadhgve6-yX?pqZhxbbem$LTc)$Zc<pJ!nM^78fL-HFFDLCt_DHne`p)lSkc
zkIpV?u4c%K<X6^Qt#Ks6ngP+Var9~AD%P!X*!$##$W@21Mm9P`$E%u?u;KiOe(j^k
zVaJ9wn$;nS4em!f%l3W%oe63{FBmUg6&uH@U+u@2k9QaIcV|(fkmskab|)Us1T_O9
zay9L>zV@D#A^F#%bJbXQWqF+%{|mt^K6ABu@cqZT8zLCfmT-PZNWS&b@dMG<6P}fG
zRhWHn#j9I)&kv_a@~d^9dAhO<YDoN6&ZFr}D7&3rvM}pg!aIdt5}m<4CKEUBp8Kpt
zM(gQXH11QdC9KgNn2_x8Oek7gms~s1HD1a05n(#pkag!um1vnBZVCHN0(IP}5)#hz
zIC5&ZE~|3um9xlMTFHHEOIXtq?lEIR>w1><+$&{*nwBt~301Yvv%U<L$JI^^34B+Y
z{b&iFd7iZF6*XK}<NdnguJPP4)7b_!Bv{j9g0r5u+TC!s%LFwf#&NWSqt&>(-PVRR
zT$gzp6P%@tc%@8GLxNw4F~M2mPEAcqxGKX&{kK2GS({P$A=heOziI~pdk{A=-)hjo
z8v^HJMjg+}LiMU4sA&n`A95V%wKIBfcv$zpv4MTw5VapSgtBXY@jaiB^$uZwNnmdp
zLVHmAZtOwrk8y|dc#d2<XpLwRmbZlWR<u1tg*INHGt4;iye%~Zx<MjvHai4sseW-{
z2mAZMN~FE94HBHiTFAMghJ@sL&YL(|!m~8)mrS;ydabvjs6@|V<!6E#(I&<=NN^T9
zQ4<F>B*u}G;H+`AQ$u20i6l7dznwu6to)o^Rl6%uvn=xzYzfyZ3CTX2*At$_)0GKo
zxUS^>Id2KiVivYGT(4YLvfqZ+6P_i)Jth;>a9#B-68qEjO*l>PcR@@c+gsV_66`*t
zOSSXO$#qqUzKdXdOw1%8$BEisuJ6uif@YCieGj?X8xvuJ#J`dAUCVWuH;k`w9A3iI
zkbt~;b=VJ_j|K9K^ReXppk_ccUbVC88H{(E&tra{tCp+*O=9)xuphj!K<1lsjXV)P
z=L4eH;C{5T?4dfUW6A_IpwnF|*RFb^Z+DR6UgGgg;3l&Sh&A%Vp0n?g!1$Wo9+7N-
zUWr3?(ZkbkBp6@4>Jceg#8-$fUjOhp{T`#5WcOjm!Fcg%K*TQv?opsu;v01!+wj{`
zvn;dQg^eD;TX@)WM~xG8Sv)J$G-2HhVGp;2HJ}+&Cyx4EidmKwhrd_bIINKk6OcRm
z;qQ`WS(c3|clN^?5|9g_{bsI4ggx96)?nSpwBuU|_jcTU;&)@8JB*je<yD8^ONewK
z{y3VybzSimHn{bb$Opti0`i)x!>QFh(Qh2c3-6B+M<RTC9T3GviTb{x7pt7u2IR2e
z@l0Udlq-y{kw0%6@HZm&uZ|d>BUe2lZs8`BE62A+UNT&$Y0oS|PV|=Gy1ut(8|@DI
z^`lvqRSQ*KBTrRg4GG9iuC$haBhf6&7;kb#4GGAFP~9?DeuraL?2TjE64nfe630I=
COfPEy

literal 0
HcmV?d00001

diff --git a/darwin_description/urdf/charge/charge_env.xacro b/darwin_description/urdf/charge/charge_env.xacro
new file mode 100755
index 0000000..c2dc91d
--- /dev/null
+++ b/darwin_description/urdf/charge/charge_env.xacro
@@ -0,0 +1,11 @@
+<robot name="bioloid" xmlns:xacro="http://www.ros.org/wiki/xacro">
+ 
+  <xacro:include filename="$(find bioloid_description)/urdf/ceabot/obstacle_base.xacro" />
+  <xacro:include filename="$(find darwin_description)/urdf/charge/charge_station.xacro" />
+
+  <xacro:obstacle_base name="obstacle_base"/>
+  <xacro:charge_station name="station" parent="obstacle_base">
+    <origin xyz="0.5 0.5 0.0" rpy="0 0 0" />
+  </xacro:charge_station>
+
+</robot>
diff --git a/darwin_description/urdf/charge/charge_station.xacro b/darwin_description/urdf/charge/charge_station.xacro
new file mode 100644
index 0000000..8dd1e19
--- /dev/null
+++ b/darwin_description/urdf/charge/charge_station.xacro
@@ -0,0 +1,152 @@
+<?xml version="1.0"?>
+
+<root xmlns:xacro="http://ros.org/wiki/xacro">
+
+  <xacro:include filename="$(find bioloid_description)/urdf/qrcodes/qrcode.xacro" />
+
+  <xacro:macro name="charge_station" params="name parent *origin">
+    <!-- charge station support -->
+    <link name="${name}_support_link">
+      <inertial>
+        <mass value="0.20000000"/>
+        <origin xyz="0.00000000 0.00000000 0.25000000" rpy="0 0 0"/>
+        <inertia ixx="0.00417484" ixy="0.0" ixz="0.0" iyy="0.00417484" iyz="0.0" izz="0.00001634" />
+      </inertial>
+      <visual>
+        <origin xyz="0 0 0" rpy="0 0 0"/>
+        <geometry>
+          <mesh filename="package://darwin_description/meshes/charge/charge_support.stl"/>
+        </geometry>
+      </visual>
+      <collision>
+        <origin xyz="0 0 0" rpy="0 0 0"/>
+        <geometry>
+          <mesh filename="package://darwin_description/meshes/charge/charge_support.stl"/>
+        </geometry>
+      </collision>
+    </link>
+
+    <joint name="${name}_support_joint" type="fixed">
+      <xacro:insert_block name="origin" />
+      <parent link="${parent}_link"/>
+      <child link="${name}_support_link"/>
+    </joint>
+
+    <!-- charge station far QR -->
+    <link name="${name}_far_qr_link">
+      <inertial>
+        <mass value="0.10000000"/>
+        <origin xyz="0.00000000 0.00000000 0.000000" rpy="0 0 0"/>
+        <inertia ixx="0.00017000" ixy="0.0" ixz="0.0" iyy="0.00017000" iyz="0.0" izz="0.00017333" />
+      </inertial>
+      <visual>
+        <origin xyz="0 0 0" rpy="0 0 0"/>
+        <geometry>
+          <mesh filename="package://darwin_description/meshes/charge/far_qr.stl"/>
+        </geometry>
+      </visual>
+      <collision>
+        <origin xyz="0 0 0" rpy="0 0 0"/>
+        <geometry>
+          <mesh filename="package://darwin_description/meshes/charge/far_qr.stl"/>
+        </geometry>
+      </collision>
+    </link>
+
+    <joint name="${name}_far_qr_joint" type="fixed">
+      <origin xyz="0.0 0.0 0.4" rpy="0 0 0"/>
+      <parent link="${name}_support_link"/>
+      <child link="${name}_far_qr_link"/>
+    </joint>
+
+    <xacro:qrcode name="${name}_north" parent="${name}_far_qr" code="N1" size="0.07">
+      <origin xyz="0.0501 0.0 0.0" rpy="-1.5707 0 1.5707" />
+    </xacro:qrcode>
+
+    <xacro:qrcode name="${name}_south" parent="${name}_far_qr" code="S1" size="0.07">
+      <origin xyz="-0.0501 0.0 0.0" rpy="-1.5707 0 -1.5707" />
+    </xacro:qrcode>
+
+    <xacro:qrcode name="${name}_west" parent="${name}_far_qr" code="W1" size="0.07">
+      <origin xyz="0.0 0.0501 0.0" rpy="1.5707 3.14159 0" />
+    </xacro:qrcode>
+
+    <xacro:qrcode name="${name}_east" parent="${name}_far_qr" code="E1" size="0.07">
+      <origin xyz="0.0 -0.0501 0.0" rpy="1.5707 3.14159 3.14159 " />
+    </xacro:qrcode>
+
+    <!-- charge station connector -->
+    <link name="${name}_connector_link">
+      <inertial>
+        <mass value="0.10000000"/>
+        <origin xyz="0.00000000 0.00000000 0.000000" rpy="0 0 0"/>
+        <inertia ixx="0.00014464" ixy="0.0" ixz="0.0" iyy="0.00014464" iyz="0.0" izz="0.00028761" />
+      </inertial>
+      <visual>
+        <origin xyz="0 0 0" rpy="0 0 0"/>
+        <geometry>
+          <mesh filename="package://darwin_description/meshes/charge/connector.stl"/>
+        </geometry>
+      </visual>
+      <collision>
+        <origin xyz="0 0 0" rpy="0 0 0"/>
+        <geometry>
+          <mesh filename="package://darwin_description/meshes/charge/connector.stl"/>
+        </geometry>
+      </collision>
+    </link>
+
+    <joint name="${name}_connector_joint" type="fixed">
+      <origin xyz="0.0 0.0 0.2" rpy="0 0 0"/>
+      <parent link="${name}_support_link"/>
+      <child link="${name}_connector_link"/>
+    </joint>
+
+    <!-- charge station near_qr -->
+    <link name="${name}_near_qr_link">
+      <inertial>
+        <mass value="0.10000000"/>
+        <origin xyz="0.00000000 0.00000000 0.000000" rpy="0 0 0"/>
+        <inertia ixx="0.00008564" ixy="0.0" ixz="0.0" iyy="0.00008564" iyz="0.0" izz="0.00016968" />
+      </inertial>
+      <visual>
+        <origin xyz="0 0 0" rpy="0 0 0"/>
+        <geometry>
+          <mesh filename="package://darwin_description/meshes/charge/near_qr.stl"/>
+        </geometry>
+      </visual>
+      <collision>
+        <origin xyz="0 0 0" rpy="0 0 0"/>
+        <geometry>
+          <mesh filename="package://darwin_description/meshes/charge/near_qr.stl"/>
+        </geometry>
+      </collision>
+    </link>
+
+    <joint name="${name}_near_qr_joint" type="fixed">
+      <origin xyz="0.0 0.0 0.3" rpy="0 0 0"/>
+      <parent link="${name}_support_link"/>
+      <child link="${name}_near_qr_link"/>
+    </joint>
+
+    <gazebo reference="${name}_support_link">
+<!--      <gravity>true</gravity>
+      <selfCollide>false</selfCollide>
+      <maxContacts>10</maxContacts>
+      <dampingFactor>0.2</dampingFactor>
+      <maxVel>0.0</maxVel>
+      <minDepth>0.0</minDepth>
+      <mu1>0.200000</mu1>
+      <mu2>0.200000</mu2>
+      <kp>0.0</kp>
+      <kd>0.0</kd>-->
+    </gazebo>
+
+<!--    <gazebo reference="${name}_support_joint">
+      <implicitSpringDamper>true</implicitSpringDamper>
+      <stopCfm>0.0</stopCfm>
+      <stopErp>0.0</stopErp>
+    </gazebo>-->
+
+  </xacro:macro>
+</root>
-- 
GitLab