こんにちは
まえけんです。
今週はCRANE-X7の開発環境構築についてです。
まずは今回の開発環境についてです。
OS:Ubuntu 16.04
Editor:VisualStudio Code(以下vscode)
使用言語:C++
vscodeを使ってステップ実行や変数のウォッチ、ブレークポイントの設定などが出来るデバッグ環境を作るのが目標です。
CRANE-X7はDynamixelを使っているのでまずはDynamixel-SDKのセットアップをします。
Linuxで動かす場合は基本的にRobotisのマニュアル通りで問題無いはずです。
今回は64bit版でセットアップしました。
Dynamixel-SDK公式マニュアルはこちら
ここまで作業した段階でc++のコンパイラとmakeツールが入りました。
次はvscodeでC++の開発環境を整えます。
公式の手順が乗っているので、まずはC/C++開発用の拡張機能を導入します。
コードの補完機能を有効にするためにこのサイトを参考にしてコンパイラのパスを通しました。
ちなみに私のc_cpp_propaties.jsonは以下のようになりました。
この段階でDynamixel SDKのサンプルを動かせるはずなので、試しにサンプルソフトを動かしてみます。
とりあえず今後の開発のために以下のようなディレクトリ構成にして開発を始めます。
CraneX7
|_Dynamixel SDK
|_その他各研修用ソフトのディレクトリ
|_main.cpp
|_buld
|_Makefile
この段階ではまだ研修用のソフトは無いですが、こうする予定です。
Ctrl + Shift + @ でvscode上のターミナルが開くのでそこで作業をします。
{$作業場所}/DynamixelSDK/c++/example/protocol2.0/bulk_read_write/linux64/ に移動して以下のコマンドを実行します。
$ make
以下のようなログがでて、”bulk_read_write”というファイルが生成されていればOKです。
mkdir -p .objects/
g++ -O2 -O3 -DLINUX -D_GNU_SOURCE -Wall -I../../../../include/dynamixel_sdk -m64 -g -c ../bulk_read_write.cpp -o .objects/bulk_read_write.o
g++ -O2 -O3 -DLINUX -D_GNU_SOURCE -Wall -I../../../../include/dynamixel_sdk -m64 -g .objects/bulk_read_write.o -o bulk_read_write -ldxl_x64_cpp -lrt
コンパイルしたものを動かす際はこちらの公式ページを参考にしてください。
せっかくなので、デバッグ環境も整えます。
まずはbulk_read_writeプロジェクトをサンプルとするので、以下の用にします。
CraneX7
|_Dynamixel SDK
|_dxl_test(新しく作成)
|_bulk_read_write.cpp({$作業場所}/DynamixelSDK/c++/example/protocol2.0/bulk_read_write/ からコピーしてきた)
|_buld(新しく作成)
|_Makefile(先ほどのmakeファイルをここにコピー)
この構成にするとMakefileを少し修正しなくてはなりません。
一箇所修正します。
29行目
DIR_DXL = ../../../.. -> DIR_DXL = ../../DynamixelSDK/c++
後ほどもう少し修正しますが、とりあえずこれでOKです。
ためしにこの段階でコンパイル出来るかテストします。
今回は CraneX7/dxl_test/buildでmakeコマンドを実行します。
先ほどと同様にコンパイルできてればOKです。
さて、次にビルドタスクを設定します。
まずtasks.jsonを生成します。ファイルの生成はこちらを参考にしました。
今回はすでにあるMakefaileを指定してビルドしたいのでちょっと中身を書き換えます。
参考にしたのはこちらのページです。
実際にのファイルは以下のようになりました。
tasks.json
{
"tasks": [
{
"type": "shell",
"label": "make",
"command": "make -C dxl_test/build",
"args": [],
"group": "build"
},
{
"type": "shell",
"label": "my make clean",
"command": "make",
"args": [
"clean"
],
"group": "build"
}
],
"version": "2.0.0"
}
このファイルを作ると”Ctrl + Shift + B”を押すと以下のように自分の作ったタスクが表示されます。
そのまま”make”というタスクをクリックして実行するとターミナルに以下のような文字列が出力されて、プロジェクトがビルドされます。
最後にデバッグの設定をします。
デバッグ用のファイル”launch.json”の生成はこちらのサイトを参考にしました。
launch.jsonファイルも以下のように修正しました。
{
// IntelliSense を使用して利用可能な属性を学べます。
// 既存の属性の説明をホバーして表示します。
// 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "make",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/../dxl_test/build/bulk_read_write",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "gdb の再フォーマットを有効にする",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "make",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
これでデバッグが出来るようになりました!
デバッグの実行は、エディタ上部のメニューバーの「デバック(D)」-> [デバッグの開始(S)] から出来ます。
少し長くなってしまいましたが、これで開発環境の準備は完了です!
ちなみにコードのチラ見せになってしまいますが
こんな感じでステップ実行や変数のウォッチ、ブレークポイントの設定などが出来ます!
来週からは研修のソフトを書くための下準備をしていきます。
開発に入るまでもう少し準備が必要です!
来週もよろしくお願いします。