LoginSignup
2
2

More than 3 years have passed since last update.

RaspberryPi ZeroWでROSのパッケージを作る

Posted at

ROSのパッケージを作成する

先日RaspberryPi Zero WのRaspbianにインストールしたROSだが、この環境で自前のパッケージを作成してPublisherのサンプルプログラムを動かしてみる。
参考書籍は、ROSロボットプログラミングバイブル
何分にも、自前でビルドした環境のため、いろいろ引っかかってしまったので、そのあたりを中心にメモ。

環境設定

※超重要
最初これをしていなかったせいで、せっかく作ったパッケージが見つからないというエラーで悩んだ。
Bash起動時に、環境設定のスクリプトを実行するように設定する。

$ echo "source ~/ros_catkin_ws/devel_isolated/setup.bash" >> ~/.bashrc
$ echo "source ~/ros_catkin_ws/devel/setup.bash" >> ~/.bashrc
$ echo "source ~/ros_catkin_ws/devel/local_setup.bash" >> ~/.bashrc

パッケージのスキャフォルド

パッケージのひな型をコマンドで作成する。

$ catkin_create_pkg ros_gnss_test message_generation std_msgs roscpp --rosdistro=melodic

パッケージ名をros_gnss_Testに変更。
また、本には記載されていなかった、--rosdistro=melodicオプションが必要だった。

パッケージファイルを書き換える

以下のようにpackage.xmlを書き換えた。コメントは削除してある。

<?xml version="1.0"?>
<package format="2">
  <name>ros_gnss_test</name>
  <version>0.0.0</version>
  <description>The ros_gnss_test package</description>

  <maintainer email="pi@todo.todo">pi</maintainer>

  <license>TODO</license>

  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>message_generation</build_depend>
  <build_depend>roscpp</build_depend>
  <build_depend>std_msgs</build_depend>
  <build_export_depend>roscpp</build_export_depend>
  <build_export_depend>std_msgs</build_export_depend>
  <exec_depend>roscpp</exec_depend>
  <exec_depend>std_msgs</exec_depend>
  <exec_depend>message_runtime</exec_depend>
  <exec_depend>message_generation</exec_depend>

  <export>
  </export>
</package>

CMakeファイルを書き換える

以下内容にCMakeLists.txtを書き換えた。これもコメント部分は省略。

cmake_minimum_required(VERSION 2.8.3)
project(ros_gnss_test)

find_package(catkin REQUIRED COMPONENTS
  message_generation
  roscpp
  std_msgs
)

add_message_files(
  FILES
  MsgGNSS.msg
)

generate_messages(
  DEPENDENCIES
  std_msgs
)

catkin_package(
  LIBRARIES ros_gnss_test
  CATKIN_DEPENDS message_generation roscpp std_msgs
)

include_directories(
  ${catkin_INCLUDE_DIRS}
)

add_executable(${PROJECT_NAME}_node src/ros_gnss_test_node.cpp)

add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

target_link_libraries(${PROJECT_NAME}_node
  ${catkin_LIBRARIES}
)

メッセージファイルを作成

msgディレクトリを作成して、MsgGNSS.msgを作成し、以下を記載

time stamp
string data

プログラムファイルを作成

src以下にros_gnss_test_node.cppとして、以下を作成。

#include "ros/ros.h"
#include "ros_gnss_test/MsgGNSS.h"

int main(int argc, char **argv)
{
  ros::init(argc, argv, "ros_gnss_test");
  ros::NodeHandle nh;

  ros::Publisher ros_gnss_test_pub = nh.advertise<ros_gnss_test::MsgGNSS>("ros_gnss_msg", 100);
  ros::Rate loop_rate(10);

  ros_gnss_test::MsgGNSS msg;

  while(ros::ok())
  {
    msg.stamp = ros::Time::now();
    msg.data = "test";

    ROS_INFO("send msg = %d", msg.stamp.sec);

    ros_gnss_test_pub.publish(msg);

    loop_rate.sleep();

  }

  return 0;
}

ビルド

ワークスペースのルートに移動して、ビルド。

$ catkin_make

これでエラーがなければビルドされているはず。

実行

roscoreが動いている状態で、以下を実行。

$ rosrun ros_gnss_test ros_gnss_test_node

コンソールにはログとして、以下のような内容が出力される。

[ INFO] [1576429180.394603124]: send msg = 1576429180
[ INFO] [1576429180.494594427]: send msg = 1576429180
[ INFO] [1576429180.594606730]: send msg = 1576429180
[ INFO] [1576429180.694604033]: send msg = 1576429180

無事、自分でPublisherが動いた。

2
2
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
2
2