LoginSignup
5
7

More than 1 year has passed since last update.

GitHub Codespaces でできる! 仮想シミュレーション環境での車載アプリ

Last updated at Posted at 2022-07-23

以前にGitpodでもやってましたが

数年前にもGitpodで同じような記事を書きましたがcodespacesも使えるようになったので、もうちょっと加えて車載アプリ環境を試してみました。前回との違いは次になります。

  • ローカルPCでDocker環境があれば、ローカルPCでも動かせるようになっています。
  • Os(TOPPERS/ATK2)だけでなく、 Com(TOPPERS/A-COMSTACK)、 Rte(TOPPERS/A-RTGEN)も追加して、CAN通信の実行も追加しました

codespacesの機能がまだいくつか実装されていないものがあるらしく、思った通りの環境にはなっていないのですが(違っていれば教えてください)メモとして書いておきます。

準備

codespacesで起動する

リポジトリ( https://github.com/toppers/hakoniwa-ecu-multiplay )に移動し、 Code から Create codespace on main を選択します。
toppers_hakoniwa-ecu-multiplay.png

しばらく待つと ワークスペースはクローンされた状態でターミナルは /workspaces/hakoniwa-ecu-multiplay がカレントの状態で出力されます

ローカルPCで行う場合

次のようにDockerの環境を構築して実行します

docker build -t hakoniwa/ecu-multiplay .
docker run -it hakoniwa/ecu-multiplay

ワークスペース環境を整える

codespaces で起動すると /workspaces/hakoniwa-ecu-multiplay になってしまい、現状変更が難しそうなので、手動でワークスペースを整えます。(今後この作業は変わっていく予定です)
VS codeのエクスプローラから右クリックでメニューを出して、ワークスペースにフォルダを追加... を選択します。
(もしくはmenu > file > ワークスペースにフォルダを追加...でもOK)
(file > Add Folder to Workspace... in English or Codespaces(for Web))
hakoniwa-ecu-multiplay__Codespaces__—_Visual_Studio_Code_と_Slack___athrill___hakoniwa___1_個の新しいアイテム.png

追加するフォルダは /root/workspace です。
hakoniwa-ecu-multiplay__Codespaces__—_Visual_Studio_Code.png

追加をすると エクスプローラは次のように見えます。
未設定__ワークスペース_.png

workspaceの下には

  • a-comstack
  • a-rtegen
  • atk2-sc1

フォルダが作られているので、これがあることを確認してください。

AUTOSAR Os(ATK2)のサンプルプログラムの実行

以前と同じです。
ATK2にあるsample1アプリを動かします。

ビルド方法

cd /root/workspace/atk2-sc1/
mkdir OBJ ;cd OBJ
../configure -T hsbrh850f1k_gcc
cp /root/athrill-target-rh850f1x/params/rh850f1k/atk2-sc1/* .
make

athrillを使った起動方法

ビルドしたディレクトリで次のコマンドで起動します

athrill2 -c1 -i -d device_config.txt -m memory.txt atk2-sc1
core id num=1
ROM : START=0x0 SIZE=1024
RAM : START=0xfede8000 SIZE=512
ELF SET CACHE RIGION:addr=0x0 size=62 [KB]
Elf loading was succeeded:0x0 - 0xf89b : 62.155 KB
Elf loading was succeeded:0xf89c - 0x1205c : 0.220 KB
ELF SYMBOL SECTION LOADED:index=16
ELF SYMBOL SECTION LOADED:sym_num=597
ELF STRING TABLE SECTION LOADED:index=17
DEBUG_FUNC_FT_LOG_SIZE=1024
[DBG>
HIT break:0x0
[NEXT> pc=0x0 prc_support.S 256

ここで表示がストップするのでターミナルから「c」を入力して、athrillの実行を継続します

c      <======  INPUT `c` 
[CPU>
TOPPERS/ATK2-SC1 Release 1.4.2 for HSBRH850F1K (Jul 17 2022, 09:27:45)

Input Command:

TOPPERSのバナーが出力され、sampleが入力待ち状態になります。入力コマンドなどについてはsample1.cに書いていますので詳しくはそちらを読んでください。

CAN通信のサンプルプログラム

athrillはデバイスI/Oをrosトピックとして扱う機能があるので、それを活用してCANの送受信を行うことができます。
CAN通信アプリはA-CANで用意しているサンプルプログラムを使用してます。
サンプルプログラムは定期的にCANデータを送信し、受信データを出力してくれます。

箱庭(仮想シミュレーション環境)の構成

サンプルプログラムはathrillでシミュレーションを行い、CAN通信の対向はROSトピックのコマンドで対応します。
また別途ROSマスターが必要になります。

alt

以下それぞのノードごとにターミナルコンソールが必要になります。

ROSマスターの起動

ROSマスターの起動スクリプトは用意されていますので、そのスクリプを実行します。

/workspaces/mnt/master/ros-master.bash 
... logging to /root/.ros/log/a9400e2e-05b3-11ed-bf83-000d3ac8da62/roslaunch-codespaces-4a7fa1-8259.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://codespaces-4a7fa1:41219/
ros_comm version 1.14.13


SUMMARY
========

PARAMETERS
 * /rosdistro: melodic
 * /rosversion: 1.14.13

NODES

auto-starting new master
process[master]: started with pid [8307]
ROS_MASTER_URI=http://codespaces-4a7fa1:11311/

setting /run_id to a9400e2e-05b3-11ed-bf83-000d3ac8da62
process[rosout-1]: started with pid [8326]
started core service [/rosout]

サンプルアプリのビルドと起動

ROSマスターとは別のターミナルを起動して次のコマンドを実行します。

cd /root/workspace/a-comstack/can/target/hsbrh850f1k_gcc/sample/
make can
make
cp /root/athrill-target-rh850f1x/params/rh850f1k/atk2-sc1/* .

これでatk2-sc1.exeというサンプルプログラムが生成されるので、実行します。

athrill2 -c1 -i -d device_config_with_can.txt -m memory.txt atk2-sc1.exe
core id num=1
ROM : START=0x0 SIZE=1024
RAM : START=0xfede8000 SIZE=512
ELF SET CACHE RIGION:addr=0x0 size=57 [KB]
Elf loading was succeeded:0x0 - 0xe680 : 57.640 KB
Elf loading was succeeded:0xe680 - 0x128c4 : 0.160 KB
ELF SYMBOL SECTION LOADED:index=16
ELF SYMBOL SECTION LOADED:sym_num=602
ELF STRING TABLE SECTION LOADED:index=17
DEBUG_FUNC_MROS_TOPIC_PUB_0 = channel0/CAN_IDE0_RTR0_DLC8_0x001
DEBUG_FUNC_MROS_TOPIC_SUB_0 = channel0/CAN_IDE0_RTR0_DLC8_0x123
DEBUG_FUNC_MROS_TOPIC_SUB_1 = channel0/CAN_IDE0_RTR0_DLC8_0x122
DEBUG_FUNC_MROS_TOPIC_SUB_2 = channel0/CAN_IDE0_RTR0_DLC8_0x003
DEBUG_FUNC_MROS_TOPIC_SUB_3 = channel0/CAN_IDE0_RTR0_DLC8_0x004
DEBUG_FUNC_FT_LOG_SIZE=1024
mros_master_ipaddr=0.0.0.0
mros_slave_port_no=11411
[DBG>mros_uri_slave=http://127.0.0.1:11411
mros_publisher_port_no=11511
**********mROS main task start**********

HIT break:0x0
[NEXT> pc=0x0 prc_support.S 256
**********mROS sub task start**********
**********mROS mas task start**********
DEBUG_FUNC_MROS_NODE_NAME = athrill_test_node
**********mROS mas task start**********
**********mROS pub task start**********
**********mROS slv task start**********
WARNING: topic [/channel0/CAN_IDE0_RTR0_DLC8_0x123] does not appear to be published yet
WARNING: topic [/channel0/CAN_IDE0_RTR0_DLC8_0x122] does not appear to be published yet
WARNING: topic [/channel0/CAN_IDE0_RTR0_DLC8_0x003] does not appear to be published yet
WARNING: topic [/channel0/CAN_IDE0_RTR0_DLC8_0x004] does not appear to be published yet

ここで止まるので、今度はROSトピックのターミナルを起動します。
このターミナルはサンプルプログラムのターミナルと一緒に見たいので、並べるように表示させてください。
ターミナルを分割すると並べて表示することができます。
README_md_—未設定__ワークスペース.png

ROSトピックのノードを起動

ROSの環境変数を整えてから、CAN通信を行なっているROSトピックの設定を行います。

source /opt/ros/melodic/setup.bash
rostopic echo /channel0/CAN_IDE0_RTR0_DLC8_0x001

サンプルプログラムの実行

先ほどathrillを起動したところで止まっていた、サンプルプログラムを継続実行します。cを入力します。
そうするとTOPPERSがバナーが表示されてサンプルアプリからCANのデータ出力されたときに、ROSトピックがわでCANデータが表示されます。

c
[CPU>
TOPPERS/ATK2-SC1 Release 1.4.2 for HSBRH850F1K (Jul 23 2022, 01:41:36)

== finished StartupHook ==
== Can_Init ==
== CanIf_ControllerModeIndication(0, 2) ==
[FCN0] Can_Write(3) CAN-ID:0x1
DATA[0]:0x0
DATA[1]:0x1
DATA[2]:0x2
DATA[3]:0x3
DATA[4]:0x4
DATA[5]:0x5
DATA[6]:0x6
DATA[7]:0x7

VSCodeで見るとこんな感じで確認ができます。

README_md_—未設定__ワークスペース.png

お知らせ:箱庭もくもく会

TOPPERS箱庭WGでは,もくもく会を不定期に開催しています.
本記事の内容を実際に試してみたい方や試してみたけど詰まっている方は,ぜひご参加ください.画面共有しながら参加者同士でサポートしたり,一緒に新しい機能を実装したりと”もくもく”しましょう.

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7