ホームページを作る際に参考にした情報まとめ
HTMLとCSSを書いてgithub.ioでホームページを公開した。Webページの作成自体初めてで知らないことが多かったので、参考にした情報をまとめておく。コメント付きブックマーク的な感じ。
できたもの
とりあえずこんな感じになった。サムネイルも何も指定してない簡素な作り。
制作過程
HTMLの基本
headとかtitleとかbodyとか、基本的なHTMLの構造を知った。これだけでとりあえず内容は書ける。これ以降はずっと見栄えの話。
ディレクトリ構造
自分が作った作品を説明するページ(HTMLファイル)はworksという名前のディレクトリに置いてみた。その方が作る本人も見に来る人も何と無く分かりやすい。
Favicon
ブックマークとかブラウザのタブとかに表示されるアイコンを設定する。
CSS
サイトの見栄えを良くするためにCSSを書く。記述方法は色々あるけどstyle.css
を作って読み込む方式にした。
中央寄せ
文章が画面の端から端まで続いてると読むのがしんどいし、改行して左寄せになっててもカッコ悪い。中央寄せにして、左右に余白を作ることにした。
画像のトリミング
今まで作った作品の画像を同じ大きさで並べたかった。それぞれ画像サイズや縦横比が異なるため、単純な拡大縮小では対応できない。object-fit: cover;
によって指定したサイズに画像がトリミングされた。あと、参考サイトは猫の画像を例題に使っててすごく可愛いから見て。
画像を角丸にする
僕は保育園の頃から角が立ってるのが嫌いで、図工の授業でもずっとヤスリで削っていた。当然画像も角を丸くする。border-radius: 10px;
みたいな感じで指定する。
レスポンシブデザイン
スマホなどの小さい画面で見るとギュッッッッッってなるので、PCだと2列、スマホだと1列にブロックが並ぶような構成にした。
画像や文字を中央寄せした際に、左右の余白は上下で揃ってて欲しいので、max-width
を指定することで余白や画像の大きさを揃えた。max-width
以下の画面幅の場合は画面幅に合わせて大きさが変化するので見切れるようなことはない。
ちゃんとレスポンシブデザインになってるか、Googleが確認してくれる。そんなにこだわるつもりはないけど、GoogleがOKと言ってくれたらなんか安心できる。
フォント
せっかくなら文字のフォントにもある程度こだわりたい。Google fontsが好きなフォントを探したり見比べたりできて便利だった。使うときも読み込むコードを数行書くだけなのでお手軽。ありがたい。
M PLUS Rounded 1cにした。角が丸いことと、文字の縦横比が正方形に近いものを探したらこれが一番マシだった。
github.ioで公開
書いたファイルたちをGitHubに置いとくだけでページを公開できる。username.github.ioという名前でリポジトリを作るだけでhttps://username.github.ioで見れるようになる。つまり僕の場合はkuwamai.github.ioというリポジトリ名。
おしまい
紆余曲折あったけど、だいたい紹介した記事の情報でホームページを作ることができた。もともと阿部寛のホームページに憧れて作り始めたんだけど、あの簡素さは阿部寛だから面白いんだと悟ってやめた。
Jupyter notebookのテーマを変える
Pythonでコード書いて共有するのに便利なJupyter notebook。フォントとか背景の色とか細かくテーマが変えられるので、変え方と自分のカスタマイズをメモ。
使用した環境
- Jupyter notebook
- v4.4.0
- jupyter-themes
- v0.20.0
jupyter-themes
Jupyter notebookのテーマを変更するにはjupyter-themesを使う。
公式のREADMEが丁寧でわかりやすい。 使えるフォントやデフォルトのフォントサイズとか色々書いてある。
Install
以下のコマンドでインストールする。
$ pip install jupyterthemes
テーマを変更する
テーマ選びの際に参考になった記事を紹介。
こちらの記事が各テーマの見た目を画像付きで紹介されていて、大変参考になりました。
部分ごとにフォントサイズが変えられるのだけど、どれがどれなのかピンとこない。こちらの記事ではスクリーンショットを用いて、各部分の名称を解説されていて、とてもわかりやすかったです。
色々選んだ結果、こんな感じにしてみた。
$ jt -t chesterish -f firacode -fs 11 -ofs 11 -dfs 11 -nfs 12 -T -N
デフォルトの状態にリセットする際は下記コマンド。
$ jt -r
キーボードでロボット操作 - teleop_twist_keyboard
前回rostopicコマンドで速度指令値をPublishしてロボットを動かした。毎回コマンドを打つのは面倒なので、ゲームみたいにキーボードで動かせるteleop_twist_keyboardを使ってみる。
動作環境
- Ubuntu16.04
- ROS Kinetic Kame
- GAZEBO 7.0.0
今回動かすロボットは、GAZEBOシミュレータ上で動くもの。Twist
型のMessageを受け取って動くロボットならなんでも良い。
使用するPackage
今回使用するPackageはteleop_twist_keyboard。キーボードでロボットの移動方向を操作できる。この記事の内容はほぼ下記Wikiの日本語訳みたいなもの。
Packageのインストール
下記コマンドでインストールする。
$ sudo apt-get install ros-kinetic-teleop-twist-keyboard
使い方
起動
下記コマンドでteleop_twist_keyboardを起動する。cmd_vel:=/
以下は適宜操作するロボットに合わせて変更すること。
$ rosrun teleop_twist_keyboard teleop_twist_keyboard.py cmd_vel:=/mabot/diff_drive_controller/cmd_vel
操作方法
親切なことに操作方法は起動時に出てくる。
Reading from the keyboard and Publishing to Twist! --------------------------- Moving around: u i o j k l m , . For Holonomic mode (strafing), hold down the shift key: --------------------------- U I O J K L M < > t : up (+z) b : down (-z) anything else : stop q/z : increase/decrease max speeds by 10% w/x : increase/decrease only linear speed by 10% e/c : increase/decrease only angular speed by 10% CTRL-C to quit currently: speed 0.5 turn 1.0
いくつかピックアップするとこんな感じ。
i
: 前進,
: 後進j
: 左旋回l
: 右旋回q
: スピードアップz
: スピードダウンcurrently
: 現在のスピード
これでTwistを直に書くよりも楽に操作することができた。
xacroでロボットを書く[3] - ロボットをGAZEBOに置く
前回は動力と摩擦係数の設定をして、走らせる準備をした。
今回は動力へ速度指令を送るControl packageと、GAZEBOシミュレータを起動するGazebo packageを作成する。
動作環境
- Ubuntu16.04
- ROS Kinetic Kame
- GAZEBO 7.0.0
練習の記録
今回やってることはこちらのリポジトリに公開してます。
下記手順はnavigation_practice
ディレクトリで行う前提で話を進める。
Control packageの作成
速度指令値を受け取り、ロボットの車輪を制御するPackageを作成する。
$ catkin_create_pkg mabot_control controller_manager actionlib actionlib_msgs control_msgs sensor_msgs robot_state_publisher
今回作成する対向二輪型ロボットは、受け取った速度指令値を左右のタイヤの角速度に変換する必要がある。幸いその計算を勝手にしてくれるControllerがあるのでありがたく使わせていただく。
$ mkdir mabot_control/config $ vim mabot_control/config/controller.yaml
mabot: joint_state_controller: type: joint_state_controller/JointStateController publish_rate: 50 diff_drive_controller: type : "diff_drive_controller/DiffDriveController" left_wheel : 'left_wheel_joint' right_wheel : 'right_wheel_joint' publish_rate: 50 # default: 50 pose_covariance_diagonal : [0.001, 0.001, 1000000.0, 1000000.0, 1000000.0, 1000.0] twist_covariance_diagonal: [0.001, 0.001, 1000000.0, 1000000.0, 1000000.0, 1000.0] # Wheel separation and diameter. These are both optional. # diff_drive_controller will attempt to read either one or both from the # URDF if not specified as a parameter wheel_separation : 0.34 wheel_radius : 0.1 # Wheel separation and radius multipliers wheel_separation_multiplier: 1.0 # default: 1.0 wheel_radius_multiplier: 1.0 #default: 1.0
Controllerを起動するlaunchファイルを作成する。
$ mkdir mabot_control/launch $ vim mabot_control/launch/mabot_control.launch
<?xml version="1.0"?> <launch> <!-- Load joint controller configurations from YAML file to parameter server --> <rosparam file="$(find mabot_control)/config/controller.yaml" command="load"/> <!-- load the controllers --> <node name="controller_spawner" pkg="controller_manager" type="spawner" ns="mabot" output="screen" args="joint_state_controller diff_drive_controller" /> <!-- convert joint states to TF transforms for rviz, etc --> <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" respawn="false" output="screen" ns="/mabot"/> </launch>
Gazebo packageの作成
GAZEBO上にWorldを作成し、ロボットを置くPackageを作成する。
$ catkin_create_pkg mabot_gazebo
Worldは様々な種類があるし自分でも作れるが、とりあえず何もないemptyworld
を生成してロボットを置くlaunchファイルを作成する。
$ mkdir mabot_gazebo/launch $ vim mabot_gazebo/launch/mabot_with_emptyworld.launch
<?xml version="1.0"?> <launch> <!-- these are the arguments you can pass this launch file, for example paused:=true --> <arg name="model" default="$(find mabot_description)/robots/mabot.urdf.xacro" /> <arg name="paused" default="false" /> <arg name="use_sim_time" default="true" /> <arg name="gui" default="true" /> <arg name="headless" default="false" /> <arg name="debug" default="false" /> <!-- We resume the logic in empty_world.launch, changing only the name of the world to be launched --> <include file="$(find gazebo_ros)/launch/empty_world.launch"> <arg name="debug" value="$(arg debug)" /> <arg name="gui" value="$(arg gui)" /> <arg name="paused" value="$(arg paused)" /> <arg name="use_sim_time" value="$(arg use_sim_time)" /> <arg name="headless" value="$(arg headless)" /> </include> <!-- Load the URDF into the ROS Parameter Server --> <param name="mabot/robot_description" command="$(find xacro)/xacro --inorder '$(arg model)'" /> <!-- Run a python script to the send a service call to gazebo_ros to spawn a URDF robot --> <node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen" args="-urdf -model mabot -param mabot/robot_description" /> <!-- ros_control motoman launch file --> <include file="$(find mabot_control)/launch/mabot_control.launch" /> </launch>
GAZEBOの起動
作成したlaunchファイルを実行するとGAZEBOが起動する。
$ roslaunch mabot_gazebo mabot_with_emptyworld.launch
動作確認
実際に速度指令値を送ってロボットが動作するか確認する。速度指令値は/mabot/diff_drive_controller/cmd_vel
topicにgeometry_msgs/Twist
形式でmessageを送る。
下記コマンドを実行するとロボットが前進する。x軸がロボットにとって前後方向になる。ちなみに対向二輪型なので左右方向(y軸)や上下方向(z軸)には進まない。
$ rostopic pub -1 /mabot/diff_drive_controller/cmd_vel geometry_msgs/Twist '{linear: {x: 1.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}'
また、このように入力すると旋回する。z軸が左右旋回方向になる。
$ rostopic pub -1 /mabot/diff_drive_controller/cmd_vel geometry_msgs/Twist '{linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 1.0}}'
こんな感じで速度指令値をdiff_drive_controllerに送るだけで勝手に左右の車輪をいい感じに動かしてくれる。台車が無事にできたので、センサーを載せたり制御したり色々できるようになった。
はてなブログのコードブロックが改行されるときの設定
今使ってるはてなブログのテーマはコードブロックが改行されるのでインデントとかわかりにくい。改行されずにスクロールバーで横スクロールしたい。ちなみに解決前までこんな感じだった↑
対処方法
調べたところこちらの記事が見つかりました。CSSを1行ずつ解説されていて大変わかりやすかったです。
けど、僕のブログだと変わらず改行されてしまった。もう少し頑張って調べたらこちらの記事が見つかりました。デザインCSSの設定で変わらない場合は詳細設定で変えられるらしい。
設定を開いて
詳細設定タブ開いて
検索エンジン最適化/headに要素を追加
の欄に下記CSSを追加。
<style> pre{ white-space: pre; } .entry-content pre{ word-wrap: normal; } </style>
するとこんな感じでめでたくスクロールできるようになった。
ついでにデザインCSSで黒い背景に設定した。色付きの文字は黒い背景の方が見やすい気がする。
.entry-content pre.code { background-color: #3F3F3F; color: #DCDCDC; }
ということでこんな感じになった。
<!--省略--> <!-- =========== Transmission ============ --> <xacro:wheel_trans prefix="right" interface="hardware_interface/VelocityJointInterface" /> <xacro:wheel_trans prefix="left" interface="hardware_interface/VelocityJointInterface" /> </robot>
xacroでロボットを書く[2] - transmissionとgazebo
前回は対向二輪型ロボットのモデルをxacroで書いた。
今回はGAZEBOで走らせるために動力と摩擦係数の設定をする。具体的にはTransmission elementでホイールを速度制御できるように設定し、Gazebo elementでロボットの摩擦係数を設定する。
動作環境
- Ubuntu16.04
- ROS Kinetic Kame
- GAZEBO 7.0.0
練習の記録
今回やってることはこちらのリポジトリに公開してます。
下記手順はnavigation_practice
ディレクトリで行う前提で話を進める。
Transmission element
ホイールが回転するように動力の設定をwheel.transmission.xacro
に記述する。
Transmission elementの記述方法について詳しくはこちら。
$ vim mabot_description/urdf/wheel/wheel.transmission.xacro
<?xml version="1.0"?> <robot xmlns:xacro="http://ros.org/wiki/xacro"> <xacro:macro name="wheel_trans" params="prefix interface"> <transmission name="${prefix}_wheel_trans"> <type>transmission_interface/SimpleTransmission</type> <joint name="${prefix}_wheel_joint"> <hardwareInterface>${interface}</hardwareInterface> </joint> <actuator name="${prefix}_wheel_motor"> <hardwareInterface>${interface}</hardwareInterface> </actuator> </transmission> </xacro:macro> </robot>
wheel.urdf.xacro
にwheel.transmission.xacro
を読み込ませるよう書き加える。
$ vim mabot_description/urdf/wheel/wheel.urdf.xacro
<?xml version="1.0"?> <robot xmlns:xacro="http://ros.org/wiki/xacro"> <xacro:include filename="$(find mabot_description)/urdf/wheel/wheel.transmission.xacro" /> <!--省略-->
書いたTransmissionをmabot.urdf.xacro
の最後の方に書き加える。
今回はホイールの速度を制御したいのでVelocityJointInterfaceを使った。
他には力制御をするEffortJointInterface、位置制御をするPositionJointInterfaceがある。
$ vim mabot_description/robots/mabot.urdf.xacro
<!--省略--> <!-- =========== Transmission ============ --> <xacro:wheel_trans prefix="right" interface="hardware_interface/VelocityJointInterface" /> <xacro:wheel_trans prefix="left" interface="hardware_interface/VelocityJointInterface" /> </robot>
Gazebo element
Pluginのインストール
下記のコマンドで必要なPluginをインストールする。
$ sudo apt-get install ros-kinetic-gazebo-ros-control $ sudo apt-get install ros-kinetic-ros-control ros-kinetic-ros-controllers
Gazebo elementの記述
さっきインストールしたPluginをmabot.urdf.xacro
の最後の方に書き加える。
$ vim mabot_description/robots/mabot.urdf.xacro
<!--省略--> <!-- =============== Gazebo =============== --> <gazebo> <plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so"> <robotNamespace>mabot</robotNamespace> </plugin> </gazebo> </robot>
物体の性質を記述
Gazebo elementでは物体の摩擦係数、硬さ、色とか設定できる。今回はwheelが滑らないように摩擦係数を大きめに、casterはよく滑るように摩擦係数を0にした。摩擦係数はmu1
、mu2
で設定する。
その他の要素は下記リンクに詳しく書いてある。
$ vim mabot_description/urdf/body/body.gazebo.xacro
<?xml version="1.0"?> <robot xmlns:xacro="http://ros.org/wiki/xacro"> <xacro:macro name="base_gazebo"> <gazebo reference="base_link"> <mu1>0.05</mu1> <mu2>0.05</mu2> </gazebo> </xacro:macro> </robot>
$ vim mabot_description/urdf/caster/caster.gazebo.xacro
<?xml version="1.0"?> <robot xmlns:xacro="http://ros.org/wiki/xacro"> <xacro:macro name="caster_gazebo"> <gazebo reference="caster_link"> <mu1>0.0</mu1> <mu2>0.0</mu2> </gazebo> </xacro:macro> </robot>
$ vim mabot_description/urdf/wheel/wheel.gazebo.xacro
<?xml version="1.0"?> <robot xmlns:xacro="http://ros.org/wiki/xacro"> <xacro:macro name="wheel_gazebo" params="prefix"> <gazebo reference="${prefix}_wheel"> <mu1>1.0</mu1> <mu2>1.0</mu2> </gazebo> </xacro:macro> </robot>
各部品にGazebo elementの設定を読み込ませるように書き加える。
$ vim mabot_description/urdf/body/body.urdf.xacro
<?xml version="1.0"?> <robot xmlns:xacro="http://ros.org/wiki/xacro"> <xacro:include filename="$(find mabot_description)/urdf/body/body.gazebo.xacro" /> <!--省略-->
$ vim mabot_description/urdf/caster/caster.urdf.xacro
<?xml version="1.0"?> <robot xmlns:xacro="http://ros.org/wiki/xacro"> <xacro:include filename="$(find mabot_description)/urdf/caster/caster.gazebo.xacro" /> <!--省略-->
$ vim mabot_description/urdf/wheel/wheel.urdf.xacro
<?xml version="1.0"?> <robot xmlns:xacro="http://ros.org/wiki/xacro"> <xacro:include filename="$(find mabot_description)/urdf/wheel/wheel.gazebo.xacro" /> <!--省略-->
mabot.urdf.xacro
の最後の方に書き加えることでロボットにGazebo要素が追加される。
$ vim mabot_description/robots/mabot.urdf.xacro
<!--省略--> <xacro:base_gazebo/> <xacro:wheel_gazebo prefix="right" /> <xacro:wheel_gazebo prefix="left" /> <xacro:caster_gazebo/> </robot>
これでロボットがシミュレータ上で走るために必要な設定が終わった。今度はシミュレータ上で走らせる。
xacroでロボットを書く[1] - jointとlink
GAZEBOでロボットをシミュレーションさせるには、ロボットの形とか質量とか色々定義する必要がある。 以前URDF(Unified Robot Description Format)で三輪車みたいな対向二輪型ロボットを書いたけど、めちゃくちゃ長くて人間が書くものじゃない。 今回マクロを使ってURDFが書けるxacro(XML macro)を使ってみたのでメモ。最後に参考にしたサイトをペタペタ貼ってるので、そっちを見たほうが理解が深まるはず。
動作環境
- Ubuntu16.04
- ROS Kinetic Kame
- GAZEBO 7.0.0
練習の記録
今回やってることはこちらのリポジトリに公開してます。
作業用ディレクトリの作成
役割ごとに複数のパッケージに分けるのが主流らしい。
workspaceにそれらをまとめるディレクトリを作成する。
僕は最終的にナビゲーションをしてみたいので、今回はnavigation_practice
という名前にした。
$ cd ~/catkin_ws/src $ mkdir navigation_practice $ cd navigation_practice
Description packageの作成
xacroでロボットを定義するパッケージを作る。
大抵*_description
という名前が使われるらしい。
ロボットの名前が全然思いつかないので適当にmabot
と命名した。
これ見て作業をするなら適宜自分のロボットの名前に読み替えてください。
$ catkin_create_pkg mabot_description
部品を作る
今回作る対向二輪型ロボットは、body、wheel、casterで構成される。xacroは複数に分割して記述できるので、ロボットの部品ごとにファイルを分けて書くことにする。
まずは部品を入れておくディレクトリを作成。
$ mkdir mabot_description/urdf
追記: これからxacroやURDFを書いてはモデルが思ったとおりにできてるか確認することを繰り返すのだけど、VSCodeのプラグインを使うと書きながら常に確認しながら書けるのでおすすめ。使い方は下記記事に書いた。
部品の構成
部品はjoint
とlink
によって構成される。
- joint
joint
はlink
同士を結合させる要素。いくつか種類があって、単にlink
同士を固定するものや回転、スライドさせるものもある。
詳しくはこちら。 - link
部品の見た目や形、質量や慣性モーメントなどを設定する要素。
詳しくはこちら。
bodyの作成
まずはbodyを作る。 これにタイヤとかセンサーとかくっつける予定。 今回は単純に四角いモデルにしてみた。
$ mkdir mabot_description/urdf/body $ vim mabot_description/urdf/body/body.urdf.xacro
<?xml version="1.0"?> <robot xmlns:xacro="http://ros.org/wiki/xacro"> <xacro:macro name="base" params="parent *joint_origin"> <joint name="base_joint" type="fixed"> <xacro:insert_block name="joint_origin"/> <parent link="${parent}"/> <child link="base_link"/> </joint> <link name="base_link"> <visual> <geometry> <box size="0.400 0.200 0.100"/> </geometry> </visual> <collision> <geometry> <box size="0.400 0.200 0.100"/> </geometry> </collision> <inertial> <origin xyz="0 0 0"/> <mass value="0.6"/> <inertia ixx="1e-3" ixy="0" ixz="0" iyy="1e-3" iyz="0" izz="1e-3"/> </inertial> </link> </xacro:macro> </robot>
wheel作成
次にwheelを作成する。今回は円柱で作成した。
$ mkdir mabot_description/urdf/wheel $ vim mabot_description/urdf/body/wheel.urdf.xacro
<?xml version="1.0"?> <robot xmlns:xacro="http://ros.org/wiki/xacro"> <xacro:macro name="wheel" params="prefix parent *joint_origin *joint_axis"> <joint name="${prefix}_wheel_joint" type="continuous"> <xacro:insert_block name="joint_origin" /> <xacro:insert_block name="joint_axis" /> <parent link="${parent}" /> <child link="${prefix}_wheel" /> </joint> <link name="${prefix}_wheel"> <visual> <geometry> <cylinder radius="0.1" length="0.05"/> </geometry> </visual> <collision> <geometry> <cylinder radius="0.1" length="0.05"/> </geometry> </collision> <inertial> <origin xyz="0.0 0.0 0.0" /> <mass value="0.500"/> <inertia ixx="0.0013541667" ixy="0" ixz="0" iyy="0.0013541667" iyz="0" izz="0.0025"/> </inertial> </link> </xacro:macro> </robot>
caster作成
次にcasterを作成する。今回は球で作成した。
$ mkdir mabot_description/urdf/caster $ vim mabot_description/urdf/body/caster.urdf.xacro
<?xml version="1.0"?> <robot xmlns:xacro="http://ros.org/wiki/xacro"> <xacro:macro name="caster" params="parent *joint_origin"> <joint name="$caster_joint" type="fixed"> <xacro:insert_block name="joint_origin" /> <parent link="${parent}" /> <child link="caster_link" /> </joint> <link name="caster_link"> <visual> <geometry> <sphere radius="0.05"/> </geometry> </visual> <collision> <geometry> <sphere radius="0.05"/> </geometry> </collision> <inertial> <origin xyz="0.0 0 0.0" /> <mass value="0.50" /> <inertia ixx="0.0025" ixy="0.0" iyy="0.0025" ixz="0.0" iyz="0.0" izz="0.0025" /> </inertial> </link> </xacro:macro> </robot>
部品を組み立てる
それぞれ別のxacroファイルに書いた部品を読み込み、配置を決めるxacroファイルを書く。
$ mkdir mabot_description/robots $ vim mabot_description/robots/mabot.urdf.xacro
<?xml version="1.0"?> <robot name="mabot" xmlns:xacro="http://ros.org/wiki/xacro"> <xacro:include filename="$(find mabot_description)/urdf/body/body.urdf.xacro"/> <xacro:include filename="$(find mabot_description)/urdf/wheel/wheel.urdf.xacro"/> <xacro:include filename="$(find mabot_description)/urdf/caster/caster.urdf.xacro"/> <link name="base_footprint"/> <xacro:base parent="base_footprint"> <origin xyz="0 0 0"/> </xacro:base> <xacro:wheel prefix="right" parent="base_link"> <origin xyz="0.1 -0.17 0.0" rpy="1.57 0 0" /> <axis xyz="0 0 -1" /> </xacro:wheel> <xacro:wheel prefix="left" parent="base_link"> <origin xyz="0.1 0.17 0.0" rpy="-1.57 0 0" /> <axis xyz="0 0 1" /> </xacro:wheel> <xacro:caster parent="base_link"> <origin xyz="-0.15 0 -0.05"/> </xacro:caster> </robot>
rvizでモデルを確認する
2019/10/06 追記
VSCodeのExtensionsでURDFをプレビューできるものがあったので、あれこれ試すならこれが楽かも。
無事にxacroファイルを作ることができたか確認してみる。 作ったモデルの外観をrvizで表示するlaunchファイルを書く。 ついでにrvizの表示設定を保存するために、configディレクトリも作成しておく。
$ mkdir -p mabot_description/launch/config $ vim mabot_description/launch/display.launch
<launch> <!-- arguments --> <arg name="model" default="$(find mabot_description)/robots/mabot.urdf.xacro"/> <arg name="gui" default="True" /> <!-- prameters --> <param name="robot_description" command="$(find xacro)/xacro --inorder $(arg model)"/> <param name="use_gui" value="$(arg gui)"/> <!-- nodes --> <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" /> <!-- rviz --> <node name="rviz" pkg="rviz" type="rviz" args="-d $(find mabot_description)/launch/config/urdf.rviz" required="true" /> </launch>
作成したlaunchファイルを実行する。
$ roslaunch mabot_description display.launch
するとrvizが起動する。作成したロボットのモデルを表示するために、左下のAddボタンを押す。
表示する要素を選ぶ。今回はRobotModelを選択する。
FixedFrameをbese_footprintにする。
無事にロボットが表示されていることを確認する。
これをGAZEBO上で走らせるのはまた今度。
続き
動力と摩擦係数を設定して走らせる準備をした。
参考
- ロボット記述言語
- URDFの各要素について、図を用いて大変わかりやすく紹介されています
- xacro - ROS wiki
- xacroの各機能はこちらがわかりやすいです
- ROS講座68 xacroを使う1
- ROS講座73 xacroを使う2
- xacroの機能に関してサンプルコードを交えて解説されています
- 移動型ロボットのシミュレーション
- inertiaについて大変参考になりました
- ロボットモデリング講習会:URDFの作成方法 by gbiggs
- マニピュレータのモデリングに関して解説されています