Benson пре 3 година
родитељ
комит
08f2ffc2f8
100 измењених фајлова са 2516 додато и 0 уклоњено
  1. 1 0
      CowdungCartProject/.gitignore
  2. 8 0
      CowdungCartProject/.idea/.gitignore
  3. 4 0
      CowdungCartProject/.idea/encodings.xml
  4. 6 0
      CowdungCartProject/.idea/inspectionProfiles/profiles_settings.xml
  5. 10 0
      CowdungCartProject/.idea/misc.xml
  6. 8 0
      CowdungCartProject/.idea/modules.xml
  7. 21 0
      CowdungCartProject/.idea/roswebconsole.iml
  8. 16 0
      CowdungCartProject/.travis.yml
  9. BIN
      CowdungCartProject/1080102_閮毀蝪∪瑼_pdf
  10. 51 0
      CowdungCartProject/README.md
  11. BIN
      CowdungCartProject/__pycache__/manage.cpython-35.pyc
  12. 63 0
      CowdungCartProject/app/__init__.py
  13. BIN
      CowdungCartProject/app/__pycache__/__init__.cpython-35.pyc
  14. BIN
      CowdungCartProject/app/__pycache__/models.cpython-35.pyc
  15. 14 0
      CowdungCartProject/app/chassisc01t20/CMakeLists.txt
  16. 1 0
      CowdungCartProject/app/chassisc01t20/config/joint_names_chassisc01t20.yaml
  17. 5 0
      CowdungCartProject/app/chassisc01t20/include/description_chassisc.launch.xml
  18. 26 0
      CowdungCartProject/app/chassisc01t20/launch/display.launch
  19. 20 0
      CowdungCartProject/app/chassisc01t20/launch/gazebo.launch
  20. 5 0
      CowdungCartProject/app/chassisc01t20/map/map.pgm
  21. 7 0
      CowdungCartProject/app/chassisc01t20/map/map.yaml
  22. BIN
      CowdungCartProject/app/chassisc01t20/meshes/Empty_LinkL.STL
  23. BIN
      CowdungCartProject/app/chassisc01t20/meshes/Empty_LinkR.STL
  24. BIN
      CowdungCartProject/app/chassisc01t20/meshes/Empty_Link_IMU.STL
  25. BIN
      CowdungCartProject/app/chassisc01t20/meshes/Empty_Link_base.STL
  26. BIN
      CowdungCartProject/app/chassisc01t20/meshes/Empty_Link_lidar1.STL
  27. 19 0
      CowdungCartProject/app/chassisc01t20/navigation/chassisc_move_base.launch
  28. 28 0
      CowdungCartProject/app/chassisc01t20/navigation/chassisc_navigation.launch
  29. 26 0
      CowdungCartProject/app/chassisc01t20/navigation/params/base_local_planner_params.yaml
  30. 13 0
      CowdungCartProject/app/chassisc01t20/navigation/params/costmap_common_params_chassisc.yaml
  31. 47 0
      CowdungCartProject/app/chassisc01t20/navigation/params/dwa_local_planner_params_chassisc.yaml
  32. 10 0
      CowdungCartProject/app/chassisc01t20/navigation/params/global_costmap_params.yaml
  33. 14 0
      CowdungCartProject/app/chassisc01t20/navigation/params/local_costmap_params.yaml
  34. 9 0
      CowdungCartProject/app/chassisc01t20/navigation/params/move_base_params.yaml
  35. 21 0
      CowdungCartProject/app/chassisc01t20/package.xml
  36. 40 0
      CowdungCartProject/app/chassisc01t20/slam/chassisc_gmapping.launch
  37. 24 0
      CowdungCartProject/app/chassisc01t20/slam/chassisc_slam.launch
  38. 264 0
      CowdungCartProject/app/chassisc01t20/urdf/chassisc01t20.urdf.xacro
  39. 14 0
      CowdungCartProject/app/chassisc01t5/CMakeLists.txt
  40. BIN
      CowdungCartProject/app/chassisc01t5/frames.pdf
  41. 5 0
      CowdungCartProject/app/chassisc01t5/include/description_chassisc.launch.xml
  42. 17 0
      CowdungCartProject/app/chassisc01t5/launch/chassisc_model.launch
  43. 26 0
      CowdungCartProject/app/chassisc01t5/launch/display.launch
  44. 20 0
      CowdungCartProject/app/chassisc01t5/launch/gazebo.launch
  45. 5 0
      CowdungCartProject/app/chassisc01t5/map/map.pgm
  46. 7 0
      CowdungCartProject/app/chassisc01t5/map/map.yaml
  47. BIN
      CowdungCartProject/app/chassisc01t5/meshes/Empty_Link_L.STL
  48. BIN
      CowdungCartProject/app/chassisc01t5/meshes/Empty_Link_M.STL
  49. BIN
      CowdungCartProject/app/chassisc01t5/meshes/Empty_Link_R.STL
  50. BIN
      CowdungCartProject/app/chassisc01t5/meshes/Empty_Link_lidar.STL
  51. BIN
      CowdungCartProject/app/chassisc01t5/meshes/base/base_link.STL
  52. BIN
      CowdungCartProject/app/chassisc01t5/meshes/base_link.STL
  53. BIN
      CowdungCartProject/app/chassisc01t5/meshes/sensors/Empty_Link_IMU.STL
  54. BIN
      CowdungCartProject/app/chassisc01t5/meshes/sensors/Empty_Link_lidar.STL
  55. BIN
      CowdungCartProject/app/chassisc01t5/meshes/wheels/Empty_LinkL.STL
  56. BIN
      CowdungCartProject/app/chassisc01t5/meshes/wheels/Empty_LinkR.STL
  57. 193 0
      CowdungCartProject/app/chassisc01t5/model.rviz
  58. 19 0
      CowdungCartProject/app/chassisc01t5/navigation/chassisc_move_base.launch
  59. 28 0
      CowdungCartProject/app/chassisc01t5/navigation/chassisc_navigation.launch
  60. 26 0
      CowdungCartProject/app/chassisc01t5/navigation/params/base_local_planner_params.yaml
  61. 13 0
      CowdungCartProject/app/chassisc01t5/navigation/params/costmap_common_params_chassisc.yaml
  62. 47 0
      CowdungCartProject/app/chassisc01t5/navigation/params/dwa_local_planner_params_chassisc.yaml
  63. 10 0
      CowdungCartProject/app/chassisc01t5/navigation/params/global_costmap_params.yaml
  64. 14 0
      CowdungCartProject/app/chassisc01t5/navigation/params/local_costmap_params.yaml
  65. 9 0
      CowdungCartProject/app/chassisc01t5/navigation/params/move_base_params.yaml
  66. 21 0
      CowdungCartProject/app/chassisc01t5/package.xml
  67. BIN
      CowdungCartProject/app/chassisc01t5/rosgraph.png
  68. 40 0
      CowdungCartProject/app/chassisc01t5/slam/chassisc_gmapping.launch
  69. 24 0
      CowdungCartProject/app/chassisc01t5/slam/chassisc_slam.launch
  70. 268 0
      CowdungCartProject/app/chassisc01t5/urdf/chassisc01t20.urdf.xacro
  71. 183 0
      CowdungCartProject/app/chassisc01t5/urdf/chassisc01t5.urdf.xacro
  72. 272 0
      CowdungCartProject/app/chassisc01t5/urdf/chassisc11214.urdf.xacro
  73. 5 0
      CowdungCartProject/app/main/__init__.py
  74. BIN
      CowdungCartProject/app/main/__pycache__/__init__.cpython-35.pyc
  75. BIN
      CowdungCartProject/app/main/__pycache__/views.cpython-35.pyc
  76. 363 0
      CowdungCartProject/app/main/views.py
  77. 96 0
      CowdungCartProject/app/models.py
  78. 3 0
      CowdungCartProject/app/set_goal/point.txt
  79. 3 0
      CowdungCartProject/app/set_goal/point_20181222150735.txt
  80. 2 0
      CowdungCartProject/app/set_goal/time.txt
  81. 2 0
      CowdungCartProject/app/set_goal/time_20181224111222.txt
  82. BIN
      CowdungCartProject/app/static/css/images/ajax-loader.gif
  83. BIN
      CowdungCartProject/app/static/css/images/icons-png/action-black.png
  84. BIN
      CowdungCartProject/app/static/css/images/icons-png/action-white.png
  85. BIN
      CowdungCartProject/app/static/css/images/icons-png/alert-black.png
  86. BIN
      CowdungCartProject/app/static/css/images/icons-png/alert-white.png
  87. BIN
      CowdungCartProject/app/static/css/images/icons-png/arrow-d-black.png
  88. BIN
      CowdungCartProject/app/static/css/images/icons-png/arrow-d-l-black.png
  89. BIN
      CowdungCartProject/app/static/css/images/icons-png/arrow-d-l-white.png
  90. BIN
      CowdungCartProject/app/static/css/images/icons-png/arrow-d-r-black.png
  91. BIN
      CowdungCartProject/app/static/css/images/icons-png/arrow-d-r-white.png
  92. BIN
      CowdungCartProject/app/static/css/images/icons-png/arrow-d-white.png
  93. BIN
      CowdungCartProject/app/static/css/images/icons-png/arrow-l-black.png
  94. BIN
      CowdungCartProject/app/static/css/images/icons-png/arrow-l-white.png
  95. BIN
      CowdungCartProject/app/static/css/images/icons-png/arrow-r-black.png
  96. BIN
      CowdungCartProject/app/static/css/images/icons-png/arrow-r-white.png
  97. BIN
      CowdungCartProject/app/static/css/images/icons-png/arrow-u-black.png
  98. BIN
      CowdungCartProject/app/static/css/images/icons-png/arrow-u-l-black.png
  99. BIN
      CowdungCartProject/app/static/css/images/icons-png/arrow-u-l-white.png
  100. 0 0
      CowdungCartProject/app/static/css/images/icons-png/arrow-u-r-black.png

+ 1 - 0
CowdungCartProject/.gitignore

@@ -0,0 +1 @@
+TEST/

+ 8 - 0
CowdungCartProject/.idea/.gitignore

@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/

+ 4 - 0
CowdungCartProject/.idea/encodings.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding" addBOMForNewFiles="with NO BOM" />
+</project>

+ 6 - 0
CowdungCartProject/.idea/inspectionProfiles/profiles_settings.xml

@@ -0,0 +1,6 @@
+<component name="InspectionProjectProfileManager">
+  <settings>
+    <option name="USE_PROJECT_PROFILE" value="false" />
+    <version value="1.0" />
+  </settings>
+</component>

+ 10 - 0
CowdungCartProject/.idea/misc.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="JavaScriptSettings">
+    <option name="languageLevel" value="ES6" />
+  </component>
+  <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.5" project-jdk-type="Python SDK" />
+  <component name="PyCharmProfessionalAdvertiser">
+    <option name="shown" value="true" />
+  </component>
+</project>

+ 8 - 0
CowdungCartProject/.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/roswebconsole.iml" filepath="$PROJECT_DIR$/.idea/roswebconsole.iml" />
+    </modules>
+  </component>
+</project>

+ 21 - 0
CowdungCartProject/.idea/roswebconsole.iml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="PYTHON_MODULE" version="4">
+  <component name="Flask">
+    <option name="enabled" value="true" />
+  </component>
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$">
+      <excludeFolder url="file://$MODULE_DIR$/venv" />
+    </content>
+    <orderEntry type="jdk" jdkName="Python 3.5" jdkType="Python SDK" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+  <component name="TemplatesService">
+    <option name="TEMPLATE_CONFIGURATION" value="Jinja2" />
+    <option name="TEMPLATE_FOLDERS">
+      <list>
+        <option value="$MODULE_DIR$/../roswebconsole\templates" />
+      </list>
+    </option>
+  </component>
+</module>

+ 16 - 0
CowdungCartProject/.travis.yml

@@ -0,0 +1,16 @@
+language: node_js
+
+node_js:
+  - "0.10"
+
+branches:
+  only:
+    - responsive
+
+before_script:
+  - npm install -g grunt-cli
+  - cd utils
+  - npm install .
+
+script:
+  - grunt build

BIN
CowdungCartProject/1080102_閮毀蝪∪瑼_pdf


+ 51 - 0
CowdungCartProject/README.md

@@ -0,0 +1,51 @@
+ROS web console [![Build Status](https://travis-ci.org/rbonghi/roswebconsole.svg)](https://travis-ci.org/rbonghi/roswebconsole)
+=======
+System interface to control a robot under ROS with web page.
+
+[![Video](https://i.ytimg.com/vi/fhCHS7ibFrw/mqdefault.jpg)](https://www.youtube.com/watch?v=fhCHS7ibFrw)
+
+:loudspeaker: **See demo console in: http://rbonghi.github.io/roswebconsole/** :loudspeaker:
+#### OLD version
+**console in: http://rbonghi.github.io/roswebconsole/index_old.html**
+
+#Dependencies
+This web console depends on:
+- [EventEmitter2](https://github.com/hij1nx/EventEmitter2). The current supported version is 0.4.14.
+- [three.js](https://github.com/mrdoob/three.js/). The current supported version is r61.
+- ~~[ColladaLoader2](https://github.com/crobi/ColladaAnimationCompress). The current supported version is 0.0.1.~~
+- ~~[THREE.ColladaLoader](https://github.com/mrdoob/three.js/blob/master/examples/js/loaders/ColladaLoader.js). The current supported version is r61.~~
+- [THREE.STLLoader](https://github.com/mrdoob/three.js/blob/master/examples/js/loaders/STLLoader.js). The current supported version is r61.
+- [EaselJS](https://github.com/CreateJS/EaselJS/). The current supported version is 0.7.1.
+- [roslibjs](https://github.com/RobotWebTools/roslibjs). The current supported version is 0.14.0.
+- [ros2djs](https://github.com/RobotWebTools/ros2djs). The current supported version is 0.6.0.
+- [ros3djs](https://github.com/RobotWebTools/ros3djs). The current supported version is 0.15.0.
+
+###All files are stored in folder [js/ros](https://github.com/rbonghi/roswebconsole/tree/master/js/ros)
+
+##ROS Dependencies
+```
+$ sudo apt-get install
+```
+
+#Installation
+* Follow the guide on [Install lighttpd and Codiad](http://raffaello.officinerobotiche.it/4ude/how-to-install-lighttpd-and-codiad/)
+* Clone this project and change owner:
+```
+cd /var/www/
+git clone https://github.com/rbonghi/roswebconsole.git/
+sudo chown -R www-data:www-data roswebconsole/ 
+```
+* Now you can update your lighttpd server configuration in `/etc/lighttpd/lighttpd.conf` with this commands:
+	* Change root:
+	```
+	server.document-root        = "/var/www/roswebconsole"
+	```
+	* Add alias
+	```
+	alias.url = ( "/Codiad" => "/var/www/Codiad" )
+	alias.url += ( "/ROBOT_description" => "/home/USER/catkin_ws/src/ROBOT_description" )
+	```
+	An example for my robot [4UDE](http://raffaello.officinerobotiche.it/4ude/):
+	```
+	alias.url += ( "/dude_description" => "/home/USER/catkin_ws/src/ros_dude/dude_description" )
+	```

BIN
CowdungCartProject/__pycache__/manage.cpython-35.pyc


+ 63 - 0
CowdungCartProject/app/__init__.py

@@ -0,0 +1,63 @@
+#對整個應用做初始化操作
+#主要工作:
+# 1.構建Flask的應用以及各種配置
+#2.構建SQLAlchemy的應用
+
+from flask import Flask
+from flask_sqlalchemy import SQLAlchemy
+import pymysql
+#import eventlet
+from flask_mqtt import Mqtt
+
+#綠化(綠色線程)所有系統模組,實現IO多路複用
+# eventlet.monkey_patch()
+
+pymysql.install_as_MySQLdb()
+
+
+
+
+def create_app():
+    global db, mqtt
+    app = Flask(__name__)
+    #配置啟動模式為調適模式
+    # app.config['DEBUG'] = True
+    #配置數據庫的連接字符串
+    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://cowdungcart:skyeye@52.69.200.169:3306/CowdungCart'
+    #配置數據庫內容再更新時自動提交
+    app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
+    #配置session所需要的秘鑰
+    app.config['SECRET_KEY'] = 'you guess'
+    # template 有修改後,會自動去更新
+    app.config['TEMPLATES_AUTO_RELOAD'] = True
+    # 如果设置成True(默认情况),Flask - SQLAlchemy将会追踪对象的修改并且发送信号。这需要额外的内存, 如果不必要的可以禁用它
+    app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True
+    #資料库连接池的大小。默认是数据库引擎的默认值 (通常是5)
+    app.config['SQLALCHEMY_POOL_SIZE'] = 100
+    #指定資料库连接池的超时时间。默认是 10
+    app.config['SQLALCHEMY_POOL_TIMEOUT'] = 60 * 60
+    #自动回收连接的秒数。这对 MySQL 是必须的,默认 情况下 MySQL 会自动移除闲置 8 小时或者以上的连接。 需要注意地是如果使用 MySQL 的话, Flask-SQLAlchemy 会自动地设置这个值为 2 小时
+    app.config['SQLALCHEMY_MAX_OVERFLOW'] = 15
+
+    app.config['SECRET'] = 'my secret key'
+    #MQTT相關設置
+    app.config['MQTT_BROKER_URL'] = '60.250.156.234'
+    app.config['MQTT_BROKER_PORT'] = 1883
+    app.config['MQTT_USERNAME'] = 'aisky-client'
+    app.config['MQTT_PASSWORD'] = 'aiskyc'
+    #將發送ping到代理的時間間隔設置60秒
+    app.config['MQTT_KEEPALIVE'] = 60
+    #出於測試目的將TLS設置為禁用
+    app.config['MQTT_TLS_ENABLED'] = False
+
+    #數據庫的初始化
+    db = SQLAlchemy(app)
+    db.init_app(app)
+    mqtt = Mqtt(app)
+
+
+    #將main藍圖程序與app關聯到一起
+    from .main import main as main_blueprint
+    app.register_blueprint(main_blueprint)
+
+    return app, db, mqtt

BIN
CowdungCartProject/app/__pycache__/__init__.cpython-35.pyc


BIN
CowdungCartProject/app/__pycache__/models.cpython-35.pyc


+ 14 - 0
CowdungCartProject/app/chassisc01t20/CMakeLists.txt

@@ -0,0 +1,14 @@
+cmake_minimum_required(VERSION 2.8.3)
+
+project(chassisc01t20)
+
+find_package(catkin REQUIRED)
+
+catkin_package()
+
+find_package(roslaunch)
+
+foreach(dir config launch meshes urdf)
+	install(DIRECTORY ${dir}/
+		DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/${dir})
+endforeach(dir)

+ 1 - 0
CowdungCartProject/app/chassisc01t20/config/joint_names_chassisc01t20.yaml

@@ -0,0 +1 @@
+controller_joint_names: ['L', 'R', 'lidar1', ]

+ 5 - 0
CowdungCartProject/app/chassisc01t20/include/description_chassisc.launch.xml

@@ -0,0 +1,5 @@
+<launch>
+  <arg name="model"/>
+  <arg name="urdf_file" default="$(find xacro)/xacro --inorder '$(find chassisc01t5)/urdf/chassisc01t5.urdf.xacro'" />
+  <param name="robot_description" command="$(arg urdf_file)" />
+</launch>

+ 26 - 0
CowdungCartProject/app/chassisc01t20/launch/display.launch

@@ -0,0 +1,26 @@
+<launch>
+  <arg
+    name="model" />
+  <arg
+    name="gui"
+    default="False" />
+  <param
+    name="robot_description"
+    textfile="$(find chassisc01t20)/robots/chassisc01t20.urdf" />
+  <param
+    name="use_gui"
+    value="$(arg gui)" />
+  <node
+    name="joint_state_publisher"
+    pkg="joint_state_publisher"
+    type="joint_state_publisher" />
+  <node
+    name="robot_state_publisher"
+    pkg="robot_state_publisher"
+    type="state_publisher" />
+  <node
+    name="rviz"
+    pkg="rviz"
+    type="rviz"
+    args="-d $(find chassisc01t20)/urdf.rviz" />
+</launch>

+ 20 - 0
CowdungCartProject/app/chassisc01t20/launch/gazebo.launch

@@ -0,0 +1,20 @@
+<launch>
+  <include
+    file="$(find gazebo_ros)/launch/empty_world.launch" />
+  <node
+    name="tf_footprint_base"
+    pkg="tf"
+    type="static_transform_publisher"
+    args="0 0 0 0 0 0 base_link base_footprint 40" />
+  <node
+    name="spawn_model"
+    pkg="gazebo_ros"
+    type="spawn_model"
+    args="-file $(find chassisc01t20)/robots/chassisc01t20.urdf -urdf -model chassisc01t20"
+    output="screen" />
+  <node
+    name="fake_joint_calibration"
+    pkg="rostopic"
+    type="rostopic"
+    args="pub /calibrated std_msgs/Bool true" />
+</launch>

Разлика између датотеке није приказан због своје велике величине
+ 5 - 0
CowdungCartProject/app/chassisc01t20/map/map.pgm


+ 7 - 0
CowdungCartProject/app/chassisc01t20/map/map.yaml

@@ -0,0 +1,7 @@
+image: map.pgm
+resolution: 0.050000
+origin: [-10.000000, -10.000000, 0.000000]
+negate: 0
+occupied_thresh: 0.65
+free_thresh: 0.196
+

BIN
CowdungCartProject/app/chassisc01t20/meshes/Empty_LinkL.STL


BIN
CowdungCartProject/app/chassisc01t20/meshes/Empty_LinkR.STL


BIN
CowdungCartProject/app/chassisc01t20/meshes/Empty_Link_IMU.STL


BIN
CowdungCartProject/app/chassisc01t20/meshes/Empty_Link_base.STL


BIN
CowdungCartProject/app/chassisc01t20/meshes/Empty_Link_lidar1.STL


+ 19 - 0
CowdungCartProject/app/chassisc01t20/navigation/chassisc_move_base.launch

@@ -0,0 +1,19 @@
+<launch>
+  <!-- Arguments -->
+  <arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>
+  <arg name="cmd_vel_topic" default="/cmd_vel" />
+  <arg name="odom_topic" default="odom" />
+
+  <!-- move_base -->
+  <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
+    <param name="base_local_planner" value="dwa_local_planner/DWAPlannerROS" />
+    <rosparam file="$(find chassisc01t5)/navigation/params/costmap_common_params_chassisc.yaml" command="load" ns="global_costmap" />
+    <rosparam file="$(find chassisc01t5)/navigation/params/costmap_common_params_chassisc.yaml" command="load" ns="local_costmap" />
+    <rosparam file="$(find chassisc01t5)/navigation/params/local_costmap_params.yaml" command="load" />
+    <rosparam file="$(find chassisc01t5)/navigation/params/global_costmap_params.yaml" command="load" />
+    <rosparam file="$(find chassisc01t5)/navigation/params/move_base_params.yaml" command="load" />
+    <rosparam file="$(find chassisc01t5)/navigation/params/dwa_local_planner_params_chassisc.yaml" command="load" />
+    <remap from="cmd_vel" to="$(arg cmd_vel_topic)"/>
+    <remap from="odom" to="$(arg odom_topic)"/>
+  </node>
+</launch>

+ 28 - 0
CowdungCartProject/app/chassisc01t20/navigation/chassisc_navigation.launch

@@ -0,0 +1,28 @@
+<launch>
+  <!-- Arguments -->
+  <arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>
+  <arg name="map_file" default="$(find chassisc01t5)/map/map.yaml"/>
+  <arg name="open_rviz" default="true"/>
+
+  <!-- Turtlebot3 -->
+  <include file="$(find turtlebot3_bringup)/launch/turtlebot3_remote.launch">
+    <arg name="model" value="$(arg model)" />
+  </include>
+
+  <!-- Map server -->
+  <node pkg="map_server" name="map_server" type="map_server" args="$(arg map_file)"/>
+
+  <!-- AMCL -->
+  <include file="$(find turtlebot3_navigation)/launch/amcl.launch"/>
+
+  <!-- move_base -->
+  <include file="$(find chassisc01t5)/navigation/chassisc_move_base.launch">
+    <arg name="model" value="$(arg model)" />
+  </include>
+
+  <!-- rviz -->
+  <group if="$(arg open_rviz)"> 
+    <node pkg="rviz" type="rviz" name="rviz" required="true"
+          args="-d $(find turtlebot3_navigation)/rviz/turtlebot3_navigation.rviz"/>
+  </group>
+</launch>

+ 26 - 0
CowdungCartProject/app/chassisc01t20/navigation/params/base_local_planner_params.yaml

@@ -0,0 +1,26 @@
+TrajectoryPlannerROS:
+
+# Robot Configuration Parameters
+  max_vel_x: 0.18
+  min_vel_x: 0.08
+
+  max_vel_theta:  1.0
+  min_vel_theta: -1.0
+  min_in_place_vel_theta: 1.0 #原地旋轉最小速度
+
+  acc_lim_x: 1.0
+  acc_lim_y: 0.0
+  acc_lim_theta: 0.6
+
+# Goal Tolerance Parameters
+  xy_goal_tolerance: 0.10 #地圖平面xy容忍的最大誤差
+  yaw_goal_tolerance: 0.05 #航向角容忍的最大誤差
+
+# Differential-drive robot configuration
+  holonomic_robot: false #全向輪設置true
+
+# Forward Simulation Parameters
+  sim_time: 1.0 #路徑規劃考慮多少秒的移動軌跡
+  vx_samples: 18
+  vtheta_samples: 20
+  sim_granularity: 0.05

+ 13 - 0
CowdungCartProject/app/chassisc01t20/navigation/params/costmap_common_params_chassisc.yaml

@@ -0,0 +1,13 @@
+obstacle_range: 3.0 #決定在local costmap裡多遠的距離以內被當成障礙顯示
+raytrace_range: 3.5 #設置機器人檢測自由空間的最大範圍(M) 
+
+footprint: [[-0.408, -0.326], [-0.408, 0.326], [0.425, 0.326], [0.425, -0.326]]
+#robot_radius: 0.17
+#機器人底盤形狀 圓形使用robot_radius 非圓形使用footprint
+
+inflation_radius: 1.0 #costmap的膨脹半徑
+cost_scaling_factor: 3.0
+
+map_type: costmap
+observation_sources: scan #用來設置障礙物檢測方法
+scan: {sensor_frame: base_scan, data_type: LaserScan, topic: scan, marking: true, clearing: true}

+ 47 - 0
CowdungCartProject/app/chassisc01t20/navigation/params/dwa_local_planner_params_chassisc.yaml

@@ -0,0 +1,47 @@
+DWAPlannerROS:
+
+# Robot Configuration Parameters 配置參數
+  max_vel_x: 0.15
+  min_vel_x: -0.15
+
+  max_vel_y: 0.0
+  min_vel_y: 0.0
+
+# The velocity when robot is moving in a straight line 
+  max_trans_vel:  0.10
+  min_trans_vel:  0.08
+
+  max_rot_vel: 1.0
+  min_rot_vel: 0.5
+
+  acc_lim_x: 1.0
+  acc_lim_y: 0.0
+  acc_lim_theta: 2.0 
+
+# Goal Tolerance Parametes 目標容差參數
+  xy_goal_tolerance: 0.05
+  yaw_goal_tolerance: 0.17
+  latch_xy_goal_tolerance: false
+
+# Forward Simulation Parameters 前進模擬參數
+  sim_time: 3.0
+  vx_samples: 20
+  vy_samples: 0
+  vtheta_samples: 40
+  controller_frequency: 5.0
+
+# Trajectory Scoring Parameters 軌跡評分參數
+  path_distance_bias: 32.0
+  goal_distance_bias: 20.0
+  occdist_scale: 0.04
+  forward_point_distance: 0.325
+  stop_time_buffer: 0.2
+  scaling_speed: 0.25
+  max_scaling_factor: 0.2
+
+# Oscillation Prevention Parameters 震盪預防參數
+  oscillation_reset_dist: 0.02
+
+# Debugging
+  publish_traj_pc : true
+  publish_cost_grid_pc: true

+ 10 - 0
CowdungCartProject/app/chassisc01t20/navigation/params/global_costmap_params.yaml

@@ -0,0 +1,10 @@
+global_costmap:
+  global_frame: /map
+  robot_base_frame: /base_footprint
+
+  update_frequency: 5.0 #感測器數據更新的頻率 降低可減少cpu負載
+  publish_frequency: 10.0 #發佈對於global static map
+  transform_tolerance: 5 #tf座標系統更新容忍的最大延遲(秒)
+
+  static_map: true
+ 

+ 14 - 0
CowdungCartProject/app/chassisc01t20/navigation/params/local_costmap_params.yaml

@@ -0,0 +1,14 @@
+local_costmap:
+  global_frame: /odom
+  robot_base_frame: /base_footprint
+
+  update_frequency: 5.0 #感測器數據更新的頻率 降低減少cpu負載
+  publish_frequency: 10.0 #地圖發佈的更新頻率
+  transform_tolerance: 0.5 #tf座標系統更新容忍的最大延遲
+ 
+  static_map: false  
+  rolling_window: true
+  width: 3 #局部地圖大小
+  height: 3
+  resolution: 0.05 #分辨率要與使用地圖yaml文件中描述的分辨率一致
+  

+ 9 - 0
CowdungCartProject/app/chassisc01t20/navigation/params/move_base_params.yaml

@@ -0,0 +1,9 @@
+shutdown_costmaps: false
+controller_frequency: 10.0
+planner_patience: 5.0
+controller_patience: 15.0
+conservative_reset_dist: 3.0
+planner_frequency: 5.0
+oscillation_timeout: 10.0
+oscillation_distance: 0.2
+

+ 21 - 0
CowdungCartProject/app/chassisc01t20/package.xml

@@ -0,0 +1,21 @@
+<package>
+  <name>chassisc01t20</name>
+  <version>1.0.0</version>
+  <description>
+    <p>URDF Description package for chassisc01t20</p>
+    <p>This package contains configuration data, 3D models and launch files
+for chassisc01t20 robot</p>
+  </description>
+  <author>me</author>
+  <maintainer email="me2email.com" />
+  <license>BSD</license>
+  <buildtool_depend>catkin</buildtool_depend>
+  <build_depend>roslaunch</build_depend>
+  <run_depend>robot_state_publisher</run_depend>
+  <run_depend>rviz</run_depend>
+  <run_depend>joint_state_publisher</run_depend>
+  <run_depend>gazebo</run_depend>
+  <export>
+    <architecture_independent />
+  </export>
+</package>

+ 40 - 0
CowdungCartProject/app/chassisc01t20/slam/chassisc_gmapping.launch

@@ -0,0 +1,40 @@
+<launch>
+  <!-- Arguments -->
+  <arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>
+  <arg name="configuration_basename" default="turtlebot3_lds_2d.lua"/>
+
+  <!-- Gmapping -->
+  <node pkg="gmapping" type="slam_gmapping" name="turtlebot3_slam_gmapping" output="screen">
+    <param name="base_frame" value="base_footprint"/>
+    <param name="odom_frame" value="odom"/>
+    <param name="map_update_interval" value="5.0"/>
+    <param name="maxUrange" value="6.0"/>
+    <param name="sigma" value="0.05"/>
+    <param name="kernelSize" value="1"/>
+    <param name="lstep" value="0.05"/>
+    <param name="astep" value="0.05"/>
+    <param name="iterations" value="5"/>
+    <param name="lsigma" value="0.075"/>
+    <param name="ogain" value="3.0"/>
+    <param name="lskip" value="0"/>
+    <param name="minimumScore" value="50"/>
+    <param name="srr" value="0.1"/>
+    <param name="srt" value="0.2"/>
+    <param name="str" value="0.1"/>
+    <param name="stt" value="0.2"/>
+    <param name="linearUpdate" value="1.0"/>
+    <param name="angularUpdate" value="0.2"/>
+    <param name="temporalUpdate" value="5.0"/>
+    <param name="resampleThreshold" value="0.5"/>
+    <param name="particles" value="30"/>
+    <param name="xmin" value="-5.0"/>
+    <param name="ymin" value="-5.0"/>
+    <param name="xmax" value="5.0"/>
+    <param name="ymax" value="5.0"/>
+    <param name="delta" value="0.05"/>
+    <param name="llsamplerange" value="0.01"/>
+    <param name="llsamplestep" value="0.01"/>
+    <param name="lasamplerange" value="0.005"/>
+    <param name="lasamplestep" value="0.005"/>
+  </node>
+</launch>

+ 24 - 0
CowdungCartProject/app/chassisc01t20/slam/chassisc_slam.launch

@@ -0,0 +1,24 @@
+<launch>
+  <!-- Arguments -->
+  <arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>
+  <arg name="slam_methods" default="gmapping" doc="slam type [gmapping, cartographer, hector, karto, frontier_exploration]"/>
+  <arg name="configuration_basename" default="turtlebot3_lds_2d.lua"/>
+  <arg name="open_rviz" default="true"/>
+
+  <!-- TurtleBot3 -->
+  <include file="$(find turtlebot3_bringup)/launch/turtlebot3_remote.launch">
+    <arg name="model" value="$(arg model)" />
+  </include>
+
+  <!-- SLAM: Gmapping, Cartographer, Hector, Karto, Frontier_exploration, RTAB-Map -->
+  <include file="$(find chassisc01t5)/slam/chassisc_$(arg slam_methods).launch">
+    <arg name="model" value="$(arg model)"/>
+    <arg name="configuration_basename" value="$(arg configuration_basename)"/>
+  </include>
+
+  <!-- rviz -->
+  <group if="$(arg open_rviz)"> 
+    <node pkg="rviz" type="rviz" name="rviz" required="true"
+          args="-d $(find turtlebot3_slam)/rviz/turtlebot3_$(arg slam_methods).rviz"/>
+  </group>
+</launch>

+ 264 - 0
CowdungCartProject/app/chassisc01t20/urdf/chassisc01t20.urdf.xacro

@@ -0,0 +1,264 @@
+<robot
+  name="chassisc01t20">
+  <link
+    name="Empty_Link_base">
+    <inertial>
+      <origin
+        xyz="0.0885345206227843 0.0302013338068504 0.258248879745294"
+        rpy="0 0 0" />
+      <mass
+        value="37.2296575585584" />
+      <inertia
+        ixx="2.36854797993537"
+        ixy="-0.192388260031257"
+        ixz="-0.0744872693800959"
+        iyy="3.28060830376725"
+        iyz="-0.0748254733055264"
+        izz="3.91850536274097" />
+    </inertial>
+    <visual>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t20/meshes/Empty_Link_base.STL" />
+      </geometry>
+      <material
+        name="">
+        <color
+          rgba="0.752941176470588 0.752941176470588 0.752941176470588 1" />
+      </material>
+    </visual>
+    <collision>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t20/meshes/Empty_Link_base.STL" />
+      </geometry>
+    </collision>
+  </link>
+  <link
+    name="Empty_LinkL">
+    <inertial>
+      <origin
+        xyz="0.271037907014502 0.0750000000000225 -1.40388330014951E-05"
+        rpy="0 0 0" />
+      <mass
+        value="0.414780915122953" />
+      <inertia
+        ixx="0.00141861280714518"
+        ixy="-2.3470826387777E-18"
+        ixz="-4.86952830030497E-08"
+        iyy="0.000755116379991488"
+        iyz="6.51780763390514E-20"
+        izz="0.00075517522354909" />
+    </inertial>
+    <visual>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t20/meshes/Empty_LinkL.STL" />
+      </geometry>
+      <material
+        name="">
+        <color
+          rgba="0.792156862745098 0.819607843137255 0.933333333333333 1" />
+      </material>
+    </visual>
+    <collision>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t20/meshes/Empty_LinkL.STL" />
+      </geometry>
+    </collision>
+  </link>
+  <joint
+    name="L"
+    type="revolute">
+    <origin
+      xyz="-0.075 0.016675 0"
+      rpy="-3.1416 -4.2701E-16 1.5708" />
+    <parent
+      link="Empty_Link_base" />
+    <child
+      link="Empty_LinkL" />
+    <axis
+      xyz="1 0 0" />
+    <limit
+      effort="0"
+      velocity="0" />
+  </joint>
+  <link
+    name="Empty_LinkR">
+    <inertial>
+      <origin
+        xyz="0.271037907014991 0.153071803042887 -1.40388329566699E-05"
+        rpy="0 0 0" />
+      <mass
+        value="0.414780915122952" />
+      <inertia
+        ixx="0.00141861280714518"
+        ixy="-1.15525576751819E-17"
+        ixz="-4.86952829966063E-08"
+        iyy="0.000755116379991488"
+        iyz="-2.79182826637282E-19"
+        izz="0.00075517522354909" />
+    </inertial>
+    <visual>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t20/meshes/Empty_LinkR.STL" />
+      </geometry>
+      <material
+        name="">
+        <color
+          rgba="0.792156862745098 0.819607843137255 0.933333333333333 1" />
+      </material>
+    </visual>
+    <collision>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t20/meshes/Empty_LinkR.STL" />
+      </geometry>
+    </collision>
+  </link>
+  <joint
+    name="R"
+    type="revolute">
+    <origin
+      xyz="0.15307 -0.016626 0"
+      rpy="3.1416 -2.3485E-15 -1.5708" />
+    <parent
+      link="Empty_Link_base" />
+    <child
+      link="Empty_LinkR" />
+    <axis
+      xyz="-1 0 0" />
+    <limit
+      effort="0"
+      velocity="0" />
+  </joint>
+  <link
+    name="Empty_Link_IMU">
+    <inertial>
+      <origin
+        xyz="0.0101298792495179 -0.00333247664978228 -0.0159739514873404"
+        rpy="0 0 0" />
+      <mass
+        value="0.18030298179098" />
+      <inertia
+        ixx="6.75826322669879E-05"
+        ixy="-7.61453530645342E-10"
+        ixz="-4.66476750088034E-09"
+        iyy="0.000163683768208186"
+        iyz="-2.39202843109903E-09"
+        izz="0.000204120991568629" />
+    </inertial>
+    <visual>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t20/meshes/Empty_Link_IMU.STL" />
+      </geometry>
+      <material
+        name="">
+        <color
+          rgba="0.792156862745098 0.819607843137255 0.933333333333333 1" />
+      </material>
+    </visual>
+    <collision>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t20/meshes/Empty_Link_IMU.STL" />
+      </geometry>
+    </collision>
+  </link>
+  <joint
+    name="IMU"
+    type="fixed">
+    <origin
+      xyz="0.28887 -0.11667 0.2454"
+      rpy="1.4272E-15 0 0" />
+    <parent
+      link="Empty_Link_base" />
+    <child
+      link="Empty_Link_IMU" />
+    <axis
+      xyz="0 0 0" />
+  </joint>
+  <link
+    name="Empty_Link_lidar1">
+    <inertial>
+      <origin
+        xyz="9.87682313713378E-09 2.1094237467878E-15 0.025801757551963"
+        rpy="0 0 0" />
+      <mass
+        value="0.25729550825325" />
+      <inertia
+        ixx="0.000156803771938523"
+        ixy="-9.62964972193618E-35"
+        ixz="8.15112909603548E-22"
+        iyy="0.000156803771938523"
+        iyz="-3.56801621338702E-36"
+        izz="0.000196191810163655" />
+    </inertial>
+    <visual>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t20/meshes/Empty_Link_lidar1.STL" />
+      </geometry>
+      <material
+        name="">
+        <color
+          rgba="0.792156862745098 0.819607843137255 0.933333333333333 1" />
+      </material>
+    </visual>
+    <collision>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t20/meshes/Empty_Link_lidar1.STL" />
+      </geometry>
+    </collision>
+  </link>
+  <joint
+    name="lidar1"
+    type="revolute">
+    <origin
+      xyz="0.129 0 0.5314"
+      rpy="4.2701E-16 -1.7064E-30 3.9961E-15" />
+    <parent
+      link="Empty_Link_base" />
+    <child
+      link="Empty_Link_lidar1" />
+    <axis
+      xyz="0 0 1" />
+    <limit
+      effort="0"
+      velocity="0" />
+  </joint>
+</robot>

+ 14 - 0
CowdungCartProject/app/chassisc01t5/CMakeLists.txt

@@ -0,0 +1,14 @@
+cmake_minimum_required(VERSION 2.8.3)
+
+project(chassisc01t5)
+
+find_package(catkin REQUIRED)
+
+catkin_package()
+
+find_package(roslaunch)
+
+foreach(dir config launch meshes urdf)
+	install(DIRECTORY ${dir}/
+		DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/${dir})
+endforeach(dir)

BIN
CowdungCartProject/app/chassisc01t5/frames.pdf


+ 5 - 0
CowdungCartProject/app/chassisc01t5/include/description_chassisc.launch.xml

@@ -0,0 +1,5 @@
+<launch>
+  <arg name="model"/>
+  <arg name="urdf_file" default="$(find xacro)/xacro --inorder '$(find chassisc01t5)/urdf/chassisc11214.urdf.xacro'" />
+  <param name="robot_description" command="$(arg urdf_file)" />
+</launch>

+ 17 - 0
CowdungCartProject/app/chassisc01t5/launch/chassisc_model.launch

@@ -0,0 +1,17 @@
+<launch>
+
+  <include file="$(find chassisc01t5)/include/description_chassisc.launch.xml">
+
+  </include>
+
+  <node pkg="joint_state_publisher" type="joint_state_publisher" name="joint_state_publisher">
+    <param name="use_gui" value="true"/>
+    <param name="rate" value="50"/>
+  </node>
+
+  <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher">
+    <param name="publish_frequency" type="double" value="50.0" />
+  </node>
+
+  <node name="rviz" pkg="rviz" type="rviz" args="-d $(find chassisc01t5)/model.rviz"/>
+</launch>

+ 26 - 0
CowdungCartProject/app/chassisc01t5/launch/display.launch

@@ -0,0 +1,26 @@
+<launch>
+  <arg
+    name="model" />
+  <arg
+    name="gui"
+    default="False" />
+  <param
+    name="robot_description"
+    textfile="$(find chassisc01t5)/urdf/chassisc01t5.urdf.xacro" />
+  <param
+    name="use_gui"
+    value="$(arg gui)" />
+  <node
+    name="joint_state_publisher"
+    pkg="joint_state_publisher"
+    type="joint_state_publisher" />
+  <node
+    name="robot_state_publisher"
+    pkg="robot_state_publisher"
+    type="state_publisher" />
+  <node
+    name="rviz"
+    pkg="rviz"
+    type="rviz"
+    args="-d $(find chassisc01t5)/urdf.rviz" />
+</launch>

+ 20 - 0
CowdungCartProject/app/chassisc01t5/launch/gazebo.launch

@@ -0,0 +1,20 @@
+<launch>
+  <include
+    file="$(find gazebo_ros)/launch/empty_world.launch" />
+  <node
+    name="tf_footprint_base"
+    pkg="tf"
+    type="static_transform_publisher"
+    args="0 0 0 0 0 0 base_link base_footprint 40" />
+  <node
+    name="spawn_model"
+    pkg="gazebo_ros"
+    type="spawn_model"
+    args="-file $(find chassisc01t5)/urdf/chassisc01t5.urdf.xacro -urdf -model chassisc01t5"
+    output="screen" />
+  <node
+    name="fake_joint_calibration"
+    pkg="rostopic"
+    type="rostopic"
+    args="pub /calibrated std_msgs/Bool true" />
+</launch>

Разлика између датотеке није приказан због своје велике величине
+ 5 - 0
CowdungCartProject/app/chassisc01t5/map/map.pgm


+ 7 - 0
CowdungCartProject/app/chassisc01t5/map/map.yaml

@@ -0,0 +1,7 @@
+image: map.pgm
+resolution: 0.050000
+origin: [-10.000000, -10.000000, 0.000000]
+negate: 0
+occupied_thresh: 0.65
+free_thresh: 0.196
+

BIN
CowdungCartProject/app/chassisc01t5/meshes/Empty_Link_L.STL


BIN
CowdungCartProject/app/chassisc01t5/meshes/Empty_Link_M.STL


BIN
CowdungCartProject/app/chassisc01t5/meshes/Empty_Link_R.STL


BIN
CowdungCartProject/app/chassisc01t5/meshes/Empty_Link_lidar.STL


BIN
CowdungCartProject/app/chassisc01t5/meshes/base/base_link.STL


BIN
CowdungCartProject/app/chassisc01t5/meshes/base_link.STL


BIN
CowdungCartProject/app/chassisc01t5/meshes/sensors/Empty_Link_IMU.STL


BIN
CowdungCartProject/app/chassisc01t5/meshes/sensors/Empty_Link_lidar.STL


BIN
CowdungCartProject/app/chassisc01t5/meshes/wheels/Empty_LinkL.STL


BIN
CowdungCartProject/app/chassisc01t5/meshes/wheels/Empty_LinkR.STL


Разлика између датотеке није приказан због своје велике величине
+ 193 - 0
CowdungCartProject/app/chassisc01t5/model.rviz


+ 19 - 0
CowdungCartProject/app/chassisc01t5/navigation/chassisc_move_base.launch

@@ -0,0 +1,19 @@
+<launch>
+  <!-- Arguments -->
+  <arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>
+  <arg name="cmd_vel_topic" default="/cmd_vel" />
+  <arg name="odom_topic" default="odom" />
+
+  <!-- move_base -->
+  <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
+    <param name="base_local_planner" value="dwa_local_planner/DWAPlannerROS" />
+    <rosparam file="$(find chassisc01t5)/navigation/params/costmap_common_params_chassisc.yaml" command="load" ns="global_costmap" />
+    <rosparam file="$(find chassisc01t5)/navigation/params/costmap_common_params_chassisc.yaml" command="load" ns="local_costmap" />
+    <rosparam file="$(find chassisc01t5)/navigation/params/local_costmap_params.yaml" command="load" />
+    <rosparam file="$(find chassisc01t5)/navigation/params/global_costmap_params.yaml" command="load" />
+    <rosparam file="$(find chassisc01t5)/navigation/params/move_base_params.yaml" command="load" />
+    <rosparam file="$(find chassisc01t5)/navigation/params/dwa_local_planner_params_chassisc.yaml" command="load" />
+    <remap from="cmd_vel" to="$(arg cmd_vel_topic)"/>
+    <remap from="odom" to="$(arg odom_topic)"/>
+  </node>
+</launch>

+ 28 - 0
CowdungCartProject/app/chassisc01t5/navigation/chassisc_navigation.launch

@@ -0,0 +1,28 @@
+<launch>
+  <!-- Arguments -->
+  <arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>
+  <arg name="map_file" default="$(find chassisc01t5)/map/map.yaml"/>
+  <arg name="open_rviz" default="true"/>
+
+  <!-- Turtlebot3 -->
+  <include file="$(find turtlebot3_bringup)/launch/turtlebot3_remote.launch">
+    <arg name="model" value="$(arg model)" />
+  </include>
+
+  <!-- Map server -->
+  <node pkg="map_server" name="map_server" type="map_server" args="$(arg map_file)"/>
+
+  <!-- AMCL -->
+  <include file="$(find turtlebot3_navigation)/launch/amcl.launch"/>
+
+  <!-- move_base -->
+  <include file="$(find chassisc01t5)/navigation/chassisc_move_base.launch">
+    <arg name="model" value="$(arg model)" />
+  </include>
+
+  <!-- rviz -->
+  <group if="$(arg open_rviz)"> 
+    <node pkg="rviz" type="rviz" name="rviz" required="true"
+          args="-d $(find turtlebot3_navigation)/rviz/turtlebot3_navigation.rviz"/>
+  </group>
+</launch>

+ 26 - 0
CowdungCartProject/app/chassisc01t5/navigation/params/base_local_planner_params.yaml

@@ -0,0 +1,26 @@
+TrajectoryPlannerROS:
+
+# Robot Configuration Parameters
+  max_vel_x: 0.18
+  min_vel_x: 0.08
+
+  max_vel_theta:  1.0
+  min_vel_theta: -1.0
+  min_in_place_vel_theta: 1.0 #原地旋轉最小速度
+
+  acc_lim_x: 1.0
+  acc_lim_y: 0.0
+  acc_lim_theta: 0.6
+
+# Goal Tolerance Parameters
+  xy_goal_tolerance: 0.10 #地圖平面xy容忍的最大誤差
+  yaw_goal_tolerance: 0.10 #航向角容忍的最大誤差
+
+# Differential-drive robot configuration
+  holonomic_robot: false #全向輪設置true
+
+# Forward Simulation Parameters
+  sim_time: 1.0 #路徑規劃考慮多少秒的移動軌跡
+  vx_samples: 18
+  vtheta_samples: 20
+  sim_granularity: 0.05

+ 13 - 0
CowdungCartProject/app/chassisc01t5/navigation/params/costmap_common_params_chassisc.yaml

@@ -0,0 +1,13 @@
+obstacle_range: 3.0 #決定在local costmap裡多遠的距離以內被當成障礙顯示
+raytrace_range: 3.5 #設置機器人檢測自由空間的最大範圍(M) 
+
+footprint: [[-0.408, -0.326], [-0.408, 0.326], [0.425, 0.326], [0.425, -0.326]]
+#robot_radius: 0.17
+#機器人底盤形狀 圓形使用robot_radius 非圓形使用footprint
+
+inflation_radius: 0.2 #costmap的膨脹半徑
+cost_scaling_factor: 0.5
+
+map_type: costmap
+observation_sources: scan #用來設置障礙物檢測方法
+scan: {sensor_frame: base_scan, data_type: LaserScan, topic: scan, marking: true, clearing: true}

+ 47 - 0
CowdungCartProject/app/chassisc01t5/navigation/params/dwa_local_planner_params_chassisc.yaml

@@ -0,0 +1,47 @@
+DWAPlannerROS:
+
+# Robot Configuration Parameters 配置參數
+  max_vel_x: 0.05
+  min_vel_x: -0.05
+
+  max_vel_y: 0.0
+  min_vel_y: 0.0
+
+# The velocity when robot is moving in a straight line 
+  max_trans_vel:  0.05
+  min_trans_vel:  0.02
+
+  max_rot_vel: 0.05
+  min_rot_vel: 0.03
+
+  acc_lim_x: 2.0
+  acc_lim_y: 0.0
+  acc_lim_theta: 2.0 
+
+# Goal Tolerance Parametes 目標容差參數
+  xy_goal_tolerance: 0.05
+  yaw_goal_tolerance: 0.15
+  latch_xy_goal_tolerance: false
+
+# Forward Simulation Parameters 前進模擬參數
+  sim_time: 1.5
+  vx_samples: 20
+  vy_samples: 0
+  vtheta_samples: 40
+  controller_frequency: 10.0
+
+# Trajectory Scoring Parameters 軌跡評分參數
+  path_distance_bias: 32.0
+  goal_distance_bias: 24.0
+  occdist_scale: 0.04
+  forward_point_distance: 0.2
+  stop_time_buffer: 0.2
+  scaling_speed: 0.25
+  max_scaling_factor: 0.2
+
+# Oscillation Prevention Parameters 震盪預防參數
+  oscillation_reset_dist: 0.02
+
+# Debugging
+  publish_traj_pc : true
+  publish_cost_grid_pc: true

+ 10 - 0
CowdungCartProject/app/chassisc01t5/navigation/params/global_costmap_params.yaml

@@ -0,0 +1,10 @@
+global_costmap:
+  global_frame: /map
+  robot_base_frame: /base_footprint
+
+  update_frequency: 5.0 #感測器數據更新的頻率 降低可減少cpu負載
+  publish_frequency: 10.0 #發佈對於global static map
+  transform_tolerance: 5 #tf座標系統更新容忍的最大延遲(秒)
+
+  static_map: true
+ 

+ 14 - 0
CowdungCartProject/app/chassisc01t5/navigation/params/local_costmap_params.yaml

@@ -0,0 +1,14 @@
+local_costmap:
+  global_frame: /odom
+  robot_base_frame: /base_footprint
+
+  update_frequency: 5.0 #感測器數據更新的頻率 降低減少cpu負載
+  publish_frequency: 10.0 #地圖發佈的更新頻率
+  transform_tolerance: 0.5 #tf座標系統更新容忍的最大延遲
+ 
+  static_map: false  
+  rolling_window: true
+  width: 3 #局部地圖大小
+  height: 3
+  resolution: 0.05 #分辨率要與使用地圖yaml文件中描述的分辨率一致
+  

+ 9 - 0
CowdungCartProject/app/chassisc01t5/navigation/params/move_base_params.yaml

@@ -0,0 +1,9 @@
+shutdown_costmaps: false
+controller_frequency: 10.0
+planner_patience: 5.0
+controller_patience: 15.0
+conservative_reset_dist: 3.0
+planner_frequency: 5.0
+oscillation_timeout: 10.0
+oscillation_distance: 0.2
+

+ 21 - 0
CowdungCartProject/app/chassisc01t5/package.xml

@@ -0,0 +1,21 @@
+<package>
+  <name>chassisc01t5</name>
+  <version>1.0.0</version>
+  <description>
+    <p>URDF Description package for chassisc01t5</p>
+    <p>This package contains configuration data, 3D models and launch files
+for chassisc01t5 robot</p>
+  </description>
+  <author>me</author>
+  <maintainer email="pyo@robotis.com" />
+  <license>BSD</license>
+  <buildtool_depend>catkin</buildtool_depend>
+  <build_depend>roslaunch</build_depend>
+  <run_depend>robot_state_publisher</run_depend>
+  <run_depend>rviz</run_depend>
+  <run_depend>joint_state_publisher</run_depend>
+  <run_depend>gazebo</run_depend>
+  <export>
+    <architecture_independent />
+  </export>
+</package>

BIN
CowdungCartProject/app/chassisc01t5/rosgraph.png


+ 40 - 0
CowdungCartProject/app/chassisc01t5/slam/chassisc_gmapping.launch

@@ -0,0 +1,40 @@
+<launch>
+  <!-- Arguments -->
+  <arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>
+  <arg name="configuration_basename" default="turtlebot3_lds_2d.lua"/>
+
+  <!-- Gmapping -->
+  <node pkg="gmapping" type="slam_gmapping" name="turtlebot3_slam_gmapping" output="screen">
+    <param name="base_frame" value="base_footprint"/>
+    <param name="odom_frame" value="odom"/>
+    <param name="map_update_interval" value="5.0"/>
+    <param name="maxUrange" value="6.0"/>
+    <param name="sigma" value="0.05"/>
+    <param name="kernelSize" value="1"/>
+    <param name="lstep" value="0.05"/>
+    <param name="astep" value="0.05"/>
+    <param name="iterations" value="5"/>
+    <param name="lsigma" value="0.075"/>
+    <param name="ogain" value="3.0"/>
+    <param name="lskip" value="0"/>
+    <param name="minimumScore" value="50"/>
+    <param name="srr" value="0.1"/>
+    <param name="srt" value="0.2"/>
+    <param name="str" value="0.1"/>
+    <param name="stt" value="0.2"/>
+    <param name="linearUpdate" value="1.0"/>
+    <param name="angularUpdate" value="0.2"/>
+    <param name="temporalUpdate" value="5.0"/>
+    <param name="resampleThreshold" value="0.5"/>
+    <param name="particles" value="30"/>
+    <param name="xmin" value="-5.0"/>
+    <param name="ymin" value="-5.0"/>
+    <param name="xmax" value="5.0"/>
+    <param name="ymax" value="5.0"/>
+    <param name="delta" value="0.05"/>
+    <param name="llsamplerange" value="0.01"/>
+    <param name="llsamplestep" value="0.01"/>
+    <param name="lasamplerange" value="0.005"/>
+    <param name="lasamplestep" value="0.005"/>
+  </node>
+</launch>

+ 24 - 0
CowdungCartProject/app/chassisc01t5/slam/chassisc_slam.launch

@@ -0,0 +1,24 @@
+<launch>
+  <!-- Arguments -->
+  <arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>
+  <arg name="slam_methods" default="gmapping" doc="slam type [gmapping, cartographer, hector, karto, frontier_exploration]"/>
+  <arg name="configuration_basename" default="turtlebot3_lds_2d.lua"/>
+  <arg name="open_rviz" default="true"/>
+
+  <!-- TurtleBot3 -->
+  <include file="$(find turtlebot3_bringup)/launch/turtlebot3_remote.launch">
+    <arg name="model" value="$(arg model)" />
+  </include>
+
+  <!-- SLAM: Gmapping, Cartographer, Hector, Karto, Frontier_exploration, RTAB-Map -->
+  <include file="$(find chassisc01t5)/slam/chassisc_$(arg slam_methods).launch">
+    <arg name="model" value="$(arg model)"/>
+    <arg name="configuration_basename" value="$(arg configuration_basename)"/>
+  </include>
+
+  <!-- rviz -->
+  <group if="$(arg open_rviz)"> 
+    <node pkg="rviz" type="rviz" name="rviz" required="true"
+          args="-d $(find turtlebot3_slam)/rviz/turtlebot3_$(arg slam_methods).rviz"/>
+  </group>
+</launch>

+ 268 - 0
CowdungCartProject/app/chassisc01t5/urdf/chassisc01t20.urdf.xacro

@@ -0,0 +1,268 @@
+<?xml version="1.0" ?>
+<robot name="chassisc01t20">
+
+  <link name="base_footprint"/>
+
+  <joint name="base_joint" type="fixed">
+    <parent link="base_footprint"/>
+    <child link="base_link" />
+    <origin xyz="0.42884 0 0.010" rpy="0 0 0"/>
+  </joint>
+
+  <link name="base_link">
+    <inertial>
+      <origin xyz="0.0885345206227843 0.0302013338068504 0.258248879745294"
+              rpy="0 0 0" />
+      <mass value="37.2296575585584" />
+      <inertia
+        ixx="2.36854797993537"
+        ixy="-0.192388260031257"
+        ixz="-0.0744872693800959"
+        iyy="3.28060830376725"
+        iyz="-0.0748254733055264"
+        izz="3.91850536274097" />
+    </inertial>
+    <visual>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t5/meshes/Empty_Link_base.STL" />
+      </geometry>
+      <material
+        name="">
+        <color
+          rgba="1.752941176470588 0.752941176470588 1.752941176470588 1" />
+      </material>
+    </visual>
+    <collision>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t5/meshes/Empty_Link_base.STL" />
+      </geometry>
+    </collision>
+  </link>
+  <link
+    name="wheel_left_link">
+    <inertial>
+      <origin
+        xyz="0.271037907014502 0.0750000000000225 -1.40388330014951E-05"
+        rpy="0 0 0" />
+      <mass
+        value="0.414780915122953" />
+      <inertia
+        ixx="0.00141861280714518"
+        ixy="-2.3470826387777E-18"
+        ixz="-4.86952830030497E-08"
+        iyy="0.000755116379991488"
+        iyz="6.51780763390514E-20"
+        izz="0.00075517522354909" />
+    </inertial>
+    <visual>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t5/meshes/Empty_LinkL.STL" />
+      </geometry>
+      <material
+        name="">
+        <color
+          rgba="0.792156862745098 0.819607843137255 0.933333333333333 1" />
+      </material>
+    </visual>
+    <collision>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t5/meshes/Empty_LinkL.STL" />
+      </geometry>
+    </collision>
+  </link>
+  <joint
+    name="wheel_left_joint"
+    type="continuous">
+    <origin
+      xyz="-0.075 0.016675 0"
+      rpy="-3.1416 -4.2701E-16 1.5708" />
+    <parent
+      link="base_link" />
+    <child
+      link="wheel_left_link" />
+    <axis
+      xyz="1 0 0" />
+
+  </joint>
+  <link
+    name="wheel_right_link">
+    <inertial>
+      <origin
+        xyz="0.271037907014991 0.153071803042887 -1.40388329566699E-05"
+        rpy="0 0 0" />
+      <mass
+        value="0.414780915122952" />
+      <inertia
+        ixx="0.00141861280714518"
+        ixy="-1.15525576751819E-17"
+        ixz="-4.86952829966063E-08"
+        iyy="0.000755116379991488"
+        iyz="-2.79182826637282E-19"
+        izz="0.00075517522354909" />
+    </inertial>
+    <visual>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t5/meshes/Empty_LinkR.STL" />
+      </geometry>
+      <material
+        name="">
+        <color
+          rgba="0.792156862745098 0.819607843137255 0.933333333333333 1" />
+      </material>
+    </visual>
+    <collision>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t5/meshes/Empty_LinkR.STL" />
+      </geometry>
+    </collision>
+  </link>
+  <joint
+    name="wheel_right_joint"
+    type="continuous">
+    <origin
+      xyz="0.15307 -0.016626 0"
+      rpy="3.1416 -2.3485E-15 -1.5708" />
+    <parent
+      link="base_link" />
+    <child
+      link="wheel_right_link" />
+    <axis
+      xyz="-1 0 0" />
+    <limit
+      effort="0"
+      velocity="0" />
+  </joint>
+  <link
+    name="imu_link">
+    <inertial>
+      <origin
+        xyz="0.0101298792495179 -0.00333247664978228 -0.0159739514873404"
+        rpy="0 0 0" />
+      <mass
+        value="0.18030298179098" />
+      <inertia
+        ixx="6.75826322669879E-05"
+        ixy="-7.61453530645342E-10"
+        ixz="-4.66476750088034E-09"
+        iyy="0.000163683768208186"
+        iyz="-2.39202843109903E-09"
+        izz="0.000204120991568629" />
+    </inertial>
+    <visual>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t5/meshes/Empty_Link_IMU.STL" />
+      </geometry>
+      <material
+        name="">
+        <color
+          rgba="0.792156862745098 0.819607843137255 0.933333333333333 1" />
+      </material>
+    </visual>
+    <collision>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t5/meshes/Empty_Link_IMU.STL" />
+      </geometry>
+    </collision>
+  </link>
+  <joint
+    name="imu_joint"
+    type="fixed">
+    <origin
+      xyz="0.28887 -0.11667 0.2454"
+      rpy="1.4272E-15 0 0" />
+    <parent
+      link="base_link" />
+    <child
+      link="imu_link" />
+    <axis
+      xyz="0 0 0" />
+  </joint>
+  <link
+    name="base_scan">
+    <inertial>
+      <origin
+        xyz="9.87682313713378E-09 2.1094237467878E-15 0.025801757551963"
+        rpy="0 0 0" />
+      <mass
+        value="0.25729550825325" />
+      <inertia
+        ixx="0.000156803771938523"
+        ixy="-9.62964972193618E-35"
+        ixz="8.15112909603548E-22"
+        iyy="0.000156803771938523"
+        iyz="-3.56801621338702E-36"
+        izz="0.000196191810163655" />
+    </inertial>
+    <visual>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t5/meshes/Empty_Link_lidar1.STL" />
+      </geometry>
+      <material
+        name="">
+        <color
+          rgba="0.792156862745098 0.819607843137255 0.933333333333333 1" />
+      </material>
+    </visual>
+    <collision>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t5/meshes/Empty_Link_lidar1.STL" />
+      </geometry>
+    </collision>
+  </link>
+  <joint
+    name="sacn_joint"
+    type="fixed">
+    <origin
+      xyz="0.0 0.0 0.5314"
+      rpy="4.2701E-16 -1.7064E-30 3.9961E-15" />
+    <parent
+      link="base_link" />
+    <child
+      link="base_scan" />
+    <axis
+      xyz="0 0 1" />
+    <limit
+      effort="0"
+      velocity="0" />
+  </joint>
+</robot>

+ 183 - 0
CowdungCartProject/app/chassisc01t5/urdf/chassisc01t5.urdf.xacro

@@ -0,0 +1,183 @@
+<?xml version="1.0" ?>
+<robot name="chassisc01t5">
+
+  <link name="base_footprint"/>
+
+  <joint name="base_joint" type="fixed">
+    <parent link="base_footprint"/>
+    <child link="base_link" />
+    <origin xyz="0.42884 0 0.010" rpy="0 0 0"/>
+  </joint>
+
+  <link name="base_link">
+    <inertial>
+      <origin xyz="-0.452448904821102 0.0196935627488034 0.345443875195121"
+              rpy="0 0 0" />
+      <mass value="88.7167502193442" />
+      <inertia ixx="4.66509507901747"    ixy="-0.48332286976799"
+               ixz="-0.0174267793170435" iyy="6.61818286750035"
+               iyz="-0.27708811615342"   izz="7.92452878310761" />
+    </inertial>
+
+    <visual>
+      <origin xyz="0 0 0" rpy="0 0 0" />
+      <geometry>
+        <mesh filename="package://chassisc01t5/meshes/base/base_link.STL" />
+      </geometry>
+      <material name="light_black">
+        <color rgba="0.4 0.4 0.4 1.0"/>
+      </material>
+    </visual>
+
+    <collision>
+      <origin xyz="0 0 0" rpy="0 0 0" />
+      <geometry>
+        <mesh filename="package://chassisc01t5/meshes/base/base_link.STL" />
+      </geometry>
+    </collision>
+  </link>
+
+  <link name="wheel_left_link">
+    <inertial>
+      <origin xyz="-1.77635683940025E-15 -0.00763748093981509 0.000564833802190384"
+              rpy="0 0 0" />
+      <mass value="0.414780915122953" />
+      <inertia ixx="0.000755116379991488"  ixy="-2.34700366108235E-18"
+               ixz="-2.74678016773988E-19" iyy="0.00141861280714518"
+               iyz="4.86952830029508E-08"  izz="0.00075517522354909" />
+    </inertial>
+
+    <visual>
+      <origin xyz="0 0 0" rpy="0 0 0" />
+      <geometry>
+        <mesh filename="package://chassisc01t5/meshes/wheels/Empty_LinkL.STL" />
+      </geometry>
+
+      <material name="">
+        <color rgba="0.792156862745098 0.819607843137255 0.933333333333333 1" />
+      </material>
+    </visual>
+
+    <collision>
+      <origin xyz="0 0 0" rpy="0 0 0" />
+      <geometry>
+        <mesh filename="package://chassisc01t5/meshes/wheels/Empty_LinkL.STL" />
+      </geometry>
+    </collision>
+  </link>
+
+  <joint name="wheel_left_joint" type="continuous">
+    <origin xyz="-0.42884 0.2953 0.032895" rpy="5.3893E-16 0 0" />
+    <parent link="base_link" />
+    <child link="wheel_left_link" />
+    <axis xyz="0 1 0" />
+  </joint>
+
+  <link name="wheel_right_link">
+    <inertial>
+      <origin xyz="-3.33066907387547E-16 0.00763748093980586 1.40388328213892E-05"
+              rpy="0 0 0" />
+      <mass value="0.414780915122952" />
+      <inertia ixx="0.000755116379991488"  ixy="-1.15531218873477E-17"
+               ixz="-2.7853076900526E-19"  iyy="0.00141861280714518"
+               iyz="-4.86952829984476E-08" izz="0.00075517522354909" />
+    </inertial>
+
+    <visual>
+      <origin xyz="0 0 0" rpy="0 0 0" />
+      <geometry>
+        <mesh filename="package://chassisc01t5/meshes/wheels/Empty_LinkR.STL" />
+      </geometry>
+
+      <material name="">
+        <color rgba="0.792156862745098 0.819607843137255 0.933333333333333 1" />
+      </material>
+    </visual>
+
+    <collision>
+      <origin xyz="0 0 0" rpy="0 0 0" />
+      <geometry>
+        <mesh filename="package://chassisc01t5/meshes/wheels/Empty_LinkR.STL" />
+      </geometry>
+    </collision>
+  </link>
+
+  <joint name="wheel_right_joint" type="continuous">
+    <origin xyz="-0.42884 -0.29535 0.033446" rpy="4.2701E-16 0 0" />
+    <parent link="base_link" />
+    <child link="wheel_right_link" />
+    <axis xyz="0 1 0" />
+  </joint>
+
+  <link name="base_scan">
+    <inertial>
+      <origin xyz="2.81348486365074E-05 -2.63514280988142E-05 -0.0190348548613789"
+              rpy="0 0 0" />
+      <mass value="1.81052166455027" />
+      <inertia ixx="0.248535424906018"      ixy="3.89340600010301E-07"
+               ixz="-4.50412271648134E-07"  iyy="0.248528900376467"
+               iyz="2.64476282930372E-06"   izz="0.497049566315374" />
+    </inertial>
+
+    <visual>
+      <origin xyz="0 0 0" rpy="0 0 0" />
+      <geometry>
+        <mesh filename="package://chassisc01t5/meshes/sensors/Empty_Link_lidar.STL" />
+      </geometry>
+
+      <material name="">
+        <color rgba="0.752941176470588 0.752941176470588 0.752941176470588 1" />
+      </material>
+    </visual>
+
+    <collision>
+      <origin xyz="0 0 0" rpy="0 0 0" />
+      <geometry>
+        <mesh filename="package://chassisc01t5/meshes/sensors/Empty_Link_lidar.STL" />
+      </geometry>
+    </collision>
+  </link>
+
+  <joint name="sacn_joint" type="fixed">
+    <origin xyz="-0.17471 0.23695 0.84065" rpy="5.3893E-16 0 0" />
+    <parent link="base_link" />
+    <child link="base_scan" />
+  </joint>
+
+  <link name="imu_link">
+    <inertial>
+      <origin xyz="0.0101298792495179 -0.00333247664978228 -0.0159739514873404"
+              rpy="0 0 0" />
+      <mass value="0.18030298179098" />
+      <inertia ixx="6.75826322669879E-05"  ixy="-7.61453530645342E-10"
+               ixz="-4.66476750088037E-09" iyy="0.000163683768208186"
+               iyz="-2.39202843109903E-09" izz="0.000204120991568629" />
+    </inertial>
+
+    <visual>
+      <origin xyz="0 0 0" rpy="0 0 0" />
+      <geometry>
+        <mesh filename="package://chassisc01t5/meshes/sensors/Empty_Link_IMU.STL" />
+      </geometry>
+
+      <material name="">
+        <color rgba="0.792156862745098 0.819607843137255 0.933333333333333 1" />
+      </material>
+    </visual>
+
+    <collision>
+      <origin xyz="0 0 0" rpy="0 0 0" />
+      <geometry>
+        <mesh filename="package://chassisc01t5/meshes/sensors/Empty_Link_IMU.STL" />
+      </geometry>
+    </collision>
+  </link>
+
+  <joint name="imu_joint" type="fixed">
+    <origin xyz="-0.13997 -0.11672 0.27885"
+            rpy="1.4272E-15 0 0" />
+    <parent link="base_link" />
+    <child link="imu_link" />
+    <axis xyz="0 0 0" />
+  </joint>
+</robot>

+ 272 - 0
CowdungCartProject/app/chassisc01t5/urdf/chassisc11214.urdf.xacro

@@ -0,0 +1,272 @@
+<?xml version="1.0" ?>
+
+<robot name="chassisc11214">
+  <link name="base_footprint"/>
+
+  <joint name="base_joint" type="fixed">
+    <parent link="base_footprint"/>
+    <child link="base_link" />
+    <origin xyz="0.42884 0 0.010" rpy="0 0 0"/>
+  </joint>
+
+  <link name="base_link">
+    <inertial>
+      <origin
+        xyz="-0.34337 0.030163 0.29075"
+        rpy="0 0 0" />
+      <mass
+        value="36.807" />
+      <inertia
+        ixx="2.3369"
+        ixy="-0.1953"
+        ixz="-0.074491"
+        iyy="3.2466"
+        iyz="-0.078309"
+        izz="3.9027" />
+    </inertial>
+    <visual>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t5/meshes/base_link.STL" />
+      </geometry>
+      <material
+        name="">
+        <color
+          rgba="0.75294 0.75294 0.75294 1" />
+      </material>
+    </visual>
+    <collision>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t5/meshes/base_link.STL" />
+      </geometry>
+    </collision>
+  </link>
+  <link
+    name="wheel_left_link">
+    <inertial>
+      <origin
+        xyz="2.6756E-14 -0.021637 1.4039E-05"
+        rpy="0 0 0" />
+      <mass
+        value="0.41478" />
+      <inertia
+        ixx="0.00075512"
+        ixy="-1.987E-18"
+        ixz="-2.7465E-19"
+        iyy="0.0014186"
+        iyz="4.8695E-08"
+        izz="0.00075518" />
+    </inertial>
+    <visual>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t5/meshes/Empty_Link_L.STL" />
+      </geometry>
+      <material
+        name="">
+        <color
+          rgba="0.79216 0.81961 0.93333 1" />
+      </material>
+    </visual>
+    <collision>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t5/meshes/Empty_Link_L.STL" />
+      </geometry>
+    </collision>
+  </link>
+  <joint
+    name="wheel_left_joint"
+    type="continuous">
+    <origin
+      xyz="-0.43084 0.30935 0.033446"
+      rpy="8.0874E-46 0 0" />
+    <parent
+      link="base_link" />
+    <child
+      link="wheel_left_link" />
+    <axis
+      xyz="0 1 0" />
+    <limit
+      effort="0"
+      velocity="0" />
+  </joint>
+  <link
+    name="wheel_right_link">
+    <inertial>
+      <origin
+        xyz="2.1871E-14 0.021637 1.4039E-05"
+        rpy="0 0 0" />
+      <mass
+        value="0.41478" />
+      <inertia
+        ixx="0.00075512"
+        ixy="-1.1193E-17"
+        ixz="-2.7856E-19"
+        iyy="0.0014186"
+        iyz="-4.8695E-08"
+        izz="0.00075518" />
+    </inertial>
+    <visual>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t5/meshes/Empty_Link_R.STL" />
+      </geometry>
+      <material
+        name="">
+        <color
+          rgba="0.79216 0.81961 0.93333 1" />
+      </material>
+    </visual>
+    <collision>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t5/meshes/Empty_Link_R.STL" />
+      </geometry>
+    </collision>
+  </link>
+  <joint
+    name="wheel_right_link"
+    type="continuous">
+    <origin
+      xyz="-0.43084 -0.3093 0.033446"
+      rpy="4.2701E-16 1.2593E-30 0" />
+    <parent
+      link="base_link" />
+    <child
+      link="wheel_right_link" />
+    <axis
+      xyz="0 1 0" />
+    <limit
+      effort="0"
+      velocity="0" />
+  </joint>
+  <link
+    name="imu_link">
+    <inertial>
+      <origin
+        xyz="1.6741E-06 8.5668E-07 0.015026"
+        rpy="0 0 0" />
+      <mass
+        value="0.1803" />
+      <inertia
+        ixx="6.7583E-05"
+        ixy="-7.6145E-10"
+        ixz="-4.6648E-09"
+        iyy="0.00016368"
+        iyz="-2.392E-09"
+        izz="0.00020412" />
+    </inertial>
+    <visual>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t5/meshes/Empty_Link_M.STL" />
+      </geometry>
+      <material
+        name="">
+        <color
+          rgba="0.79216 0.81961 0.93333 1" />
+      </material>
+    </visual>
+    <collision>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t5/meshes/Empty_Link_M.STL" />
+      </geometry>
+    </collision>
+  </link>
+  <joint
+    name="imu_joint"
+    type="fixed">
+    <origin
+      xyz="-0.13184 -0.12 0.24785"
+      rpy="2.135E-15 6.2963E-30 0" />
+    <parent
+      link="base_link" />
+    <child
+      link="imu_link" />
+    <axis
+      xyz="0 0 0" />
+  </joint>
+  <link
+    name="base_scan">
+    <inertial>
+      <origin
+        xyz="-0.00061441 0.0016429 0.017151"
+        rpy="0 0 0" />
+      <mass
+        value="0.024978" />
+      <inertia
+        ixx="1.6869E-05"
+        ixy="-3.171E-07"
+        ixz="1.9685E-07"
+        iyy="1.7543E-05"
+        iyz="-5.3259E-07"
+        izz="2.3858E-05" />
+    </inertial>
+    <visual>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t5/meshes/Empty_Link_lidar.STL" />
+      </geometry>
+      <material
+        name="">	
+        <color
+          rgba="0.29804 0.29804 0.29804 1" />
+      </material>
+    </visual>
+    <collision>
+      <origin
+        xyz="0 0 0"
+        rpy="0 0 0" />
+      <geometry>
+        <mesh
+          filename="package://chassisc01t5/meshes/Empty_Link_lidar.STL" />
+      </geometry>
+    </collision>
+  </link>
+  <joint
+    name="sacn_joint"
+    type="fixed">
+    <origin
+      xyz="-0.42192 0 0.56685"
+      rpy="4.2701E-16 1.2593E-30 0" />
+    <parent
+      link="base_link" />
+    <child
+      link="base_scan" />
+    <axis
+      xyz="0 0 1" />
+    <limit
+      effort="0"
+      velocity="0" />
+  </joint>
+</robot>

+ 5 - 0
CowdungCartProject/app/main/__init__.py

@@ -0,0 +1,5 @@
+#main 目錄: 包含主要的業務邏輯的路由和視圖
+# __init__.py : 對主業務邏輯程序的初始化操作
+from flask import Blueprint
+main = Blueprint('main',__name__)
+from . import views

BIN
CowdungCartProject/app/main/__pycache__/__init__.cpython-35.pyc


BIN
CowdungCartProject/app/main/__pycache__/views.cpython-35.pyc


+ 363 - 0
CowdungCartProject/app/main/views.py

@@ -0,0 +1,363 @@
+# 主業務邏輯中的視圖和路由的定義
+import os
+import datetime
+from flask import render_template, request, session, Response
+# 導入藍圖程序,用於構建路由
+from werkzeug.utils import redirect
+from . import main
+from manage import mqtt
+# 導入db,用於操作數據庫
+from manage import db
+# 導入實體類,用於操作數據庫
+from ..models import *
+import json
+from datetime import datetime as dt, date
+from sqlalchemy import text
+import socket
+import pickle
+import cv2
+import numpy as np
+import math
+import threading
+import time
+from flask_mqtt import Mqtt
+import requests
+import re
+from time import sleep as sl
+from concurrent.futures import ThreadPoolExecutor
+
+
+
+
+pool = ThreadPoolExecutor(10)
+lock = threading.Lock()
+
+
+
+# 主頁的訪問路徑
+@main.route('/')
+def main_index():
+    # 獲取登入信息
+    if 'id' in session and 'uname' in session:
+        username = session['uname']
+        schedule = Schedule.query.order_by(text('datetime desc')).limit(1).first()
+        goals = Goal.query.all()
+        return render_template('index.html', params=locals())
+    else:
+        return render_template('sign_in.html')
+
+
+# 登入頁面的訪問路徑
+@main.route('/login', methods=['GET', 'POST'])
+def login_views():
+    if request.method == 'GET':
+        if 'id' in session and 'uname' in session:
+            return redirect('/')
+        else:
+            return render_template('sign_in.html')
+    else:
+        # 接收前端傳過來的資料
+        username = request.form['username']
+        password = request.form['password']
+        # 使用接收的用戶和密碼到資料庫中查詢
+        user = User.query.filter_by(username=username, password=password).first()
+        # 如果用戶存在,將信息保存置session並重定向回首頁,否則重定向回登入頁
+        if user:
+            resp = redirect('/')
+            # 判斷是否有記住密碼
+            if 'rem' in request.form:
+                sn = str(user.sn)
+                max_age = 60 * 60 * 24 * 365
+                resp.set_cookie("username", username, max_age=max_age)
+                resp.set_cookie("sn", sn, max_age=max_age)
+
+            session['uname'] = user.username
+            session['id'] = user.sn
+            return resp
+        else:
+            errMsg = "Wrong login or password"
+            return render_template('sign_in.html', errMsg=errMsg)
+
+
+# 註冊頁面的訪問路徑
+@main.route('/register', methods=['POST', "GET"])
+def register_views():
+    if request.method == 'GET':
+        return render_template('registration.html')
+    else:
+        # 獲取文本框的值並賦值給user實體對象
+        user = User()
+        user.username = request.form['username']
+        user.password = request.form['password']
+        # 將數據保存進資料庫  - 註冊
+        db.session.add(user)
+        # 手動提交,目的是為了獲取提交後的user的id
+        db.session.commit()
+        # 當user成功插入進資料庫之後,程序會自動將所有信息取出來在賦值給user
+        # 完成登入的操作
+        user = User.query.filter_by(username=user.username).first()
+        session['id'] = user.sn
+        session['uname'] = user.username
+        return redirect('/')
+
+#驗證username訪問路徑
+@main.route('/check_username')
+def check_username_views():
+    username = request.args['username']
+    user = User.query.filter_by(username=username).first()
+    if user:
+        print("test")
+        result = {"errMsg":" "}
+    else:
+        result = {"pass":" "}
+    return json.dumps(result)
+
+
+#AGV控制台的訪問路徑
+@main.route('/agv_console', methods=['POST', 'GET'])
+def agv_console_views():
+    if request.method == 'GET':
+        schedule = Schedule.query.order_by(text('datetime desc')).limit(1).first()
+        goals = Goal.query.all()
+        sonic = Sonic.query.order_by(text('datetime desc')).limit(1).first()
+        water_level = WaterLevel.query.order_by(text('datetime desc')).limit(1).first()
+        return render_template('agv_console.html', params=locals())
+
+
+#影像串流的頁面訪問路徑
+@main.route('/video', methods=['POST', 'GET'])
+def video_views():
+    if request.method == 'GET':
+        username = session['uname']
+        return render_template('video.html', params=locals())
+
+s_sock = 0
+
+
+#影像串流的訪問路徑
+@main.route("/video_feed", methods=['POST', 'GET'])
+def video_feed_views():
+    global s_sock, pool
+    if request.method == 'GET':
+        #於10分鐘之後,自動關閉socket server
+        if s_sock == 0:
+            def socket_server_views():
+                global s_sock
+                print("test")
+                print(s_sock)
+                sl(600)
+                if s_sock != 0:
+                    s_sock.close()
+                    s_sock = 0
+                    print('s_sock is closed')
+
+            pool.submit(socket_server_views)
+
+        host = "192.168.50.65"
+        port = 8000
+        max_length = 65540
+        # max_length = 95540
+
+        print("----------------------")
+        s_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+        s_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+        s_sock.bind((host, port))
+
+
+        frame_info = None
+        buffer = None
+        frame = None
+        encodedImage = None
+
+
+        print("-> waiting for connection")
+
+
+        # 影像生成器函數,將影像以jpg格式傳給前端
+        def generate():
+            while True:
+                with lock:
+                    global s_sock, frame_info, buffer, frame, encodedImage
+                    if s_sock == 0:
+                        break
+                    data, address = s_sock.recvfrom(max_length)
+
+
+                    if len(data) < 100:
+                        frame_info = pickle.loads(data)
+
+
+                        if frame_info:
+                            nums_of_packs = frame_info["packs"]
+
+
+                            for i in range(nums_of_packs):
+                                if s_sock == 0:
+                                    break
+                                data, address = s_sock.recvfrom(max_length)
+
+                                if i == 0:
+                                    buffer = data
+                                else:
+                                    buffer += data
+
+
+                            frame = np.frombuffer(buffer, dtype=np.uint8)
+                            frame = frame.reshape(frame.shape[0], 1)
+
+                            frame = cv2.imdecode(frame, cv2.IMREAD_UNCHANGED)
+
+                            #如果frame為None就跳過
+                            if frame is None:
+                                continue
+
+                            frame = cv2.resize(frame, (640, 360), interpolation=cv2.INTER_AREA)
+
+                            # encode the frame in JPEG format
+                            (flag, encodedImage) = cv2.imencode(".jpg", frame)
+                            # ensure the frame was successfully encoded
+                            if not flag:
+                                continue
+                # yield the output frame in the byte format
+                yield (b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' +
+                    bytearray(encodedImage) + b'\r\n')
+
+        # return the response generated along with the specific media
+        # type (mime type)
+        return Response(generate(), mimetype="multipart/x-mixed-replace; boundary=frame")
+    else:
+        if s_sock != 0:
+            s_sock.close()
+            s_sock = 0
+            print("s_sock is closed")
+            return "s_sock is closed"
+        print("s_sock is closed")
+        return "s_sock is closed"
+
+
+
+#目標點的訪問路徑
+@main.route('/goal', methods=['POST', 'GET'])
+def goal_views():
+    dict = request.form.to_dict()
+    ori_datas = dict['ori_data'].split("\n")
+    change_datas = dict['change_data'].split("\n")
+    length = len(ori_datas)
+    goal_num = 1
+    for i in range(length):
+        goalObj = Goal.query.filter_by(goal_num=goal_num).first()
+        if not goalObj:
+            goalObj = Goal()
+        goalHisObj = GoalHistory()
+        goalObj.goal_num = goal_num
+        goalHisObj.goal_num = goal_num
+        goalObj.goal_ori_x = ori_datas[i].split(',')[0]
+        goalHisObj.goal_ori_x = ori_datas[i].split(',')[0]
+        goalObj.goal_change_x = change_datas[i].split(',')[0]
+        goalHisObj.goal_change_x = change_datas[i].split(',')[0]
+        goalObj.goal_ori_y = ori_datas[i].split(',')[1]
+        goalHisObj.goal_ori_y = ori_datas[i].split(',')[1]
+        goalObj.goal_change_y = change_datas[i].split(',')[1]
+        goalHisObj.goal_change_y = change_datas[i].split(',')[1]
+        goalObj.datetime = dt.now()
+        goalHisObj.datetime = dt.now()
+        db.session.add(goalObj)
+        db.session.add(goalHisObj)
+        goal_num += 1
+    db.session.commit()
+
+    return "Sent successfully!"
+
+#移除目標點的訪問路徑
+@main.route('/remove_goal', methods=['POST', 'GET'])
+def remove_goal_views():
+    goal = Goal.query.order_by(text('sn desc')).limit(1).first()
+    db.session.delete(goal)
+    db.session.commit()
+
+    return "Removed successfully!"
+
+
+#排程時間的訪問路徑
+@main.route('/schedule', methods=['POST', 'GET'])
+def schedule_views():
+    dict = request.form.to_dict()
+    times = dict['data'].split("\n")
+    schedule = Schedule()
+    try:
+        schedule.time1 = times[0]
+        schedule.time2 = times[1]
+        schedule.time3 = times[2]
+        schedule.time4 = times[3]
+        schedule.time5 = times[4]
+        schedule.time6 = times[5]
+        schedule.time7 = times[6]
+    except Exception as e:
+        pass
+    schedule.datetime = dt.now()
+    db.session.add(schedule)
+    db.session.commit()
+
+    return "Success"
+
+#制動器MQTT訪問路徑
+@main.route('/mqtt', methods=['POST', 'GET'])
+def swh_mqtt_views():
+    import json
+    dict = request.args.to_dict()
+    json = json.dumps(dict)
+    # topic = 'AISKY/AppleFarm/MK-G/b8:27:eb:4f:05:65'
+    topic = 'AISKY/AppleFarm/MK-G/b8:27:eb:b4:59:3e'
+
+    #假設MQTT命令為開啟影像串流,在3分鐘後自動發布關閉該影像串流
+    if (dict['command'] == 'video1' or dict['command'] == 'video2') and dict['value'] == 'on':
+        def close_video_views():
+            import json
+            sl(180)
+            dict['value'] = 'off'
+            json = json.dumps(dict)
+            print(json)
+            mqtt.publish(topic, json)
+            print('close video test')
+
+
+        pool.submit(close_video_views)
+
+    # if dict['command'] == 'fan':
+    #     topic= 'AISKY/AppleFarm/MK-G/b8:27:eb:b4:59:3e'
+    # elif dict['command'] == 'water_bump':
+    #     topic = 1
+    # elif dict['command'] == 'water_charge':
+    #     topic = 1
+    # elif dict['command'] == 'charge':
+    #     topic = 1
+    # elif dict['command'] == 'sonic':
+    #     topic = 1
+    # elif dict['command'] == 'red_light':
+    #     topic = 1
+    # elif dict['command'] == 'yellow_light':
+    #     topic = 1
+    # elif dict['command'] == 'green_light':
+    #     topic = 1
+    print(json)
+    mqtt.publish(topic, json)
+
+    return "Success"
+
+
+#處理mqtt訂閱的信息
+@mqtt.on_message()
+def handle_mqtt_message(client, userdata, message):
+    payload = message.payload.decode()
+    print(payload)
+
+# 退出的訪問路徑
+@main.route('/logout')
+def logout_views():
+    if 'id' in session and 'uname' in session:
+        del session['id']
+        del session['uname']
+    return redirect('/')
+
+
+

+ 96 - 0
CowdungCartProject/app/models.py

@@ -0,0 +1,96 @@
+# coding: utf-8
+from sqlalchemy import Column, DateTime, Integer, Numeric, String
+from flask_sqlalchemy import SQLAlchemy
+
+
+#與當前項目相關的模型文件,即所有的實體類在此編寫
+from manage import db
+
+
+#用戶表
+class User(db.Model):
+    __tablename__ = 'user'
+
+    sn = db.Column(db.Integer, primary_key=True)
+    username = db.Column(db.String(30), nullable=False, unique=True)
+    password = db.Column(db.Text, nullable=False)
+
+#目標點位置表
+class Goal(db.Model):
+    __tablename__ = 'goal'
+
+    sn = db.Column(db.Integer, primary_key=True)
+    goal_num = db.Column(db.Integer, nullable=False)
+    goal_ori_x = db.Column(db.Text, nullable=False)
+    goal_ori_y = db.Column(db.Text, nullable=False)
+    goal_change_x = db.Column(db.Text, nullable=False)
+    goal_change_y = db.Column(db.Text, nullable=False)
+    datetime = db.Column(db.DateTime, nullable=False)
+
+#目標點歷史位置表
+class GoalHistory(db.Model):
+    __tablename__ = 'goal_history'
+
+    sn = db.Column(db.Integer, primary_key=True)
+    goal_num = db.Column(db.Integer, nullable=False)
+    goal_ori_x = db.Column(db.Text, nullable=False)
+    goal_ori_y = db.Column(db.Text, nullable=False)
+    goal_change_x = db.Column(db.Text, nullable=False)
+    goal_change_y = db.Column(db.Text, nullable=False)
+    datetime = db.Column(db.DateTime, nullable=False)
+
+#排程時間表
+class Schedule(db.Model):
+    __tablename__ = 'schedule'
+
+    sn = db.Column(db.Integer, primary_key=True)
+    time1 = db.Column(db.Text, nullable=True)
+    time2 = db.Column(db.Text, nullable=True)
+    time3 = db.Column(db.Text, nullable=True)
+    time4 = db.Column(db.Text, nullable=True)
+    time5 = db.Column(db.Text, nullable=True)
+    time6 = db.Column(db.Text, nullable=True)
+    time7 = db.Column(db.Text, nullable=True)
+    datetime = db.Column(db.DateTime, nullable=False)
+
+
+
+#糞便高度表
+class Sonic(db.Model):
+    __tablename__ = 'sonic'
+
+    sn = db.Column(db.Integer, primary_key=True)
+    sonic = db.Column(db.Text, nullable=False)
+    datetime = db.Column(db.DateTime, nullable=False)
+
+#電量表
+class Battery(db.Model):
+    __tablename__ = 'battery'
+
+    sn = db.Column(db.Integer, primary_key=True)
+    battery = db.Column(db.Text, nullable=False)
+    datetime = db.Column(db.DateTime, nullable=False)
+
+#水位表
+class WaterLevel(db.Model):
+    __tablename__ = 'water_level'
+
+    sn = db.Column(db.Integer, primary_key=True)
+    water_level = db.Column(db.Text, nullable=False)
+    datetime = db.Column(db.DateTime, nullable=False)
+
+#制動器表
+class Actuator(db.Model):
+    __tablename__ = 'actuator'
+
+    sn = db.Column(db.Integer, primary_key=True)
+    fan = db.Column(db.Text, nullable=False, default="off")
+    yellow_light = db.Column(db.Text, nullable=False, default="off")
+    green_light = db.Column(db.Text, nullable=False, default="off")
+    red_light = db.Column(db.Text, nullable=False, default="off")
+    water_bump = db.Column(db.Text, nullable=False, default="off")
+    charge = db.Column(db.Text, nullable=False, default="off")
+    water_charge = db.Column(db.Text, nullable=False, default="off")
+    datetime = db.Column(db.DateTime, nullable=False)
+
+#db.create_all()

+ 3 - 0
CowdungCartProject/app/set_goal/point.txt

@@ -0,0 +1,3 @@
+2.602776819402205,-0.019586093968799373
+2.602776819402205,-0.9137151848238949
+0.6944699193034484,-0.9378808359280867

+ 3 - 0
CowdungCartProject/app/set_goal/point_20181222150735.txt

@@ -0,0 +1,3 @@
+2.602776819402205,-0.019586093968799373
+2.602776819402205,-0.9137151848238949
+0.6944699193034484,-0.9378808359280867

+ 2 - 0
CowdungCartProject/app/set_goal/time.txt

@@ -0,0 +1,2 @@
+08:00
+20:00

+ 2 - 0
CowdungCartProject/app/set_goal/time_20181224111222.txt

@@ -0,0 +1,2 @@
+08:00
+20:00

BIN
CowdungCartProject/app/static/css/images/ajax-loader.gif


BIN
CowdungCartProject/app/static/css/images/icons-png/action-black.png


BIN
CowdungCartProject/app/static/css/images/icons-png/action-white.png


BIN
CowdungCartProject/app/static/css/images/icons-png/alert-black.png


BIN
CowdungCartProject/app/static/css/images/icons-png/alert-white.png


BIN
CowdungCartProject/app/static/css/images/icons-png/arrow-d-black.png


BIN
CowdungCartProject/app/static/css/images/icons-png/arrow-d-l-black.png


BIN
CowdungCartProject/app/static/css/images/icons-png/arrow-d-l-white.png


BIN
CowdungCartProject/app/static/css/images/icons-png/arrow-d-r-black.png


BIN
CowdungCartProject/app/static/css/images/icons-png/arrow-d-r-white.png


BIN
CowdungCartProject/app/static/css/images/icons-png/arrow-d-white.png


BIN
CowdungCartProject/app/static/css/images/icons-png/arrow-l-black.png


BIN
CowdungCartProject/app/static/css/images/icons-png/arrow-l-white.png


BIN
CowdungCartProject/app/static/css/images/icons-png/arrow-r-black.png


BIN
CowdungCartProject/app/static/css/images/icons-png/arrow-r-white.png


BIN
CowdungCartProject/app/static/css/images/icons-png/arrow-u-black.png


BIN
CowdungCartProject/app/static/css/images/icons-png/arrow-u-l-black.png


BIN
CowdungCartProject/app/static/css/images/icons-png/arrow-u-l-white.png


+ 0 - 0
CowdungCartProject/app/static/css/images/icons-png/arrow-u-r-black.png


Неке датотеке нису приказане због велике количине промена