From 3904891d84b41008d08ec653baa56104144d70fd Mon Sep 17 00:00:00 2001 From: morita Date: Sat, 26 May 2018 17:01:58 +0900 Subject: [PATCH] =?UTF-8?q?MonoBrick=E3=81=AE=E3=82=B5=E3=83=B3=E3=83=97?= =?UTF-8?q?=E3=83=AB=E3=82=B3=E3=83=BC=E3=83=89=E3=82=92=E3=83=87=E3=82=AB?= =?UTF-8?q?=E3=82=BF=E3=82=A4=E3=83=A4=E7=89=88=E3=81=AB=E5=90=88=E3=82=8F?= =?UTF-8?q?=E3=81=9B=E3=81=A6=E4=BF=AE=E6=AD=A3.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EV3way_MonoBrick_sample.sln | 173 ++++++++++ .../EV3way_MonoBrick_sample.userprefs | 12 + .../EV3/Balancer.cs | 304 ++++++++++++++++++ .../ev3way_monobrick_sample_2018/EV3/Brick.cs | 189 +++++++++++ .../ev3way_monobrick_sample_2018/EV3body.cs | 31 ++ .../ev3way_monobrick_sample_2018/Main.cs | 147 +++++++++ .../MonoBrickFirmware.dll | Bin 0 -> 178176 bytes .../ev3way_monobrick_sample.csproj | 45 +++ 8 files changed, 901 insertions(+) create mode 100644 SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/EV3way_MonoBrick_sample.sln create mode 100644 SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/EV3way_MonoBrick_sample.userprefs create mode 100644 SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/ev3way_monobrick_sample_2018/EV3/Balancer.cs create mode 100644 SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/ev3way_monobrick_sample_2018/EV3/Brick.cs create mode 100644 SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/ev3way_monobrick_sample_2018/EV3body.cs create mode 100644 SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/ev3way_monobrick_sample_2018/Main.cs create mode 100644 SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/ev3way_monobrick_sample_2018/MonoBrickFirmware.dll create mode 100644 SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/ev3way_monobrick_sample_2018/ev3way_monobrick_sample.csproj diff --git a/SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/EV3way_MonoBrick_sample.sln b/SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/EV3way_MonoBrick_sample.sln new file mode 100644 index 0000000..65fe7f8 --- /dev/null +++ b/SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/EV3way_MonoBrick_sample.sln @@ -0,0 +1,173 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ev3way_monobrick_sample", "ev3way_monobrick_sample\ev3way_monobrick_sample.csproj", "{D143CFF0-F2F5-474A-B631-698EC2E98A12}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AOTCompileApp", "AOTCompileApp\AOTCompileApp.csproj", "{FCEE4FA1-741D-41EA-A24A-804F2BC2A6D4}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x86 = Debug|x86 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D143CFF0-F2F5-474A-B631-698EC2E98A12}.Debug|x86.ActiveCfg = Debug|x86 + {D143CFF0-F2F5-474A-B631-698EC2E98A12}.Debug|x86.Build.0 = Debug|x86 + {D143CFF0-F2F5-474A-B631-698EC2E98A12}.Release|x86.ActiveCfg = Release|x86 + {D143CFF0-F2F5-474A-B631-698EC2E98A12}.Release|x86.Build.0 = Release|x86 + {FCEE4FA1-741D-41EA-A24A-804F2BC2A6D4}.Debug|x86.ActiveCfg = Debug|x86 + {FCEE4FA1-741D-41EA-A24A-804F2BC2A6D4}.Debug|x86.Build.0 = Debug|x86 + {FCEE4FA1-741D-41EA-A24A-804F2BC2A6D4}.Release|x86.ActiveCfg = Release|x86 + {FCEE4FA1-741D-41EA-A24A-804F2BC2A6D4}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(MonoDevelopProperties) = preSolution + Policies = $0 + $0.DotNetNamingPolicy = $1 + $1.DirectoryNamespaceAssociation = None + $1.ResourceNamePolicy = FileFormatDefault + $0.TextStylePolicy = $2 + $2.inheritsSet = null + $2.scope = text/x-csharp + $0.CSharpFormattingPolicy = $3 + $3.AfterDelegateDeclarationParameterComma = True + $3.inheritsSet = Mono + $3.inheritsScope = text/x-csharp + $3.scope = text/x-csharp + $0.TextStylePolicy = $4 + $4.FileWidth = 120 + $4.TabsToSpaces = False + $4.EolMarker = Windows + $4.inheritsSet = VisualStudio + $4.inheritsScope = text/plain + $4.scope = text/plain + $0.StandardHeader = $5 + $5.Text = + $5.IncludeInNewFiles = True + $0.NameConventionPolicy = $6 + $6.Rules = $7 + $7.NamingRule = $8 + $8.Name = Namespaces + $8.AffectedEntity = Namespace + $8.VisibilityMask = VisibilityMask + $8.NamingStyle = PascalCase + $8.IncludeInstanceMembers = True + $8.IncludeStaticEntities = True + $7.NamingRule = $9 + $9.Name = Types + $9.AffectedEntity = Class, Struct, Enum, Delegate + $9.VisibilityMask = Public + $9.NamingStyle = PascalCase + $9.IncludeInstanceMembers = True + $9.IncludeStaticEntities = True + $7.NamingRule = $10 + $10.Name = Interfaces + $10.RequiredPrefixes = $11 + $11.String = I + $10.AffectedEntity = Interface + $10.VisibilityMask = Public + $10.NamingStyle = PascalCase + $10.IncludeInstanceMembers = True + $10.IncludeStaticEntities = True + $7.NamingRule = $12 + $12.Name = Attributes + $12.RequiredSuffixes = $13 + $13.String = Attribute + $12.AffectedEntity = CustomAttributes + $12.VisibilityMask = Public + $12.NamingStyle = PascalCase + $12.IncludeInstanceMembers = True + $12.IncludeStaticEntities = True + $7.NamingRule = $14 + $14.Name = Event Arguments + $14.RequiredSuffixes = $15 + $15.String = EventArgs + $14.AffectedEntity = CustomEventArgs + $14.VisibilityMask = Public + $14.NamingStyle = PascalCase + $14.IncludeInstanceMembers = True + $14.IncludeStaticEntities = True + $7.NamingRule = $16 + $16.Name = Exceptions + $16.RequiredSuffixes = $17 + $17.String = Exception + $16.AffectedEntity = CustomExceptions + $16.VisibilityMask = VisibilityMask + $16.NamingStyle = PascalCase + $16.IncludeInstanceMembers = True + $16.IncludeStaticEntities = True + $7.NamingRule = $18 + $18.Name = Methods + $18.AffectedEntity = Methods + $18.VisibilityMask = Protected, Public + $18.NamingStyle = PascalCase + $18.IncludeInstanceMembers = True + $18.IncludeStaticEntities = True + $7.NamingRule = $19 + $19.Name = Static Readonly Fields + $19.AffectedEntity = ReadonlyField + $19.VisibilityMask = Protected, Public + $19.NamingStyle = PascalCase + $19.IncludeInstanceMembers = False + $19.IncludeStaticEntities = True + $7.NamingRule = $20 + $20.Name = Fields + $20.AffectedEntity = Field + $20.VisibilityMask = Protected, Public + $20.NamingStyle = PascalCase + $20.IncludeInstanceMembers = True + $20.IncludeStaticEntities = True + $7.NamingRule = $21 + $21.Name = ReadOnly Fields + $21.AffectedEntity = ReadonlyField + $21.VisibilityMask = Protected, Public + $21.NamingStyle = PascalCase + $21.IncludeInstanceMembers = True + $21.IncludeStaticEntities = False + $7.NamingRule = $22 + $22.Name = Constant Fields + $22.AffectedEntity = ConstantField + $22.VisibilityMask = Protected, Public + $22.NamingStyle = PascalCase + $22.IncludeInstanceMembers = True + $22.IncludeStaticEntities = True + $7.NamingRule = $23 + $23.Name = Properties + $23.AffectedEntity = Property + $23.VisibilityMask = Protected, Public + $23.NamingStyle = PascalCase + $23.IncludeInstanceMembers = True + $23.IncludeStaticEntities = True + $7.NamingRule = $24 + $24.Name = Events + $24.AffectedEntity = Event + $24.VisibilityMask = Protected, Public + $24.NamingStyle = PascalCase + $24.IncludeInstanceMembers = True + $24.IncludeStaticEntities = True + $7.NamingRule = $25 + $25.Name = Enum Members + $25.AffectedEntity = EnumMember + $25.VisibilityMask = VisibilityMask + $25.NamingStyle = PascalCase + $25.IncludeInstanceMembers = True + $25.IncludeStaticEntities = True + $7.NamingRule = $26 + $26.Name = Parameters + $26.AffectedEntity = Parameter + $26.VisibilityMask = VisibilityMask + $26.NamingStyle = CamelCase + $26.IncludeInstanceMembers = True + $26.IncludeStaticEntities = True + $7.NamingRule = $27 + $27.Name = Type Parameters + $27.RequiredPrefixes = $28 + $28.String = T + $27.AffectedEntity = TypeParameter + $27.VisibilityMask = VisibilityMask + $27.NamingStyle = PascalCase + $27.IncludeInstanceMembers = True + $27.IncludeStaticEntities = True + $0.VersionControlPolicy = $29 + $29.inheritsSet = Mono + EndGlobalSection +EndGlobal diff --git a/SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/EV3way_MonoBrick_sample.userprefs b/SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/EV3way_MonoBrick_sample.userprefs new file mode 100644 index 0000000..59dfcaa --- /dev/null +++ b/SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/EV3way_MonoBrick_sample.userprefs @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/ev3way_monobrick_sample_2018/EV3/Balancer.cs b/SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/ev3way_monobrick_sample_2018/EV3/Balancer.cs new file mode 100644 index 0000000..f44e767 --- /dev/null +++ b/SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/ev3way_monobrick_sample_2018/EV3/Balancer.cs @@ -0,0 +1,304 @@ +/** +****************************************************************************** +** FILE NAME : Balancer.cs +** +** ABSTRUCT : Two wheeled self-balancing robot "NXTway-GS" balance control program. +** NXTway-GS balance control algorithum is based on modern control theory +** which is servo control (state + integral feedback). +** To develop the controller and indentify the plant, The MathWorks +** MATLAB&Simulink had been used and this design methodology is +** called MBD (Model-Based Design/Development). This C source code +** is automatically generated from a Simulink model by using standard features +** of Real-Time Workshop Embedded Coder. All control parameters need to be defined +** by user and the sample parameters are defined in nxtOSEK\samples\nxtway_gs\balancer_param.c. +** For more detailed information about the controller alogorithum, please check: +** English : http://www.mathworks.com/matlabcentral/fileexchange/19147-nxtway-gs--self-balancing-two-wheeled-robot--controller-design +** Japanese: http://www.cybernet.co.jp/matlab/library/library/detail.php?id=TA060 +** +** MODEL INFO: +** MODEL NAME : balancer.mdl +** VERSION : 1.893 +** HISTORY : y_yama - Tue Sep 25 11:37:09 2007 +** takashic - Sun Sep 28 17:50:53 2008 +** Tadashi Huruya - Mon Feb 09 21:36:00 2015 +** ported from balancer.c +*** +** Copyright (c) 2009-2016 MathWorks, Inc. +** All rights reserved. +****************************************************************************** +**/ +/** +****************************************************************************** +** ファイル名 : Balancer.cs +** +** 概要 : 2輪型倒立振子ロボット「NXTway-GS」バランス制御プログラム +** NXTway-GSのバランス制御には、サーボ制御(状態 + 積分フィードバック) +** という現代制御を適用しています。制御対象の同定および制御器の開発 +** にはThe MathWorks社のMATLAB&Simulinkという製品を使用した、 +** MBD(モデルベースデザイン/開発)開発手法を用いています。このCプログラムは +** SimulinkモデルからReal-Time Workshop Embedded Coderコード生成標準機能を +** 使用して自動生成されたものです。バランス制御器の制御パラメータについては +** ユーザーハンドコード側で定義する必要があります。定義例として、 +** nxtOSEK\samples\nxtway_gs\balancer_param.cを参照してください。 +** バランス制御アルゴリズムの詳細情報につきましては +** 日本語: http://www.cybernet.co.jp/matlab/library/library/detail.php?id=TA060 +** 英語 : http://www.mathworks.com/matlabcentral/fileexchange/19147-nxtway-gs--self-balancing-two-wheeled-robot--controller-design +** を参照してください。 +** +** モデル関連情報: +** モデル名 : balancer.mdl +** バージョン : 1.893 +** 履歴 : y_yama - Tue Sep 25 11:37:09 2007 +** takashic - Sun Sep 28 17:50:53 2008 +** Tadashi Huruya - Mon Feb 09 21:36:00 2015 +** balancer.cを移植 +** +** Copyright (c) 2009-2015 MathWorks, Inc. +** All rights reserved. +****************************************************************************** +**/ + +using System; +using System.Threading; + +using MonoBrickFirmware; +using MonoBrickFirmware.Display.Dialogs; +using MonoBrickFirmware.Display; +using MonoBrickFirmware.Movement; +using MonoBrickFirmware.Sensors; + +namespace ETRobocon.EV3 +{ + class Balancer + { + const float CMD_MAX = 100.0F; /* 前進/旋回命令絶対最大値 */ + const float DEG2RAD = 0.01745329238F; /* 角度単位変換係数(=pi/180) */ + const float EXEC_PERIOD = 0.00400000019F; /* バランス制御実行周期(秒) */ + + const float A_D = 0.8F; /* low pass filter gain for motors average count */ + const float A_R = 0.996F; /* low pass filter gain for motors target count */ + /* servo control state feedback gain for NXT standard tire */ + static float[] K_F = new float[4] {-0.870303F, -31.9978F, -1.1566F * 0.6F, -2.78873F}; + const float K_I = -0.44721F; /* servo control integral gain */ + const float K_PHIDOT = 25.0F * 2.5F; /* turn target speed gain */ + const float K_THETADOT = 7.5F; /* forward target speed gain */ + + const float BATTERY_GAIN = 0.001089F; /* battery voltage gain for motor PWM outputs */ + const float BATTERY_OFFSET = 0.625F; /* battery voltage offset for motor PWM outputs */ + + static float ud_err_theta; /* 左右車輪の平均回転角度(θ)目標誤差状態値 */ + static float ud_psi; /* 車体ピッチ角度(ψ)状態値 */ + static float ud_theta_lpf; /* 左右車輪の平均回転角度(θ)状態値 */ + static float ud_theta_ref; /* 左右車輪の目標平均回転角度(θ)状態値 */ + static float ud_thetadot_cmd_lpf; /* 左右車輪の目標平均回転角速度(dθ/dt)状態値 */ + + public static void control(float args_cmd_forward, float args_cmd_turn, float + args_gyro, float args_gyro_offset, float + args_theta_m_l, float args_theta_m_r, float + args_battery, out sbyte ret_pwm_l, out sbyte ret_pwm_r) + { + float tmp_theta; + float tmp_theta_lpf; + float tmp_pwm_r_limiter; + float tmp_psidot; + float tmp_pwm_turn; + float tmp_pwm_l_limiter; + float tmp_thetadot_cmd_lpf; + float[] tmp = new float[4]; + float[] tmp_theta_0 = new float[4]; + int tmp_0; + + /* Sum: '/Sum' incorporates: + * Constant: '/Constant6' + * Constant: '/Constant' + * Constant: '/Constant1' + * Gain: '/Gain1' + * Gain: '/Gain2' + * Inport: '/cmd_forward' + * Product: '/Divide' + * Product: '/Product' + * Sum: '/Sum1' + * UnitDelay: '/Unit Delay' + */ + tmp_thetadot_cmd_lpf = (((args_cmd_forward / CMD_MAX) * K_THETADOT) * (1.0F + - A_R)) + (A_R * ud_thetadot_cmd_lpf); + + /* Gain: '/Gain' incorporates: + * Gain: '/deg2rad' + * Gain: '/deg2rad1' + * Inport: '/theta_m_l' + * Inport: '/theta_m_r' + * Sum: '/Sum1' + * Sum: '/Sum4' + * Sum: '/Sum6' + * UnitDelay: '/Unit Delay' + */ + tmp_theta = (((DEG2RAD * args_theta_m_l) + ud_psi) + ((DEG2RAD * + args_theta_m_r) + ud_psi)) * 0.5F; + + /* Sum: '/Sum' incorporates: + * Constant: '/Constant' + * Constant: '/Constant1' + * Gain: '/Gain2' + * Product: '/Product' + * Sum: '/Sum1' + * UnitDelay: '/Unit Delay' + */ + tmp_theta_lpf = ((1.0F - A_D) * tmp_theta) + (A_D * ud_theta_lpf); + + /* Gain: '/deg2rad2' incorporates: + * Inport: '/gyro' + * Inport: '/gyro_offset' + * Sum: '/Sum2' + */ + tmp_psidot = (args_gyro - args_gyro_offset) * DEG2RAD; + + /* Gain: '/Gain' incorporates: + * Constant: '/Constant2' + * Constant: '/Constant3' + * Constant: '/Constant' + * Constant: '/Constant' + * Gain: '/FeedbackGain' + * Gain: '/IntegralGain' + * Gain: '/Gain3' + * Inport: '/battery' + * Product: '/Product' + * Product: '/Product' + * Sum: '/Sum2' + * Sum: '/sum_err' + * Sum: '/Sum2' + * Sum: '/Sum' + * UnitDelay: '/Unit Delay' + * UnitDelay: '/Unit Delay' + * UnitDelay: '/Unit Delay' + * UnitDelay: '/Unit Delay' + */ + tmp[0] = ud_theta_ref; + tmp[1] = 0.0F; + tmp[2] = tmp_thetadot_cmd_lpf; + tmp[3] = 0.0F; + tmp_theta_0[0] = tmp_theta; + tmp_theta_0[1] = ud_psi; + tmp_theta_0[2] = (tmp_theta_lpf - ud_theta_lpf) / EXEC_PERIOD; + tmp_theta_0[3] = tmp_psidot; + tmp_pwm_r_limiter = 0.0F; + for (tmp_0 = 0; tmp_0 < 4; tmp_0++) { + tmp_pwm_r_limiter += (tmp[tmp_0] - tmp_theta_0[tmp_0]) * K_F[(tmp_0)]; + } + + tmp_pwm_r_limiter = (((K_I * ud_err_theta) + tmp_pwm_r_limiter) / + ((BATTERY_GAIN * args_battery) - BATTERY_OFFSET)) * + 100.0F; + + /* Gain: '/Gain2' incorporates: + * Constant: '/Constant1' + * Inport: '/cmd_turn' + * Product: '/Divide1' + */ + tmp_pwm_turn = (args_cmd_turn / CMD_MAX) * K_PHIDOT; + + /* Sum: '/Sum' */ + tmp_pwm_l_limiter = tmp_pwm_r_limiter + tmp_pwm_turn; + + /* Saturate: '/pwm_l_limiter' */ + tmp_pwm_l_limiter = rt_SATURATE(tmp_pwm_l_limiter, -100.0F, 100.0F); + + /* Outport: '/pwm_l' incorporates: + * DataTypeConversion: '/Data Type Conversion' + */ + ret_pwm_l = (sbyte)tmp_pwm_l_limiter; + + /* Sum: '/Sum1' */ + tmp_pwm_r_limiter -= tmp_pwm_turn; + + /* Saturate: '/pwm_r_limiter' */ + tmp_pwm_r_limiter = rt_SATURATE(tmp_pwm_r_limiter, -100.0F, 100.0F); + + /* Outport: '/pwm_r' incorporates: + * DataTypeConversion: '/Data Type Conversion6' + */ + ret_pwm_r = (sbyte)tmp_pwm_r_limiter; + + /* Sum: '/Sum' incorporates: + * Gain: '/Gain' + * UnitDelay: '/Unit Delay' + */ + tmp_pwm_l_limiter = (EXEC_PERIOD * tmp_thetadot_cmd_lpf) + ud_theta_ref; + + /* Sum: '/Sum' incorporates: + * Gain: '/Gain' + * UnitDelay: '/Unit Delay' + */ + tmp_pwm_turn = (EXEC_PERIOD * tmp_psidot) + ud_psi; + + /* Sum: '/Sum' incorporates: + * Gain: '/Gain' + * Sum: '/Sum1' + * UnitDelay: '/Unit Delay' + * UnitDelay: '/Unit Delay' + */ + tmp_pwm_r_limiter = ((ud_theta_ref - tmp_theta) * EXEC_PERIOD) + + ud_err_theta; + + /* user code (Update function Body) */ + /* System '' */ + /* 次回演算用状態量保存処理 */ + + /* Update for UnitDelay: '/Unit Delay' */ + ud_err_theta = tmp_pwm_r_limiter; + + /* Update for UnitDelay: '/Unit Delay' */ + ud_theta_ref = tmp_pwm_l_limiter; + + /* Update for UnitDelay: '/Unit Delay' */ + ud_thetadot_cmd_lpf = tmp_thetadot_cmd_lpf; + + /* Update for UnitDelay: '/Unit Delay' */ + ud_psi = tmp_pwm_turn; + + /* Update for UnitDelay: '/Unit Delay' */ + ud_theta_lpf = tmp_theta_lpf; + } + + /* Model initialize function */ + public static void init() + { + /* Registration code */ + + /* states (dwork) */ + + /* custom states */ + ud_err_theta = 0.0F; + ud_theta_ref = 0.0F; + ud_thetadot_cmd_lpf = 0.0F; + ud_psi = 0.0F; + ud_theta_lpf = 0.0F; + } + + private static float rt_SATURATE(float sig, float ll, float ul) + { + return (((sig) >= (ul)) ? (ul) : (((sig) <= (ll)) ? (ll) : (sig)) ); + } + + //***************************************************************************** + // 関数名 : backlash_cancel + // 引数 : lpwm (左モーターPWM値 ※前回の出力値) + // rpwm (右モーターPWM値 ※前回の出力値) + // lenc (左モーターエンコーダー値) + // renc (右モーターエンコーダー値) + // 返り値 : なし + // 概要 : 直近のPWM値に応じてエンコーダー値にバックラッシュ分の値を追加します。 + //***************************************************************************** + public static void backlash_cancel(sbyte lpwm, sbyte rpwm, ref int lenc, ref int renc) + { + const int BACKLASHHALF = 4; // バックラッシュの半分[deg] + + if (lpwm < 0) lenc += BACKLASHHALF; + else if (lpwm > 0) lenc -= BACKLASHHALF; + + if (rpwm < 0) renc += BACKLASHHALF; + else if (rpwm > 0) renc -= BACKLASHHALF; + } + } +} + diff --git a/SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/ev3way_monobrick_sample_2018/EV3/Brick.cs b/SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/ev3way_monobrick_sample_2018/EV3/Brick.cs new file mode 100644 index 0000000..8b616c0 --- /dev/null +++ b/SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/ev3way_monobrick_sample_2018/EV3/Brick.cs @@ -0,0 +1,189 @@ +//Brick class (get battery voltage, power off ,reboot, exit and change hostname ) +// by jtFuruhata 2014 + +using System; +using System.IO; +using MonoBrickFirmware.Native; + +namespace ETRobocon.EV3 +{ + public class Brick + { + protected const int ANALOG_SIZE = 32; + protected const int ANALOG_BAT_CUR_OFF = 28; + protected const int ANALOG_BAT_V_OFF = 30; + + protected const float AMP_CIN = 22.0f; + protected const float VCE = 0.05f; + protected const float AMP_VIN = 0.5f; + + protected const float ADC_REF = 5.0f; // 5.0 Volts + protected const int ADC_RES = 4095; + + protected const string HOME = "/home/root"; + protected const string LEJOS_HOME = HOME + "/lejos/bin"; + protected const string START_NETWORK = LEJOS_HOME + "/startnetwork"; + protected const string START_NETWORK_ORG = START_NETWORK + ".org"; + protected const string START_BT = LEJOS_HOME + "/startbt"; + protected const string START_BT_ORG = START_BT + ".org"; + protected const string MONO_HOME = "/usr/local/bin"; + protected const string HOSTNAME = "/hostname"; + protected const string SYSTEM_HOSTNAME = "/etc" + HOSTNAME; + protected const string LEJOS_HOSTNAME = LEJOS_HOME + HOSTNAME; + protected const string BTPIN = "/btpin"; + protected const string SYSTEM_BTPIN = "/etc/bluetooth" + BTPIN; + protected const string LEJOS_BTPIN = LEJOS_HOME + BTPIN; + + protected static Brick Instance; + protected UnixDevice dev; + protected MemoryArea batteryMem; + + static Brick () + { + Brick.Instance = new Brick (); + } + + protected Brick () + { + this.dev = new UnixDevice ("/dev/lms_analog"); + this.batteryMem = this.dev.MMap (ANALOG_SIZE, 0); + } + + protected static short getBatteryCurrentRaw () + { + return System.BitConverter.ToInt16 (Brick.Instance.batteryMem.Read (ANALOG_BAT_CUR_OFF, 2), 0); + } + + protected static short getBatteryVoltageRaw () + { + return System.BitConverter.ToInt16 (Brick.Instance.batteryMem.Read (ANALOG_BAT_V_OFF, 2), 0); + } + + protected static float convert (int val) + { + return (float)val * ADC_REF / ADC_RES; + } + + protected static int shell (string fileName, string arguments = "") + { + return MonoBrickFirmware.Native.ProcessHelper.RunAndWaitForProcess (fileName, arguments); + } + + /// + /// バッテリの電源電圧をボルト単位で取得する + /// + /// 電圧(V) + public static float GetVoltage () + { + float CinV = convert(Brick.getBatteryCurrentRaw())/AMP_CIN; + return convert(Brick.getBatteryVoltageRaw())/AMP_VIN + CinV + VCE; + } + + /// + /// バッテリの電源電圧をミリボルト単位で取得する + /// + /// 電圧(mV) + public static int GetVoltageMilliVolt () + { + return (int)(Brick.GetVoltage()*1000f); + } + + /// + /// EV3インテリジェントブリックの電源を切る + /// + public static void Poweroff () + { + MonoBrickFirmware.Native.ProcessHelper.StartProcess ("halt", "-p"); + } + + /// + /// EV3インテリジェントブリックを再起動する + /// + public static void Reboot () + { + MonoBrickFirmware.Native.ProcessHelper.StartProcess ("reboot"); + } + + /// + /// ユーザアプリを終了し、MonoBrickメインメニューへ戻る + /// + public static void ExitToMenu () + { + MonoBrickFirmware.Native.ProcessHelper.StartProcess (MONO_HOME + "/mono", + "--full-aot " + MONO_HOME + "/StartupApp.exe"); + } + + /// + /// EV3インテリジェントブリックのホスト名を取得する + /// + /// ホスト名 + public static string GetName () + { + return MonoBrickFirmware.Native.ProcessHelper.RunAndWaitForProcessWithOutput ("hostname"); + } + + /// + /// EV3インテリジェントブリックのホスト名およびBluetoothデバイス名を設定する + /// + /// 設定するホスト名(デバイス名) + public static void SetName (string name) + { + FileStream fs = File.Create (LEJOS_HOSTNAME); + StreamWriter sw = new StreamWriter (fs); + sw.WriteLine (name); + sw.Close (); + fs.Close (); + Brick.shell ("cp", " -f " + LEJOS_HOSTNAME + " " +SYSTEM_HOSTNAME); + Brick.shell ("hostname", name); + Brick.shell ("hciconfig", "hci0 name " + name); + } + + /// + /// Bluetooth関係のETロボコン拡張機能を有効にする + /// + public static void InstallETRoboExt () + { + if (!File.Exists (START_NETWORK_ORG)) { + Brick.shell ("cp", "-f " + START_NETWORK + " " + START_NETWORK_ORG); + } + FileStream fs = File.Create (START_NETWORK); + StreamWriter sw = new StreamWriter (fs); + sw.WriteLine ("#! /bin/sh"); + sw.WriteLine ("HOSTNAME=`cat " + LEJOS_HOSTNAME + "`"); + sw.WriteLine ("cp -f " + LEJOS_HOSTNAME + " " +SYSTEM_HOSTNAME); + sw.WriteLine ("hostname ${HOSTNAME}"); + sw.WriteLine (START_NETWORK_ORG); + sw.Close (); + fs.Close (); + + if (!File.Exists (START_BT_ORG)) { + Brick.shell ("cp", "-f " + START_BT + " " + START_BT_ORG); + } + fs = File.Create (START_BT); + sw = new StreamWriter (fs); + sw.WriteLine ("#! /bin/sh"); + sw.WriteLine ("cp -f " + LEJOS_BTPIN + " " + SYSTEM_BTPIN); + sw.WriteLine ("hciconfig hci0 auth"); + sw.WriteLine (START_BT_ORG); + sw.Close (); + fs.Close (); + + if (!File.Exists (LEJOS_BTPIN)) { + fs = File.Create (LEJOS_BTPIN); + sw = new StreamWriter (fs); + sw.WriteLine ("1234"); + sw.Close (); + fs.Close (); + } + + if (!File.Exists (LEJOS_HOSTNAME)) { + fs = File.Create (LEJOS_HOSTNAME); + sw = new StreamWriter (fs); + sw.WriteLine ("EV3"); + sw.Close (); + fs.Close (); + } + } + } +} + diff --git a/SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/ev3way_monobrick_sample_2018/EV3body.cs b/SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/ev3way_monobrick_sample_2018/EV3body.cs new file mode 100644 index 0000000..ba55882 --- /dev/null +++ b/SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/ev3way_monobrick_sample_2018/EV3body.cs @@ -0,0 +1,31 @@ +using System; +using System.Net.Sockets; + +using MonoBrickFirmware.Movement; +using MonoBrickFirmware.Sensors; + +namespace ETRobocon.EV3.Sample +{ + struct EV3body{ + //モータオブジェクト + public Motor motorL; + public Motor motorR; + public Motor motorT; + //センサーオブジェクト + public EV3TouchSensor touch; + public EV3UltrasonicSensor sonar; + public EV3ColorSensor color; + public EV3GyroSensor gyro; + + public static void init(ref EV3body body){ + body.motorL = new Motor (MotorPort.OutC); + body.motorR = new Motor (MotorPort.OutB); + body.motorT = new Motor (MotorPort.OutA); + body.touch = new EV3TouchSensor (SensorPort.In1); + body.sonar = new EV3UltrasonicSensor (SensorPort.In2, UltraSonicMode.Centimeter); // return [mm] + body.color = new EV3ColorSensor (SensorPort.In3, ColorMode.Reflection); + body.gyro = new EV3GyroSensor (SensorPort.In4, GyroMode.AngularVelocity); + } + } +} + diff --git a/SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/ev3way_monobrick_sample_2018/Main.cs b/SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/ev3way_monobrick_sample_2018/Main.cs new file mode 100644 index 0000000..5f71ffc --- /dev/null +++ b/SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/ev3way_monobrick_sample_2018/Main.cs @@ -0,0 +1,147 @@ +using System; +using System.Net; +using System.Net.Sockets; +using System.Threading; +using System.Diagnostics; + +using MonoBrickFirmware.Display.Dialogs; +using MonoBrickFirmware.Display; + +using ETRobocon.EV3; + +// 2輪倒立振子ライントレースロボットの MonoBrick 用 c# サンプルプログラム。 +namespace ETRobocon.EV3.Sample +{ + class MainClass + { + //下記のパラメータは個体/環境に合わせて変更する必要があります + const int GYRO_OFFSET = 0; //ジャイロセンサオフセット値 + const int LIGHT_BLACK = 0; //白色の光センサ値 + const int LIGHT_WHITE = 40; //黒色の光センサ値 + const int TAIL_ANGLE_STAND_UP = 94; //完全停止時の角度[deg] + const int TAIL_ANGLE_DRIVE = 3; //バランス走行時の角度[deg] + const float P_GAIN = 2.5F; //完全停止用モータ制御比例係数 + const int PWM_ABS_MAX = 60; //完全停止用モータ制御PWM絶対最大値 + + public static void Main() + { + // 構造体の宣言と初期化 + var body = new EV3body (); + EV3body.init (ref body); + + // Bluetooth関係のETロボコン拡張機能を有効にする + Brick.InstallETRoboExt (); + + // センサーおよびモータに対して初回アクセスをしておく + body.color.Read(); + body.gyro.Read (); + body.motorL.SetPower (0); + body.motorR.SetPower (0); + body.motorT.SetPower (0); + + body.motorL.ResetTacho (); + body.motorR.ResetTacho (); + body.motorT.ResetTacho (); + Balancer.init (); + + // スタート待ち + wait_start(body); + + try{ + run(body); + }catch(Exception){ + var dialogE = new InfoDialog ("Exception."); + dialogE.Show();//Wait for enter to be pressed + } + + body.motorL.Off (); + body.motorR.Off (); + body.motorT.Off (); + + Lcd.Clear (); + Lcd.Update (); + + if (Debugger.IsAttached) { + Brick.ExitToMenu (); // MonoBrickメインメニューへ戻る + } + } + + static void wait_start(EV3body body){ + //スタート待ち + while (!body.touch.IsPressed ()) { + tail_control(body, TAIL_ANGLE_STAND_UP); + Thread.Sleep (4); + } + } + + static void run(EV3body body){ + // 電圧を取得 + int battery = Brick.GetVoltageMilliVolt(); + + sbyte forward; + sbyte turn; + + sbyte oldPwmL = 0, oldPwmR = 0; + + while (true) + { + tail_control(body, TAIL_ANGLE_DRIVE); // バランス走行用角度に制御 + + forward = 50; + turn = (body.color.Read () >= (LIGHT_BLACK + LIGHT_WHITE) / 2) ? (sbyte)50 : (sbyte)-50; + + int gyroNow = body.gyro.Read(); + int theTaL = body.motorL.GetTachoCount(); + int theTaR = body.motorR.GetTachoCount(); + + // バックラッシュをキャンセル + Balancer.backlash_cancel(oldPwmL, oldPwmR, ref theTaL, ref theTaR); + + sbyte pwmL, pwmR; + Balancer.control ( + (float)forward, (float)turn, (float)gyroNow, (float)GYRO_OFFSET, (float)theTaL, (float)theTaR, (float)battery, + out pwmL, out pwmR + ); + + oldPwmL = pwmL; + oldPwmR = pwmR; + + if (pwmL == 0) { + body.motorL.Brake(); + } else { + body.motorL.SetPower(pwmL); + } + if (pwmR == 0) { + body.motorR.Brake(); + } else { + body.motorR.SetPower(pwmR); + } + + // バランス制御のみだと3msecで安定 + // 尻尾制御と障害物検知を使用する場合2msecで安定 + Thread.Sleep(1); + } + } + + /* + * 走行体完全停止用モータの角度制御 + * @param angle モータ目標角度[度] + */ + static void tail_control(EV3body body, int angle) + { + float pwm = (float)(angle - body.motorT.GetTachoCount ()) * P_GAIN; // 比例制御 + // PWM出力飽和処理 + if (pwm > PWM_ABS_MAX) { + pwm = PWM_ABS_MAX; + } else if (pwm < -PWM_ABS_MAX) { + pwm = -PWM_ABS_MAX; + } + if ((sbyte)pwm == 0) { + body.motorT.Brake(); + } else { + body.motorT.SetPower((sbyte)pwm); + } + } + } +} + diff --git a/SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/ev3way_monobrick_sample_2018/MonoBrickFirmware.dll b/SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/ev3way_monobrick_sample_2018/MonoBrickFirmware.dll new file mode 100644 index 0000000000000000000000000000000000000000..71b55b7699381219bc38d3e87ab9e4b47ce1b55b GIT binary patch literal 178176 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 ?UO2OV+ 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 E03y3>pa1{> literal 0 HcmV?d00001 diff --git a/SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/ev3way_monobrick_sample_2018/ev3way_monobrick_sample.csproj b/SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/ev3way_monobrick_sample_2018/ev3way_monobrick_sample.csproj new file mode 100644 index 0000000..eadfb02 --- /dev/null +++ b/SampleCode/EV3way_MonoBrick_sample/EV3way_MonoBrick_2018/ev3way_monobrick_sample_2018/ev3way_monobrick_sample.csproj @@ -0,0 +1,45 @@ + + + + Debug + x86 + {803879AC-26C2-49B0-AAA0-0DE4A7C68C87};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {D143CFF0-F2F5-474A-B631-698EC2E98A12} + Exe + ETRobocon.EV3.Sample + EV3Way + v4.5 + + + true + full + false + bin\Debug + DEBUG; + prompt + 4 + x86 + false + + + true + bin\Release + prompt + 4 + x86 + false + + + + + MonoBrickFirmware.dll + + + + + + + + + + \ No newline at end of file