Gazeboでkobukiを二台出す
Xubuntu12.04上のHydro上でkobukiを二台だす.
前提として
http://wiki.ros.org/kobuki_gazebo
でkobukiが一台出せているとします.
同じ感じでlaunchファイルを作ります.
ワークスペースで
catkin_create_pkg hoge
roscd kobuki_gazebo
してkobuki_gazeboに移動,以下をhogeへコピーします
/launch/includes/*.xml
/launch/turtlebot_empty_world.launch
/worlds/empty.world
package.xmlのrun_dependをコピーします.
これで
roslaunch hoge turtlebot_empty_world.launch
すると一台のkobukiが出るはず.
まぁ,この時点ではincludes以下のxmlは参照してないのですが.
/launch/turtlebot_empty_world.launch
を以下のように編集します.
findの参照先に注意してください.
<launch> <include file="$(find gazebo_ros)/launch/empty_world.launch"> <arg name="use_sim_time" value="true"/> <arg name="debug" value="false"/> <arg name="world_name" value="$(find hoge)/worlds/empty.world"/> </include> <arg name="base" value="$(optenv TURTLEBOT_BASE kobuki)"/> <!-- create, roomba --> <arg name="battery" value="$(optenv TURTLEBOT_BATTERY /proc/acpi/battery/BAT0)"/> <!-- /proc/acpi/battery/BAT0 --> <arg name="stacks" value="$(optenv TURTLEBOT_STACKS hexagons)"/> <!-- circles, hexagons --> <arg name="3d_sensor" value="$(optenv TURTLEBOT_3D_SENSOR kinect)"/> <!-- kinect, asus_xtion_pro --> <group ns="r1"> <include file="$(find hoge)/launch/includes/$(arg base).launch.xml"> <arg name="base" value="$(arg base)"/> <arg name="stacks" value="$(arg stacks)"/> <arg name="3d_sensor" value="$(arg 3d_sensor)"/> <arg name="robot_name" value="r1"/> <arg name="init_pose" value="-x 1 -y 1 -z 0"/> </include> <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher"> <param name="publish_frequency" type="double" value="30.0" /> </node> </group> <group ns="r2"> <include file="$(find hoge)/launch/includes/$(arg base).launch.xml"> <arg name="base" value="$(arg base)"/> <arg name="stacks" value="$(arg stacks)"/> <arg name="3d_sensor" value="$(arg 3d_sensor)"/> <arg name="robot_name" value="r2"/> <arg name="init_pose" value="-x 1 -y 4 -z 0"/> </include> <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher"> <param name="publish_frequency" type="double" value="30.0" /> </node> </group> </launch>
/launch/includes/kobuki.launch.xml
を以下のように編集します
<launch> <arg name="base"/> <arg name="stacks"/> <arg name="3d_sensor"/> <arg name="robot_name"/> <arg name="init_pose"/> <arg name="urdf_file" default="$(find xacro)/xacro.py '$(find turtlebot_description)/robots/$(arg base)_$(arg stacks)_$(arg 3d_sensor).urdf.xacro'" /> <param name="robot_description" command="$(arg urdf_file)" /> <!-- Gazebo model spawner --> <node name="spawn_turtlebot_model" pkg="gazebo_ros" type="spawn_model" args="$(arg init_pose) -unpause -urdf -param robot_description -model $(arg robot_name)"/> <!-- Velocity muxer --> <node pkg="nodelet" type="nodelet" name="mobile_base_nodelet_manager" args="manager"/> <node pkg="nodelet" type="nodelet" name="cmd_vel_mux" args="load yocs_cmd_vel_mux/CmdVelMuxNodelet mobile_base_nodelet_manager"> <param name="yaml_cfg_file" value="$(find turtlebot_bringup)/param/mux.yaml" /> <remap from="cmd_vel_mux/output" to="mobile_base/commands/velocity"/> </node> <!-- Bumper/cliff to pointcloud (not working, as it needs sensors/core messages) --> <include file="$(find turtlebot_bringup)/launch/includes/kobuki/bumper2pc.launch.xml"/> </launch>
これで
roslaunch hoge turtlebot_empty_world.launch
すると二台のkobukiが出るはず.
要はそれぞれのモデルに名前をつけてくださいという,チュートリアルにもあったことです.
動かすには以下の様な感じでscriptsを作ってrosrunすればいいです.
dependencyにrospyとgeometry_msgs追加してください.
import rospy from geometry_msgs.msg import Twist if __name__=="__main__": rospy.init_node('it') p=rospy.Publisher('r1/commands/velocity',Twist) twist = Twist() twist.linear.x = -0.5; twist.linear.y = 0.0; twist.linear.z = 0.0; twist.angular.x = 0.0; twist.angular.y = 0.0; twist.angular.z = 0.0; for i in range(10): p.publish(twist); rospy.sleep(0.5)
フォーマッタとか色々設定してないので汚いのは容赦してほしい.
仮想マシン上のそういう設定全くやる気が起きないんだよなぁ….
Install ROS on MacOS X Mavericks
ROS hydroをMacOS X Mavericks上にインストールする.
諦めました.
これがなんとかならんと無理です.
Mavericks周りは今色々直してくれてる最中らしいのでもう少し待ちましょう!
https://github.com/orocos/orocos_kinematics_dynamics/pull/4
以下諦めたログ
homebrewを使用したインストールが選択できるのでhomebrewを使用する.
大まかな流れはインストレーションマニュアルに従う.
http://wiki.ros.org/hydro/Installation/OSX/Homebrew/Source
コケた時の対処法
Resolving Dependenciesの前に
Resolving Dependenciesで
rosdep install --from-paths src --ignore-src --rosdistro hydro -y
するが,これで色々pip installされる.ここでコケる.
こけたらbrew install -v hogeする.
pip install -U PIL
PILのコンパイル時にfreetypeが無いと言われる.brewでfreetype入れるとfreetype2になるせい.
http://stackoverflow.com/questions/20325473/error-installing-python-image-library-using-pip-on-mac-os-x-10-9
ln -s /usr/local/include/freetype2 /usr/local/include/freetype
をすると通る.
pip install -U pcl
pclなんてFormulaは無いと言われる.
brew tap ros/hydro
をしていないため.手順書ちゃんと読みましょう.
brew install ogre
brew install -v ogreするとfreetypeでコケている.
freetypeのリンクにコケる.uninstall & installしたら通った.
よくわからん.
https://github.com/osrf/homebrew-simulation/issues/4
brew install PyQwt
PyQwtがpyqtの新しい設定フォーマットに追従していないのが原因.
pyqtをダウングレードしてPyQwtを入れる.
https://github.com/Homebrew/homebrew/issues/25224
http://sourceforge.net/p/pyqwt/bugs/12/
rcssserver3d on MacOSX MountainLion
rcssserver3dのmake
http://sourceforge.net/projects/simspark/
現在の最新は0.6.7だがこれだと以下のエラーがでる
Linking CXX shared module soccer.so Undefined symbols for architecture x86_64: "boost::system::system_category()", referenced from: __GLOBAL__I_a in export.cpp.o __GLOBAL__I_a in agentstateperceptor.cpp.o __GLOBAL__I_a in ballstateaspect.cpp.o __GLOBAL__I_a in singlematiniteffector.cpp.o __GLOBAL__I_a in staticmeshiniteffector.cpp.o __GLOBAL__I_a in pantilteffector.cpp.o __GLOBAL__I_a in restrictedvisionperceptor.cpp.o ... "boost::system::generic_category()", referenced from: __GLOBAL__I_a in export.cpp.o __GLOBAL__I_a in agentstateperceptor.cpp.o __GLOBAL__I_a in ballstateaspect.cpp.o __GLOBAL__I_a in singlematiniteffector.cpp.o __GLOBAL__I_a in staticmeshiniteffector.cpp.o __GLOBAL__I_a in pantilteffector.cpp.o __GLOBAL__I_a in restrictedvisionperceptor.cpp.o ... ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make[2]: *** [plugin/soccer/soccer.so] Error 1 make[1]: *** [plugin/soccer/CMakeFiles/soccer.dir/all] Error 2 make: *** [all] Error 2
svnのr370だとmakeできました.
http://sourceforge.net/p/simspark/svn/370/tree/trunk/
make rcssserver on MacOS X MountainLion
rcsserverをMacOSXでmakeする
http://sourceforge.net/projects/sserver/
boostのインストール
brew install boost
gccのインストール
brew tap homebrew/versions brew install gcc49
configure
./configure CC=/usr/local/bin/gcc-4.9
make
make
install
make install
素数のリスト
[x|x<-[2..], all(\y-> x `mod` y /= 0) [2..x`div`2]]
すごいHASKELLたのしく学ぼう!とLearn You a Haskell for Great Good!
KindleですごいHASKELLたのしく学ぼう!が売っていたので買った.
日本語訳である.
私が持っているAndroid tabletはioPad6Lといういわゆる中華パッドで,そのせいか乗数やその他の数学記号がうまく処理できず文字化けの豆腐が表示されている.
iPhone版のKindleアプリではちゃんと表示されているし,まぁフォントとかそのへんだと思う.
そんなこともあり英語版のLearn You a Haskell for Great Good!を読むこととなった.
実は英語版は公開されている.
http://learnyouahaskell.com/
英語版と日本語訳を読むと日本語訳は訳注が追加されていることに気づく.
例えば以下のページの末尾,直角三角形の三辺の長さを求める問題.
http://learnyouahaskell.com/starting-out
We'll also modify this function by taking into consideration that side b isn't larger than the hypothenuse and that side a isn't larger than side b.
と正しい直角三角形の性質について説明されている.
ここが日本語訳では
次に,ピタゴラスの定理(a^2+b^2==c^2)が成り立つかを調べる叙述を追加して,直角三角形でないものをフィルタしましょう.また,aが斜辺cを超えないように,bがaを超えないように,それぞれ変更を加えます.
ここでコードを挟み以下に続く.以下は英語版では無い.
リストのレンジをどんなふうに変更したかに注目してください.bが斜辺より長いような不要なトリプルを調べないような変更をしています(正しい直角三角形は必ず斜辺が一番長いのです).
また,辺bが辺aを超えないようにしています.このように変更しても問題ありません.なぜならば,
以下2ページ位続く.
こんなかんじで日本語訳のほうが比較的親切である.
無料で公開してるのが2800円するの…と思ったが日本語訳買って損はしないんじゃないかなぁと思う.
#豆腐で表示されるしiPad買うか〜