Type of Messages

Hi,
I want to send a service message with a dict type. I check in the document and I do not see it
Could I send a message by a dict type? Anh how to do it?
Thanks

Hi Nguyen,

i don’t think i fully understand your question, but i try to interprete. If i did not answer the question you asked, please try to reformulate.

I understand you try to send a service message, in which a dict type (assumingly python) is carried.
If the size is fixed of your dict - i would suggest to create your own custom service.

If you go in a package, from your workspace you can create a folder for the new service with:
mkdir srv
See for reference
CreatingMsgAndSrv

In this directory, you can create your service file.
For example
my_dict_message.srv

If you want to create a dict in there, you have to options:

  1. you can define the dict values one by one, for example:
string dictkey_one
string dictkey_two
---
# the answer
string response

SRV - ROS Wiki

  1. If you are dealing with flexible type, it is more complicated. As far as i am concerned, the default Python-Dict cannot be send, so for flexible schema
    a potential solution could be dealing with one array for the keys and one for the data.
    This could help, but i would not recommend this, since i think it is not good engineering practice.
string[] first_array
string[] second_array
---
bool success

If you create your service, you have to make sure, to include in your package.xml

 <build_depend>message_generation</build_depend>
  <exec_depend>message_runtime</exec_depend>

Add in your CMakeslist.txt

# Do not just add this line to your CMakeLists.txt, modify the existing line
find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  message_generation
)

Further you have to add in your CMakeLists.txt the command to build the service.

add_service_files(
  FILES
  my_dict_message.srv
)

Now you should be able, to use the service.

I hope i understood your question correct and i could help.
Best regards,
Freddy

1 Like

I understood my case totally

I will choose option number 1 because it is easier
Thanks for your help.

Glad i could help.

Feel free to ask, if theres another issue :wink:

This topic was automatically closed 5 days after the last reply. New replies are no longer allowed.