Isabella Jemal's Notebook - cps-vip/cps-cosimulation-env GitHub Wiki
Researched utility power grids, HELICS/ROS, and the elements of a substation to brainstorm ideas for the semester project. Examined files in the git e.g. the gridlab-D example to familiarize myself with the structure of gridlab-D and the elements of a robot and substation components in the simulation environment.
Some Examples of Resources:
- https://www.cbsnews.com/news/physical-attacks-on-power-grid-rose-by-71-last-year-compared-to-2021/
- https://electrical-engineering-portal.com/download-center/books-and-guides/power-substations/ss-operation-maintenance

Worked on Kickoff Presentation leading to Thursday. Decided to present the idea of a brachiating robot that can perform inspection and maintenance tasks. Established timeline to finish the presentation:
Timeline
- Fri and Sat: Background research and idea formulation
- Sun: Finalize idea, create tasks and team assignments
- Mon: Research on tasks according to rubric
- Tuesday: rough draft for presentation content
- Wednesday: finalize presentation and rehearse
Link to Kickoff Presentation: https://docs.google.com/presentation/d/15490h0M_5-xv-1Q4tV9VQxXZRbNctMNfSbw7KUxmiaY/edit?usp=sharing
Researched more about brachiating robots and technical topics that we presented last week to obtain a clearer image on how to move forward with our big idea.
Research Topics For This Week:
- Communicating with the device team to understand which direction they are headed in. So that we know what hardware components, and electric grid equipment we can research on.
- Understanding turtlebot simulations to understand ROS, and look into researching about the integration of HELICS and ROS.
- Read through the GitHub. Try to get HELICS installed on your local desktop and get familiarized with the interface (Documentation available on GitHub)
- Read into C++ documentation and try to understand the language.
Was running into an issue setting up Helics on MAC and running GridLab-D example co-simulation from git. https://github.com/cps-vip/cps-cosimulation-env/tree/main/simple_gridlabd_example
Could not run nix-develop using the instructions from the ReadMe.

Went to office hours and edited the command I entered on my terminal to successfully run nix-develop and grid lab-D sim
Met with ROS subteam members on Friday to outline the plan for our IPR 1 presentation. Changed our focus from designing a brachiating robot to a line inspection robot. Researched the different components of the substation for the robot, and decided to further expand on the current transformers. Split our team into different subteams (Sensing and ROS/HELICS integration) and set research and goals that needed to be accomplished by each.
Link to research/notes doc: https://docs.google.com/document/d/1vUHT9XwADFZxCfK7lMaYlcHBuzMqFm49LTq8F0QHT9Q/edit?usp=sharing
To-do List: IPR Project Meeting (9/29)
- Substation Equipment, a specific device and interface (MPI)
- Rundown of GridLab-D
- Where is each component of each physical object?
- We will need to create a version of each object physically in robot sim.
- How do we send our changes to other sims (substations)?
- Positioning and dimensions of each object in the sim
- How to simulate damage
- We need to parallel the grid lab-d substation in our robot sim
- Roadmap: Focus on ONE piece of equipment

Narrowed down our timeline/roadmap for the presentation and successfully ran a TurtleBot simulation.
TurtleBot sim: https://drive.google.com/file/d/1Jw-3UQCub5xBX9W4nsl_s0jxCm7aVVn4/view?usp=sharing
Studied examples of gridLab-D simulations (environment and climates code files in git) to further understand the physical components of our robot's substation and their relations to each other in the simulation).
Mapped out a tentative timeline(project roadmap) for the rest of the semester with deliverables for each week to successfully run a simulation of a line inspection robot interacting with its physical environment by the end of the semester.
Presented IPR 1 for the ROS/HELICS Team to the class: https://docs.google.com/presentation/d/1RdfrMkKp7M0g7XYb9GShKNSdWlxCu090HM3dekeRYrk/edit?usp=sharing
Worked on compiling all the information needed for the paper due the following week. Established what research we already had and delegated specific subsections of the paper to different members of the team. It was my first time using Latex writing a paper in IEEE format so I learned how to use Latex code to format the bibliography.
Delegated subsections of the paper to different teams to efficiently complete the paper and streamline the information.
Tried to ssh key into the VnC Server for VM support for our sim. The ssh key was not working and discussed alternatives to try during next meeting such as sudo chmod into the server instead.
Tried to install VNC server on Google Cloud using credits. Also attempted to run a turtlebot 3 sum using ROS 2. Was running into issues using Google Cloud as we had a limited amount of credits, and there were too many people on the server at once, so it was very slow.
Researching how to run VNC on Google Cloud: https://stackoverflow.com/questions/31104226/installing-vncserver-on-google-cloud-computing-vm-ubuntu
Turtlebot3 sim: https://github.com/ROBOTIS-GIT/turtlebot3
We decided to reorganize our subteam into different research teams to be more effective in our research. Individual group members were assigned different topics to research information on and present to the other team memeber next group meeting.
ROS Research Notes: https://docs.google.com/document/d/106pOJ1IFnxWNJI_liCkaqqxCKaMXEOXBlofaf0nZfaA/edit
Researched ROS documentation and simple tutorials we could complete to gain some experience with ROS and running a turtlebot sim. Installed ROS and Humble on the server.
TurtleBot3 2.1.5 (for ROS2 Humble): https://github.com/ROBOTIS-GIT/turtlebot3/releases/tag/2.1.5
The ROS Development Studio by The Construct: https://www.theconstructsim.com/the-ros-development-studio-by-the-construct/
Met up to discuss the final presentation and decided on what topics to research more on during the break.
Worked on our team's final presentation, and looked at notes and the score from the last presentation (IPR 2) to see what improvements needed to be made for our final presentation. Delegated slides to different team members.
Final presentation: https://docs.google.com/presentation/d/1I_N87Nr7LH8UvbbR0zB2Erq3luHvZWur0h_-rJcflmg/edit?usp=sharing
I went to office hours to get the ROS2 Docker up and running using the steps provided on the GitHub page: https://github.com/Tiryoh/docker-ros2-desktop-vnc
Since I have an M2 chip on Mac and already had Docker installed, I enabled the Docker container from my Desktop to access Ubuntu Desktop + ROS2.
Met up with my ROS Subteam to discuss how we were going to compile and present our Kickoff Presentation later that week. We presented virtually from Discord and I introduced ROS and HElICS and their applications to utility grid systems. I also discussed our main goals for the semester and the steps we will take to achieve them.
Research: https://docs.google.com/document/d/1vUHT9XwADFZxCfK7lMaYlcHBuzMqFm49LTq8F0QHT9Q/edit KickOff Presentation: https://docs.google.com/presentation/d/1wfKMIMarJHZlLdrHP2mIvXGuAuns_ht-SCO553caG4s/edit?usp=sharing
The ROS Subteam met virtually to discuss how to ensure each member becomes trained in ROS2. Several tutorials and sites explaining ROS2 documentation were shared, and we established that each member should complete the Beginner: CLI tools part of the ROS2 tutorial before next week's meeting.
ROS2 Tutorial: https://docs.ros.org/en/humble/Tutorials.html
Other ROS2 tutorials/resources: https://foxglove.dev/tutorials https://youtu.be/Gg25GfA456o?si=o8kbAG6r1MAwmYbB https://www.youtube.com/playlist?list=PLK0b4e05LnzYNBzqXNm9vFD9YXWp6honJ
Began completing the ROS2 tutorial on my own and was able to work through understanding nodes, topics, and servers. The online VnC was working as expected but was running into issues using colcon to build packages that I didn't know how to solve. My terminal would stop running before all the packages had finished downloading.

Brought up this issue to Will in class Thursday and one of my other team members was having the same issue. We researched possible solutions to this and increased the amount of memory and swap Docker was taking up in the computer. I increased the memory from 6 to 6.5 GB on my computer and the swap from 2 to 4 GB.
This seemed to fix the previous issue, as I was able to download all the required packages now and the colcon test was able to run.
Deciding how to split into subteams. We designated one subteam for mission and trajectory planning. Certain milestones would be to see the real world and anticipate its obstacles, after finishing the ROS tutorials. We need to work on the turtle bot simulations first, before starting to implement examples of HELICS integrating with ROS.
Worked on deleting work and deciding what to add and revise for the Midterm Paper this semester. Wrote up ideas and discussed who was writing certain sections for the paper during our weekly subteam meeting on Tuesday.
Link to notes for the paper: https://docs.google.com/document/d/1cQEy5oKjeLAS_QxxomN7PL7i7qqpgHBGSyADpudrUpk/edit
Began working on our IPR1 presentation that was due Wednesday. Used our midterm paper as a reference to what new sections we're going to highlight in the presentation. During our subteam meeting, we delegated topics to team members and established a deadline to finish the slides by.
Link to IPR1 pres: https://docs.google.com/presentation/d/1DOxVHZrLHYOb6mse5kZj_tmNZMZiAGJa7emtyZ4sTcM/edit?usp=sharing
We discussed roadblocks to using the Helics C++98 API - need to link to a shared library, find a way to keep time in HELICS
Going through Helics documentation:
- https://docs.helics.org/en/latest/doxygen/namespacehelics.html
- https://docs.helics.org/en/latest/doxygen/dir_1c0454af7f4a9fcd3c5d1acfee8465af.html
In class on Thursday, we had an Embedded Systems workshop where we used WireShark to look at the different information that was being relayed from different IP addresses. It was super helpful and interesting to learn about networks and the signals that travel between them and how to decipher the information and what it means.
This week, I mainly worked on building HELICS on my Ubuntu and making sure the proper libraries were downloaded, so when our team eventually figures out how to integrate it with ROS2, I wouldn't run into any issues.
This week, I my time outside of class working on looking through the HELICS documentation and running the publisher-subscriber example to understand more about how it worked. I spent time looking at the different files in my directory in the Ubuntu server and trying to understand how my bash src file worked, because we were having issues trying to run HELICS because that script wasn't working after editing it.
One of our team members successfully integrated HELICS and ROS2 using the HELICS C++ 98 API and the files in our ROS2 directory from the humble tutorials we completed. I sent out a LettuceMeet so we could all do a hackathon outside of class so each member could run through the instructions on how to do it on their individual computers. We agreed to meet the following week on Monday from 4 - 6 pm. Going forward, we also identified the next biggest challenges we would have in our integration and we need to accomplish next:
- Troubleshooting issues with building gridlab-d in the container due to architecture mismatches
- Publish sensor data (temperature, magnetic field)
- Implementing helics python federates in ros2 cpp files
- How to parse helics publications into ros2 publications
Met up for our subteam's hackathon on Monday to implement the HELICS/ROS2 integration example that Sabina published on her Github. I was able to follow the steps and run the simulation successfully.
Steps to make sure ROS2 files (pusblisher and subsciber) are edited with the right information to relay to HELICS:
- colcon build --packages
- select examples_rclcpp_minimal_publisher
- source install/setup.bash
- Run them with ros2 run examples_rclcpp_minimal_subscriber subscriber_member_function and ros2 run examples_rclcpp_minimal_publisher publisher_member_function
Example output from my terminal:

We began working on our Final Presentation for the ROS/HELICS subteam this semester. We built off the information from our midterm presentation as well as the new findings we have and the progress we've made in Gazebo as well as HElICS and GridLab-d.
We presented our Final Presentation in class Thursday and identified the main goals that we want to work on going into the next semester. This semester, we have accomplished integration with HELICS, ROS2 and GridLab-d using shared libraries and are able to run the simple gridlab-d example in the CPS VIP's git with the Ubuntu VM. We have also created physical objects in the Gazebo environment and ran TurtleBot demos, although manipulating objects in Gazebo takes up too much CPU and is very laggy.
Some Goals For Next Semester:
- Write code to simulate a magnetic field in our physical environment
- Add infrared sensor to our Turtlebot
- Create a simple path algo to prevent the robot from getting stuck on the uneven terrain or falling over
Link to Final Presentation: https://docs.google.com/presentation/d/1aM4M4pZJlwo5GOHF-WE0dNjA1v5fH6Mi2wvGKIGDnaM/edit?usp=sharing
#Fall Semester
This was the first week of the semester, so we just went over introductory material and how to find relevant information and run examples in the VIP github.
Spoke with subteam members to agree on in-person/virtual meeting time for weekly subteam meetings to discuss subteam goals/progress for each individual subteam within the ROS/HELICS team. We also started planning for our KickOff Presentation which was due the following week. We shared the links to our final presentation from last spring sem, and our kickoff from last sem to educate new team members on past progress and research.
New topics to work on this semester:
- Different subteam topics and structure
- New roadmap for subteam goals
- Present individual research at weekly stand-up meetings
Presented our KickOff Presentation for this semester in class Thursday. We didn't have a weekly standup meeting, due to the Labor Day holiday but I completed some individual research for my Nodes and Sensors team. Me and my other teammate primarily researched what ROS libraries and packages that are available for public use: full_sensor_suite, gazebo_ros_pkgs
Some of the feedback from our presentation was to focus on NAV2 and Lidar sensors, as those are necessary for the robot to navigate its environment and multiple subteams can work on them simultaneously.
Had our first weekly standup meeting for our individual subteams during which I presented the Nodes and Sensor Data research. After further discussion with team members, we discovered we could not use the Arduino libraries as they were not compatible with Gazebo. Going forward, we are going to focus on developing the LIDAR and NAV2 sensors and work closely with the Gazebo team to ensure our sensors are helping the robot navigate the physical environment correctly.
ROS/HELICS Weekly Stand-up: https://docs.google.com/document/d/16z8E3lgY4y1_99YX9pLbLqHl7imkujwJSMb1hpl8GM8/edit#heading=h.8hdatv66ng3d
During this week, after discussing with the fellow teammate on my Nodes/Sensors team, we decided to research more on the different sensors on substations, specifically the ROS2 navigation stack and Lidar sensors. After research online, we presented some gazebo_ros_pkgs: (https://github.com/ros-simulation/gazebo_ros_pkgs) and [sensor_msgs, radar_msgs and vision_msgs packages] for NAV2 sensors that we could possible utilize to incorporate for our robot. We compiled this research into a doc to present to the rest of our members during the next standup.
Nodes and Sensor Data: https://docs.google.com/document/d/1qahLI94dMqfTStKbR0jQHLw6i1UoKdbhupvES3_hNEk/edit
Began discussing potential edits and improvements for our midterm paper. Worked with my subteam member for Nodes and Sensor data, Natalie, on what nodes and current research to include. Will shared resources on how to set up the ROS 2 Navigation stack, and how to implement it with ROS2. The substation modeling team could also work on making sure obstacles are not easily seen to provide some trajectory challenges for the robot.
Nodes and Sensors to research and implement: -NAV2 Stack -Lidar, IMU
I spoke with Natalie about how to approach implementing the NAV2 stack with ROS2 and she relayed advice from Will about which tutorials to use and possibly implementing a SLAM algorithm for our robot simulation in the future. I started following this tutorial: https://automaticaddison.com/how-to-create-a-simulated-mobile-robot-in-ros-2-using-urdf/ using our VM and ran into some issues with running the scripts as our subteam uses the humble version of ROS2, not foxy. I brought this up to Natalie and Will, and I continued to search for different NAV2 tutorials for humble ROS 2.
New SLAM algorithm resources:
Also, this week our midterm paper was due on Thursday so we worked on updating our paper with our new research from this semester including fault detection and the ROS2 navigation stack. Natalie and I updated the Nodes/Sensors section of the paper with the navigation stack information and what sensors (Lidar, camera, IMU) we're continuing to research and implement on our robot.
Midterm Fall 2024 Paper: https://drive.google.com/file/d/1sUfqW2Pq7EzE2q3GrQ_-sRDcYVBI0rdV/view?usp=sharing
On Monday, we had our weekly subteam meeting and spoke about what to add from our previous ROS/HELICS presentations and how to format the Midterm Presentation on Thursday. Me and Natalie worked on adding the new research information from this semester about the Lidar and IMU sensors and the ROS2 navigation stack we're currently trying to implement.
ROS/HELICS Fall 2024 Midterm Presentation: https://docs.google.com/presentation/d/1HzaKoEoGk5fbkBq3Z_HTk_cs3tCTaY8InMzzSzCB6DA/edit#slide=id.g2bdc21486d8_0_7457
Our team created a Jira board to track our progress in our different subtask assignments: fault detection, nodes/sensors, physical environment, and mission/trajectory planning. Natalie and I self assigned ourselves multiple tickets regarding the implementation of navigation in the substation and researching Lidar and IMU sensors.
Since all areas of our subteam are currently working on the technical side of their subtasks, we decided it would be an appropriate time to reach out to the Device Modeling Team and ask where we connect technically for a broader goal for our robot.
Device Modeling Questionnaire for Power Grid Simulation: https://docs.google.com/document/d/1GQU9f-kgPzDouTkN42snB0Jx5wAlGQ6k/edit?usp=sharing&ouid=112834483530694821967&rtpof=true&sd=true
Our team primarily worked on improving our research goals and working on implementing the technical side of our subtasks based on the instructors' feedback from the Midterm Presentation and Paper. Primarily, we need to create and assign concrete missions, which we are now tracking our progress on for different subteams using our ROS/HELICS Jira board. Natalie and I also discussed trying to install the appropriate libraries and run the scripts to run the ROS2 navigation stack using our VM. Hussein also offered to help us with navigation as the mission and trajectory planning team are also involved with researching how the robot navigates its physical environment.
Since we are currently all working on different concrete missions, we decided to diagram each subteam's tasks on a high-level map to show how all of our tasks are connected. This will help us to plan for future integration within the ROS/HELICS Subteam as well as with the Device Modeling Team. Me and Natalie added our current research with navigation on the chart, so other team members could connect it with their subtasks.
ROS/HELICS High-Level Overview: https://drive.google.com/file/d/1GAK-vKg3EYosv0BZRGW_1TrCeVZH-o7n/view?usp=sharing
This week I primarily worked on working through editing the bash script that I'm running for the NAV2 tutorial.
I continued working on preparing the new Nodes/Sensors data and research for the final presentation next week. When working through the ROS2 Nav Stack tutorial, I tried to edit the commands given to work with our humble version of ROS2 installed, not foxy.
However, editing and running the bash scripts and sudo commands to install the proper packages did not work and wouldn't download properly. I told Natalie and we planned to ask Will for alternate solutions to fix this issue or find another NAV tutorial that doesn't use the foxy distro.
On Thursday, our team presented our final ROS/HELICS presentation to the class. Overall, it went well and we did a good job of showing off all of our technical work and progress towards our subteam goals.
ROS/HELICS Fall 2024 Final Presentation: https://docs.google.com/presentation/d/1S6kFMu4j1A9ZMgK4pYb2RuN8A9Jm4q3GL5uzXhCnuro/edit?usp=sharing
Our feedback showed that we are close to integrating with the Device Modeling Team to make a final simulation of our robot in the future. After our presentation, Natalie and I asked Will how to solve our issues with running NAV2, and he searched for an alternate tutorial and found one that we could run that didn't use foxy: https://roboticsbackend.com/ros2-nav2-tutorial/.
After running the proper commands, I was able to get NAV2 running on our VM and opened up the navigation map.
